使用matlab/octave获得螺旋线上各点的角度和直线长度
我试图得到各种角度(图片上蓝色的θ)以及线条的长度(红点是从零开始的终点) 见下图 请注意,我试图从零得到不止一个角度和一个长度,我计划做一个函数,如果我输入一个给定的角度或给定的长度,我将得到线的角度或长度 我正在尝试使用参数化形式重新创建上面的图片,我是按照 本网站 但它似乎不起作用主要目标是从零开始获得各种角度以及直线的长度 下面是代码和我的绘图使用matlab/octave获得螺旋线上各点的角度和直线长度,matlab,math,octave,parametric-equations,Matlab,Math,Octave,Parametric Equations,我试图得到各种角度(图片上蓝色的θ)以及线条的长度(红点是从零开始的终点) 见下图 请注意,我试图从零得到不止一个角度和一个长度,我计划做一个函数,如果我输入一个给定的角度或给定的长度,我将得到线的角度或长度 我正在尝试使用参数化形式重新创建上面的图片,我是按照 本网站 但它似乎不起作用主要目标是从零开始获得各种角度以及直线的长度 下面是代码和我的绘图 clear all, clc, clf %find how many angles to make one full cycleremeber
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)
我将使用
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
请注意,这不会绘制蓝线本身,尽管从这个实现开始绘制应该不会太困难。螺旋线将向上绘制到您试图计算的点
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
使用补丁
您将获得
[r(t),t]
是长度和角度。你想要什么?在该网站上生成图片?@Kamtal是的,使用函数将图片与从零开始的各种角度(θ)以及线条长度一起作为输出。@Kamtal我在代码中使用了pol2cart三次……最后一张图片是pol2cartproduces@RickT你说的“从零开始得到各种角度和长度”是什么意思这不正是你在策划的吗?角度为“t”,长度为“r”。然后转换为笛卡尔坐标(使用cos/sin)并绘制。“t”和“r”怎么了?@RickT我不明白为什么你不能通过cart2pol
获得长度和角度。如果我遗漏了什么,请发表评论。