Получение углов вместе с длиной линий в точках на спирали с помощью матлаба/октавы

Я пытаюсь получить различные углы (тета синего цвета на картинке) вместе с длиной линий (красная точка — это конечная точка от нуля) Смотрите картинку ниже

Обратите внимание, что я пытаюсь получить более одного угла и более одной длины от нуля, я планирую создать функцию, в которой я буду получать угол или длину линии, если я введу заданный угол или заданную длину.

Спираль

Я пытаюсь воссоздать изображение выше, используя параметрическую форму, я следовал инструкциям с этого веб-сайта http://www.intmath.com/blog/golden-spiral/6512?PageSpeed=noscript Но, похоже, это не работает. Основная цель — получить различные углы и длину линий с нуля.

Код вместе с сюжетом у меня ниже

clear all, clc, clf
%find how many angles to make one full cycleremeber to divide by two if using stereo signal 180 out of phase
incr=20;
angle_wanted=incr;

n = lcm(360, 180 - angle_wanted) / (180 - angle_wanted)
angle_div=[0:incr:incr*n] %angle divsions
angle_div_mod=mod(angle_div,360) %angle divsions mod into 360
angle_div_mod_opp=mod(angle_div+180,360) %oppsite angle divsions mod into 360

%for circles
r= 2.2;
for rho  =  0:0.1:2
    [x1,y1] = pol2cart(  0:0.01:2*pi , rho);
    plot(x1,y1,'b')
    axis(1.10*[-r r -r r])
    axis equal
    hold on;
end

%for orig angles

for ii=1:n
    angle=angle_div(ii)
    [x1,y1] = pol2cart(  angle / 180 * pi , [0 2]);
    plot(x1,y1,'r')
    hold on;
    title_h=title(['Norig= ', int2str(ii)]);
    %title_h = title('This is the title');
    set(title_h, 'Position', [0.5, 0.02],'VerticalAlignment', 'bottom', 'HorizontalAlignment', 'left')
    %%for creating orig angles
    idx=angle_div_mod(ii);
    text(r*cos(pi*idx/180),r*sin(pi*idx/180),num2str(idx), 'HorizontalAlignment','center', 'color',[1 .5 0])
    pause (.1)
end

%for oppsite angles
for ii=1:n
    angle_opp=angle_div_mod_opp(ii)
    [x1,y1] = pol2cart(  angle_opp/ 180 * pi , [0 2]);
    plot(x1,y1,'g')
    hold on;
    title(['Nopp= ', int2str(ii)]);
    %for creating oppsite angles
    idx=angle_div_mod_opp(ii);
    text(r*cos(pi*idx/180),r*sin(pi*idx/180),num2str(idx), 'HorizontalAlignment','center', 'color',[.5 .7 .7])
    pause (.1)
end

 t = linspace(0,5*pi,1000);
 r=e^0.30635*t;
 x = r.*cos(t);
 y = r.*sin(t);
 plot(x,y)

сюжет


person Rick T    schedule 02.12.2014    source источник
comment
Что ты хочешь? произвести изображение на этом веб-сайте?   -  person Rashid    schedule 02.12.2014
comment
@Kamtal да, изображение вместе с получением различных углов (тета) вместе с длиной линий от нуля в качестве вывода с использованием функции.   -  person Rick T    schedule 02.12.2014
comment
@Kamtal Я использую pol2cart три раза в своем коде ... последнее изображение - это то, что производит pol2cart   -  person Rick T    schedule 02.12.2014
comment
@RickT Что вы подразумеваете под получением различных углов и длин от нуля? Не это ли именно то, что вы замышляете? У вас есть угол t и длина r. Затем вы конвертируете в декартово (используя косинус/синус) и строите. Что не так с «т» и «р»?   -  person Peter    schedule 02.12.2014


Ответы (2)


r = @(t) exp(.306349*t);
h = plot(0,0,'Color','b','LineWidth',2);
h = handle(h);
axis(50*[-1 1 -1 1]);
grid on
n = 1;
for t = 0 : .1 : 5*pi
    x(n) = r(t) .* cos(t);
    y(n) = r(t) .* sin(t);
    h.XData(n) = x(n); 
    h.YData(n) = y(n);
    n = n + 1;
end

с использованием patch вы получите,

введите здесь описание изображения

[r(t),t] - это длина и углы.

person Rashid    schedule 02.12.2014
comment
@RickT Я не могу понять, почему вы не получите длину и угол на cart2pol. Пожалуйста, прокомментируйте, если я что-то упустил. - person Rashid; 02.12.2014

Я бы использовал ezpolar для построения графика, так как таким образом очень легко отображать символьные функции. Некоторый код, чтобы вы начали:

% function parameters
a = 1;
b = 1;
syms theta
rho = a*exp(theta*cot(b));


version = input('find length (1) or angle (0)?');

if version == 1
    theta = input('give the angle in radians');
    ezpolar(rho,[0,theta*pi]);
    linelength = eval(rho)
end

if version == 0
    linelength = input('give the line length');
    angle = eval(solve(rho==linelength))
    ezpolar(rho,[0,angle*pi]);
end

Обратите внимание, что это не отображает саму синюю линию, хотя это не должно быть слишком сложно, начиная с этой реализации. Спираль рисуется до точки, которую вы пытаетесь рассчитать.

person Wouter Kuijsters    schedule 02.12.2014