我试图获得各种角度(图片上的蓝色 theta )以及线条的长度(红点是从零开始的终点) 见下图
请注意我试图获得的角度不仅仅是一个角度,而是从零开始只有一个长度,我打算制作一个函数,如果我输入一个给定的角度或长度角度或给定长度。
我试图使用参数化表单重新创建上面的图片,我按照说明进行操作 这个网站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)
答案 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
即可获得,
[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
请注意,这并没有绘制蓝线本身,尽管从这个实现开始绘制起来应该不会太难。螺旋线被绘制到你想要计算的点。