兒時的記憶
小學時集鎮上的廟會總是熱鬧非凡,而對於我來講最重要的是可以得到一些零花錢自由支配,這種狀況只過年才有。所謂廟早已淹沒在歷史的長河中,但並不影響人們追尋熱鬧的本性。
大約三年級時的一次廟會,剛剛出門就被一個與眾不同的賣家吸引。並不像其他賣家一樣熱情的叫賣,而時坐在那裡安靜地繪製著各種神奇的圖案。我硬是蹲在那裡看看半天,最後還是把自己寶貴的零花錢「奉獻」了出來。之後好幾天都像是如獲至寶,不停地欣賞著筆下的各種神奇的圖案。
前幾天在某寶上居然再次看到了這種東西,才知道叫「萬花尺」,於是毫不猶豫下單買了一套,兒時的記憶總是那麼持久與美好。

萬花尺原理
尺子到貨後還是像兒時一樣,畫了一個晚上。畫著畫著有種強烈的衝動——尋找萬花尺的原理。
基於自己本科學的機械知識,萬花尺的原理就是行星齒輪。裡面的行星輪和大輪之間線速度相同,具體自己百度下吧,有具體的公式,為圓內旋輪線規律。
萬花尺與託勒密的宇宙
自己突然腦洞大開,發現萬花尺其實和託勒密的世界有著關聯。託勒密為了解釋行星的「逆行」問題,提出了「均輪——本輪」模型。

matlab實現
託勒密的「均輪——本輪」模型與萬花尺的區別在於:萬花尺的小輪和大輪通過尺嚙合,因此兩個線速度相同,而託勒密的模型則沒有這個限制。下圖中第二個圖可以明顯就可以用來解釋行星的逆行運動。
最後一個心形圖案送給天下母親。

核心代碼:
for n=0:1:N-1%將一周分為N份
t = 2*n*pi/N;%計算角度(弧度)
X(1) = R*sin(t) + r*sin(i*t);%計算X軸坐標
Y(1) = R*cos(t) + r*cos(i*t);%計算Y軸坐標
t = 2*(n+1)*pi/N;%第二點,用於連線
X(2) = R*sin(t) + r*sin(i*t);
Y(2) = R*cos(t) + r*cos(i*t);
plot( X,Y,'color',color(m,:));%繪製線段
set(gcf,'unit','centimeters','position',[1,2,15,15]);%確定畫布大小
axis equal;%保證刻度相同
axis([-20 20 -20 20] );%坐標範圍
hold on;
pause(0.01);%延時
end
外面在套一個循環就對比不同參數下的圖形。