其中有乙個效果是這樣的:
這個會轉的散點球面效果就是接下來要說的。
先放一下我做的效果吧。
python仿soul旋轉球效果
首先,這是乙個3d的效果,當然,我們也不可能選擇使用3d引擎來做。實際上,渲染的時候我們只需要在2d平面上渲染就行。
我們從互動效果入手。球是圍繞著過球心的一條直線旋轉的,這條線就是旋轉軸,那麼怎麼確定這條旋轉軸呢?我們在螢幕上劃一條線,顯然,旋轉軸垂直我們劃出來的這條直線。旋轉除了要旋轉軸之外,我們還需要乙個旋轉角,這個我們可以按照劃線長度按照一定比例換算成旋轉角度。從互動效果中,我們分析了使用者互動會提供的兩個引數:旋轉軸、旋轉角度。
那麼要實現這個會旋轉的散點球面,顯然我們首先要生成一堆散點,這些散點分布在球面上,最好能夠均勻分布。至於如何均勻分布這些點,可以看看10560 怎樣在球面上「均勻」排列許多點?
那麼如何根據這兩個互動引數旋轉我們的球呢?
1、這個球是散點組成的,第乙個思路就是旋轉這些點。圍繞著某個旋轉軸旋轉點,我們可以把散點換成向量,把旋轉軸也換成向量,這樣,問題就變成向量圍繞另乙個向量旋轉的問題,我們有羅德里格旋轉公式。
2、另外,我們可以這樣想,把座標系旋轉,然後求出各個點在原座標系下的座標。那麼我們怎麼描述乙個座標系呢?我們可以通過一組基底向量。比如i⃗,
j⃗,k
⃗分別表
示某個坐
標係x,
y,z軸
的三個基
底假設某
點p在該
系下的坐
標為(x
,y,z
)那麼其
在標準坐
標係下的
向量表示
應該為x
i⃗+y
j⃗+z
k⃗我們
也可以使
用矩陣乘
法來表示
:設a=
[i⃗j
⃗k⃗]
,x=[
xyz]
,ax即
所求\vec, \vec, \vec 分別表示某個座標系x,y,z軸的三個基底 \\ 假設某點p在該系下的座標為(x, y, z) \\ 那麼其在標準座標系下的向量表示應該為 x\vec + y\vec + z\vec \\ 我們也可以使用矩陣乘法來表示: \\ 設a = \begin \vec & \vec & \vec \end, x = \begin x \\ y \\z \end,ax即所求
i,j,k
分別表示
某個座標
系x,y
,z軸的
三個基底
假設某點
p在該系
下的座標
為(x,
y,z)
那麼其在
標準座標
系下的向
量表示應
該為xi
+yj
+zk我
們也可以
使用矩陣
乘法來表
示:設a
=[i
jk
],x
=⎣⎡
xyz
⎦⎤,
ax即所
求 第二種思路中,我們對三個基底i⃗,
j⃗,k
⃗\vec, \vec, \vec
i,j,k
圍繞旋轉軸向量旋轉後得到新的基底,也就是得到新的座標系,再求 axax
ax就可以得到我們需要的旋轉後的散點座標了。
github,採用第二種方法。
python旋轉 Python實現旋轉矩陣
要求 給乙個n n的陣列,旋轉90度。手動畫個醜圖 image.png 簡單思路 順時針 如圖四個紅框為乙個layer,每次旋轉乙個layer,layer的範圍是 0,len nums 2 在第乙個layer迴圈中,要將四角的元素按一下順序旋轉 0,0 轉到 0,3 轉到 3,3 轉到 3,0 轉到...
KL散度及其python實現
kl散度又是乙個從資訊理論 熵的角度考量距離的乙個量。但是,這裡說他是距離有點不妥,因為距離需要滿足4個條件 1 d x,x 0 反身性 2 d x,y 0 非負性 3 d x,y d y,x 對稱性 4 d x,k d k,y d x,y 三角形法則 但是,很遺憾,我們的kl散度至滿足前面兩條,後...
LeetCode使用Python實現旋轉陣列
給定乙個陣列,將陣列中的元素向右移動 k 個位置,其中 k 是非負數。輸入 1,2,3,4,5,6,7 和 k 3 輸出 5,6,7,1,2,3,4 解釋 向右旋轉 1 步 7,1,2,3,4,5,6 向右旋轉 2 步 6,7,1,2,3,4,5 向右旋轉 3 步 5,6,7,1,2,3,4 輸入 ...