作者phoenixlife (All in AAPL)
看板Math
標題[幾何] 請教有關程式碼裡所用的數學式子
時間Sun Apr 3 17:45:39 2022
各位大大好
最近在看有關three js裡面的example,看到元素表的例子
https://threejs.org/examples/?q=peri#css3d_periodictable
程式碼在此
https://reurl.cc/l9qDQl
看到有一段關於 元素螺旋平均分佈在球面上
這兩行 line 298,299這兩行讓我看很久
298 const phi = Math.acos( - 1 + ( 2 * i ) / l );
299 const theta = Math.sqrt( l * Math.PI ) * phi;
298行還可以理解
但299行完全不知道為什麼要 乘上 sqrt(l * pi) // l是元素總數
我查了一下,似乎看起來是Fibonacci sphere,然後也改了程式碼
const phi = Math.acos( - 1 + ( 2 * i ) / l )
const theta = Math.PI*(1.809)*i
結果長這樣
https://i.imgur.com/E1k10nO.png
也有很類似的效果,至於為什麼會是1.809,老實說我也不清楚,我只是測了幾組
黃金比例1.618,0.608,而1.809是常用在股市的黃金比例,如果數字不對,甚至不會平均分佈在球面上
例如調成8變這樣
https://i.imgur.com/bysIHIo.png
而原程式碼sqrt(l * pi)看起來不太像是用湊的權重,如果取代成 theta = XX * phi
XX 隨便當作一個常數有時也不會螺旋均勻分布在球體
因為小弟數學真的沒有很好
想問問看板上的大大有沒有人知道原程式碼 line 299行是根據什麼paper或是原理才這樣寫
感謝!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.127.107.51 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Math/M.1648979143.A.EBD.html
※ 編輯: phoenixlife (59.127.107.51 臺灣), 04/03/2022 17:47:15
※ 編輯: phoenixlife (59.127.107.51 臺灣), 04/03/2022 17:54:38
1F:推 znmkhxrw : 你打 const theta = i 看是否有類似效果, 如果也有 04/03 23:22
2F:→ znmkhxrw : 的話, 代表他原本的程式碼只是一種把點散佈到圓的一 04/03 23:22
3F:→ znmkhxrw : 種方式而已 04/03 23:22
有耶 有類似一樣的效果
※ 編輯: phoenixlife (59.127.107.51 臺灣), 04/03/2022 23:27:39
4F:→ phoenixlife : H he li b p c n ...雖然是平均分佈球面 但順序間隔 04/03 23:34
5F:→ phoenixlife : 有點跳 04/03 23:34
6F:推 znmkhxrw : 我回你一篇 稍等 04/03 23:39
7F:→ phoenixlife : 主要想知道為什麼他的方式可以這麼的完美 照順序螺 04/03 23:40
8F:推 Vulpix : 8的長那樣不是正常現象嗎?2,0,-6,4也一樣啊。 04/03 23:40
9F:→ phoenixlife : 旋又可以等距 04/03 23:40
10F:→ phoenixlife : 我覺得用8舉得不好,偶數pi的確都長這樣,但1.089表 04/03 23:54
11F:→ phoenixlife : 現的確是我目前測得最好 04/03 23:55
12F:→ phoenixlife : 更正1.809 04/03 23:55
13F:→ musicbox810 : 乘以sqrt(l * pi)的圖形,原PO可以截圖貼上嗎?第一 04/04 00:20
14F:→ musicbox810 : 個網址是一個平面,看不出是在球上 04/04 00:20
15F:→ phoenixlife : 你點開網址 點下面sphere就是結果 04/04 00:29
16F:→ musicbox810 : 謝謝,我仔細看了一下,感覺並沒有很均勻 04/04 00:37
17F:→ musicbox810 : 現在就是要去解釋為何會想取sqrt(Lpi)phi 04/04 00:37