Re: [幾何] 請教有關程式碼裡所用的數學式子
※ 引述《phoenixlife (All in AAPL)》之銘言:
: 各位大大好
: 最近在看有關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或是原理才這
樣
: 感謝!
(通篇用大寫L取代小寫l, 為了好看)
首先程式碼中的phi與theta跟他文件所引用的wiki連結是相反的, 我這邊直接給你修正後
的結果:
phi是polar, 範圍從0~pi
theta是equator, 範圍從0~2pi
再來看程式碼的phi, 相當於在xy平面的上半圓等距灑上L個點, 注意並非是等角, 他是在
x軸上等距然後才往上對應半圓, 不過"視覺上"差不多, 只要有"均分"的效果就會有效果
再來看程式碼的theta, 相當於要把這些在xy平面中上半圓的點賦予角度, 即把這些不同
的點往多少高度與正反向打
比如theta=0就是原處, theta=90就是最低點, theta=180就是原處的背面...
所以我們就是要對每個點選擇theta以至於讓這些點均勻分布在整個球體
如果theta=(i/L)*2pi, 那你會看到一尾龍盤旋在圓上
其他的theta我公式化在下面的連結裡, 數學上來說就是選擇函數f後, 定義theta = f(i)
, 只要同餘函數mod(f(i),2pi)有分多段並且不同段間的高度都不一樣, 那視覺上就會有
原效果
https://www.desmos.com/calculator/yrrarwlfmn
(繪圖圖形可以點擊開關)
f_1是我的i
f_2是原程式碼
f_3是你的1.809
f_4是你的8pi
發現f_1~f_3都有我描述的"多段且每段不同高度", 而f_4的圖其實都是0(只是浮點誤差導
致有些點很接近2pi), 才會導致你那個圖, 而你那個圖是因為每個圖片有厚度, 換成點的
話你會發現他其實落在同一條圓弧
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.255.252.125 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Math/M.1649001797.A.0DA.html
推
04/04 00:25,
2年前
, 1F
04/04 00:25, 1F
→
04/04 00:25,
2年前
, 2F
04/04 00:25, 2F
我只能先猜應該不是, 只是我們要逆向工程去猜出他那個式子是要符合怎樣的數學目標式
, 然後驗證說這個公式是那個數學目標式的唯一解
正向工程來說, 流程就是:
1. 你想要圖形"看起來"均勻離散分布在球上
2. 為1.去定義數學目標式
3. 找出符合2.的數學公式
注意步驟2.沒有對錯問題, 只有主觀的像不像的問題, 因為2.就是把1.做數學建模
而目前這個情況看起來1.是對的, 但是有一堆函數都看起來符合1, 所以如果3.是算出來
的話, 作者應該想要讓圖形去符合更多的性質, 只是這個方向很難猜就是了...
※ 編輯: znmkhxrw (111.255.252.125 臺灣), 04/04/2022 00:31:34
→
04/04 00:27,
2年前
, 3F
04/04 00:27, 3F
→
04/04 00:27,
2年前
, 4F
04/04 00:27, 4F
→
04/04 00:31,
2年前
, 5F
04/04 00:31, 5F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):