阿基米德螺旋線原理及代碼


一個點在射線上勻速向外運動,同時射線以w的速度轉動,點的軌跡就被稱為阿基米德螺旋線或等速螺線。

1.公式

阿基米德螺旋線的極坐標公式可以表示為:
r = a + b θ r = a+b*\theta
其中a為起始點與極坐標中心的距離,主要負責旋轉整個螺線(增加a順時針旋轉);
b為控制螺線間的螺距, b = r θ b = \dfrac{r}{\theta} ,b越大變化越快螺線越密;
θ \theta 的范圍控制了螺線的大小, θ \theta 越大螺線的范圍越大。


直角坐標系下,利用極坐標系到直角坐標的公式,其公式可以被改寫為:
x = r c o s θ y = r s i n θ x = r*cos\theta\\ y = r*sin\theta
x = ( a + b θ ) c o s θ y = ( a + b θ ) s i n θ x = (a+b*\theta)*cos\theta\\ y = (a+b*\theta)*sin\theta


此外還可以利用角速度和線速度的概念來控制螺線的形狀,生成其他螺旋線:
x = v t c o s ( w t ) y = v t c o s ( w t ) x = vt*cos(wt)\\ y = vt*cos(wt)
上式為關於t的參數方程,其中v為線速度、w為角速度,t為點運動的時間。可以通過上式子得到等角速度、等線速度等各類螺旋

2.程序

首先我們來畫出極坐標系下的阿基米德螺線。

%matlab 程序
%不同a和b造成螺線的變化
theta = 0:0.01*pi:20*pi;
r1 = 0 + 0.1*theta;
r2 = 10 + 0.1*theta;
r3 = 20 + 0.1*theta;

polar(r1,theta,'b');hold on;
polar(r2,theta,'g')
polar(r3,theta,'r')

legend('a=0,b=0.1','a=10,b=0.1','a=20,b=0.r')

在這里插入圖片描述
隨后變化b來觀察螺距的變化:

theta = 0:0.01*pi:20*pi;
r4 = 10 + 0.03*theta;
r5 = 10 + 0.1*theta;
r6 = 10 + 0.5*theta;

polar(r4,theta,'b');hold on;
polar(r5,theta,'g')
polar(r6,theta,'r')

legend('a=10,b=0.03','a=10,b=0.1','a=10,b=0.5')

在這里插入圖片描述

隨后在直角坐標系中畫出螺線:

theta = 0:0.01*pi:20*pi;
r7 = 0 + 0.01*theta;
x = r7.*cos(theta);
y = r7.*sin(theta);
%初始點是0,螺距為0.01
%在直角坐標系下b控制着螺線間距,b越大螺線間距越大
plot(x,y,'r')

hold on;
r8 = 0 + 0.03*theta;
x = r8.*cos(theta);
y = r8.*sin(theta);
plot(x,y,'g')

r9 = 0 + 0.09*theta;
x = r9.*cos(theta);
y = r9.*sin(theta);
plot(x,y,'b')

legend('b=0.01','b=0.03','b=0.05')

在這里插入圖片描述

另外可以通過引入速度的概念控制螺線的形狀:

t = 0:0.01:100;
v = 10;  %線速度控制了大小,越大走得越快螺線形狀越大
w = 3 ; %角速度控制了疏密,越小越稀疏,單位時間內旋轉少。
x = v*t.*cos(w*t);
y = v*t.*sin(w*t);
subplot(2,2,1);
plot(x,y)
title('v=10,w=3')
axis([-1000 1000 -1000 1000])


v = 1;  %線速度變小,圖形變小
w = 3 ; 
x = v*t.*cos(w*t);
y = v*t.*sin(w*t);
subplot(2,2,2)
plot(x,y)
title('v=1,w=3')
axis([-1000 1000 -1000 1000])


v = 10;  
w = 0.3 ; %角速度變小,圖形變疏
x = v*t.*cos(w*t);
y = v*t.*sin(w*t);
subplot(2,2,3)
plot(x,y)
title('v=10,w=0.3')
axis([-1000 1000 -1000 1000])

v = 10;  %變大
w = 10 ; %變密
x = v*t.*cos(w*t);
y = v*t.*sin(w*t);
subplot(2,2,4)
plot(x,y)
title('v=10,w=10')
axis([-1000 1000 -1000 1000])

在這里插入圖片描述

或者將w變化或者v變化:

%向外漸開線
t = 0:0.01:100;
v = 0:0.001:10;  %線速度逐漸加快
w = 1 ; %
x = v.*t.*cos(w*t);
y = v.*t.*sin(w*t);
plot(x,y)


%漸密線
t = 0:0.01:100;
v = 0.1;  
w = 0:0.0001:1; ; %角速度逐漸加大變密.  tips:一定要注意區分坐標系,以及角速度與b的關系
x = v.*t.*cos(w.*t);
y = v.*t.*sin(w.*t);
plot(x,y)

在這里插入圖片描述在這里插入圖片描述


ref
https://baike.baidu.com/item/阿基米德螺線/6174118?fr=aladdin
http://muchong.com/html/201106/3290808.html
https://blog.csdn.net/menghuanxiy/article/details/81348393
http://blog.sina.cn/dpool/blog/s/blog_62c180b20102wx3n.html
在這里插入圖片描述
pic from pexels.com


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM