我正在製作一個「身體」類,它將一堆2D形狀組合在一起形成一個可移動的可旋轉物體。如何圍繞任意點旋轉一組2D形狀
我需要知道的是,我如何以某種方式旋轉每個單獨的形狀,使其看起來像整個身體正在旋轉,而不是每個形狀都圍繞它的中心旋轉。 我不能將每個形狀的旋轉中心更改爲同一點,因爲這會導致它們的位置也受到影響。
因此我需要找到某種方程式的使用了機構中心重新定位,並在身體在保持身材不變形的方式重新旋轉每個單獨的形狀?
我該怎麼做?
我正在製作一個「身體」類,它將一堆2D形狀組合在一起形成一個可移動的可旋轉物體。如何圍繞任意點旋轉一組2D形狀
我需要知道的是,我如何以某種方式旋轉每個單獨的形狀,使其看起來像整個身體正在旋轉,而不是每個形狀都圍繞它的中心旋轉。 我不能將每個形狀的旋轉中心更改爲同一點,因爲這會導致它們的位置也受到影響。
因此我需要找到某種方程式的使用了機構中心重新定位,並在身體在保持身材不變形的方式重新旋轉每個單獨的形狀?
我該怎麼做?
我假設你用笛卡爾座標(x,y)表示點,並且你對矢量的基本思想感到滿意。
要旋轉規定角度θ圍繞原點(0,0)的單點,我們改造它像這樣:
X」 = X cos(θ) - ÝSIN(θ)
ÿ '= X SIN(θ)+ Y COS(θ)
或者在矢量矩陣的形式:
X' = 中號(θ) X
(如果你不熟悉矢量矩陣的話,我可以說明它。)
要旋轉點X圍繞一點乙,這樣做:
X」 = 乙 + 中號(θ)(X - 乙)
要旋轉整個身體θ關於其中心B,只需旋轉ea ch形狀的中心θ約B,並且圍繞自己的中心旋轉每個形狀θ(您可以按任意順序執行這些步驟)。
您需要的是轉換的層次結構。從本質上講,3D中一直都在做什麼,只有你使用2D數學來做它。因此,而不是4×4仿射矩陣,你有3×3仿射矩陣。
每個單獨的形狀都需要進行局部變換。自身圍繞其中心的旋轉(相對於中性旋轉),以及自身相對於其父對象的中心點的平移。您將此轉換構建爲3x3矩陣。
您需要一個對象層次結構:一棵樹。你的「身體」是樹中的一個節點。它有孩子的節點:兩個大腿,兩個上臂和一個頭。每個大腿在小孩身上都有一個小腿,就像每個上臂在小孩身上有一個小臂。等等。
因此,當繪製所有東西的時候,你就會積累矩陣。你得到身體的變換矩陣,通過它轉換身體,並渲染它。然後你得到身體的每個孩子,乘以其父母的變換,通過該新的矩陣變換該形狀,並渲染它。然後,對於其中的每一個,重複該過程:取父矩陣,將其局部矩陣應用於該父矩陣,通過新矩陣變換該對象並進行渲染。遍歷整個對象層次結構。
真的,理解這個最好的方法就是看3D渲染器如何去做。二維渲染只是一個特例,你只能繞Z旋轉,只能進行二維平移。
通過任意點旋轉的方式首先是減去點座標,旋轉原點然後添加點座標。
x2 = px + (x1-px)*cos(q)-(y1-py)*sin(q)
y2 = py + (x1-px)*sin(q)+(y1-py)*cos(q)
其中px, py
是旋轉點座標,並x1,y1
原始2D形狀頂點和x2,y2
旋轉座標,並且在q
弧度的角度。
你知道如何旋轉另一個點嗎?並且是由其中心的位置定義的形狀的位置? – Beta
是的形狀的位置取決於中心,並且不,我不知道該怎麼做 – Griffin
-1。首先在數學交換中詢問這個數學,然後在需要時詢問實施。另請參閱維基百科的「2D旋轉」 - http://en.wikipedia.org/wiki/Transformation_matrix#Rotation。 – ja72