使用matlab / octave在螺旋上的点处获得角度以及线的长度

时间:2014-12-02 15:58:07

标签: matlab math octave parametric-equations

我试图获得各种角度(图片上的蓝色 theta )以及线条的长度(红点是从零开始的终点见下图

请注意我试图获得的角度不仅仅是一个角度,而是从零开始只有一个长度,我打算制作一个函数,如果我输入一个给定的角度或长度角度或给定长度。

Spiral

我试图使用参数化表单重新创建上面的图片,我按照说明进行操作 这个网站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)

plot

2 个答案:

答案 0 :(得分:1)

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即可获得,

enter image description here

[r(t),t]是长度和角度。

答案 1 :(得分:0)

我会使用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

请注意,这并没有绘制蓝线本身,尽管从这个实现开始绘制起来应该不会太难。螺旋线被绘制到你想要计算的点。