原問題
https://math.pro/db/viewthread.php?tid=924&page=1#pid1968
▲球面三角垛
SketchUp檔下載
▲功能表 視窗/元件選項可以調整每個邊球的個數
▲在SketchUp Pro版才能在功能表 視窗/元件屬性看到運作的機制
各屬性的公式如下
Copies=三角垛!Size*(三角垛!Size+1)*(三角垛!Size+2)/6-1
Discriminant=sqrt(9*(copy+1)*(copy+1)-1/27)
PositionZ=floor(-1+power(3*(copy+1)+Discriminant,0.33333)+power(3*(copy+1)-Discriminant,0.33333))
Remainder=copy-PositionZ*(PositionZ+1)*(PositionZ+2)/6
PositionX=floor((-1+sqrt(8*Remainder+1))/2)
PositionY=Remainder-PositionX*(PositionX+1)/2
X=(sqrt(3)*PositionX-2/sqrt(3)*PositionZ-1)*100
Y=(2*PositionY-PositionX-1)*100
Z=(2/3*sqrt(6)*(-1+三角垛!Size-PositionZ))*100
簡述背後的數學原理
1.要複製幾個球
Copies=三角垛!Size*(三角垛!Size+1)*(三角垛!Size+2)/6-1
每個球編號以SketchUp內建變數copy表示,編號從0到Copies。
三角垛個數公式為\( \displaystyle 1+3+6+10+\ldots+\frac{n(n+1)}{2}=\frac{n(n+1)(n+2)}{6} \)
https://zh.wikipedia.org/wiki/ ... 9.E8.A7.92.E5.9E.9B
2.編號第copy號的球在第幾層
Discriminant=sqrt(9*(copy+1)*(copy+1)-1/27)
PositionZ=floor(-1+power(3*(copy+1)+Discriminant,0.33333)+power(3*(copy+1)-Discriminant,0.33333))
從三角垛最上面的球編號下來
21
11 22 23
5 12 13 24 25 26
2 6 7 14 15 16 27 28 29 30
1 3 4 8 9 10 17 18 19 20 31 32 33 34 35
第1層 第2層 第3層 第4層 第5層
編號從1到35個球,但SketchUp內建變數copy從0開始數,所以copy要+1才是對應的編號。
一元三次方程式\( \displaystyle \frac{Z(Z+1)(Z+2)}{6}=copy+1 \)
化簡後得到\( Z^3+3Z+2Z-6(copy+1)=0 \)
利用一元三次方程式的公式解\( ax^3+bx^2+cx+d=0 \)
判別式\( D=\sqrt{\displaystyle \left( \frac{bc}{6a^2}-\frac{b^3}{27a^3}-\frac{d}{2a} \right)^2+\left( \frac{c}{3a}-\frac{b^2}{9a^2} \right)^3} \)
\( \displaystyle x=-\frac{b}{3a}+\root 3 \of{\displaystyle \frac{bc}{6a^2}-\frac{b^3}{27a^3}-\frac{d}{2a}+D}+\root 3 \of{\displaystyle \frac{bc}{6a^2}-\frac{b^3}{27a^3}-\frac{d}{2a}-D} \)
https://zh.wikipedia.org/wiki/ ... B.E8.A7.A3.E6.B3.95
各項係數\( a=1 \),\( b=3 \),\( c=2 \),\( d=-6(copy+1) \)
判別式\( D=\sqrt{\displaystyle 9(copy+1)^2-\frac{1}{27} } \)
\( Z=-1+\root 3 \of {3(copy+1)+D}+\root 3 \of {3(copy+1)-D} \)
\( PositionZ=\left[ Z \right] \)再取高斯函數得到整數
要注意的是PositionZ還要+1才是所在的層數
例如:copy=15,編號第16號球,計算得到PositionZ=3,但球在第4層
3.餘數多少
Remainder=copy-PositionZ*(PositionZ+1)*(PositionZ+2)/6
例如:copy=15,編號第16號球,PositionZ=3,計算得到Remainder=5(從0開始數),在第6個位置
4.在第幾排的第幾個
PositionX=floor((-1+sqrt(8*Remainder+1))/2)
PositionY=Remainder-PositionX*(PositionX+1)/2
一元二次方程式\( \displaystyle \frac{Z(Z+1)}{2}=Remainder \)
化簡後得到\( Z^2+Z-2Remainder=0 \)
\( \displaystyle Z=\frac{-1+\sqrt{8Remainder+1}}{2} \)
\( PositionX=\left[ Z \right] \)再取高斯函數得到整數
例如:copy=15,編號第16號球,Remainder=5,計算得到PositionX=2(從0開始數),在第3排
\( \displaystyle PositionY=Remainder-\frac{PositionX(PositionX+1)}{2}=2 \)(從0開始數),左邊數過來第3個
5.轉換成球心坐標
X=(sqrt(3)*PositionX-2/sqrt(3)*PositionZ-1)*100
Y=(2*PositionY-PositionX-1)*100
Z=(2/3*sqrt(6)*(-1+三角垛!Size-PositionZ))*100
參考\(n=4\)各層球心坐標,就可以知道球心坐標公式
https://math.pro/db/attachment.p ... 97&t=1482545551
補充資料
SketchUp動態元件教學
http://help.sketchup.com/en/article/3000118