作者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/cn.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