2014-05-19 37 views
1

在JavaFX節點的rotateProperty爲我提供了其相對於其父度旋轉。有沒有辦法獲得度數的絕對旋轉度,無論是相對於場景還是屏幕?如何獲得一個節點的absoulte旋轉的JavaFX

例如,有一種方法來計算從節點的變換對象)的角度我可以從getLocalToSceneTransform得到(?

+0

嗨,歡迎來到堆棧溢出。請向我們展示您嘗試過的內容,併發布您遇到的錯誤/問題。 – Stefan

+0

到目前爲止,我嘗試了Node.getRotate(),它向我的父類提供相對旋轉。電流快速和骯髒的解決方案是將遞歸調用的getParent()和積累getRotate的(),直到我接收的getParent()=零的值,並相應地到達現場節點的根。但是,我不確定這個解決方案有多強大。由於有像localToScene()這樣的方法,爲了以絕對的方式獲得節點的邊界,我想知道是否有更優雅的方式。 – mik

回答

2

所以,我做數學自己,對我來說,我無論是通過獲得的旋轉弧度:

double xx = myNode.getLocalToSceneTransform().getMxx(); 
double xy = myNode.getLocalToSceneTransform().getMxy(); 
double angle = Math.atan2(-xy, xx); 

double yx = myNode.getLocalToSceneTransform().getMyx(); 
double yy = myNode.getLocalToSceneTransform().getMyy(); 
double angle = Math.atan2(yx, yy); 

在這兩種情況下,這可以轉換爲360-度:

angle = Math.toDegrees(angle); 
angle = angle < 0 ? angle + 360 : angle; 
0

問題是沒有真正明確定義,由於在場景圖不同的節點可能繞不同的軸線。

getLocalToSceneTransform()方法將返回一個Transform表示從局部座標系的節點爲Scene的座標系的轉換。這是仿射變換;如果您願意,您可以提取相對於x-y軸和z軸的3x4矩陣表示。

+0

謝謝James_D。爲了更好地定義它:我只對2D旋轉感興趣,因爲它是從Node.getRotate()獲得的。你使用'Transform'對象從'getLocalToSceneTransform的建議()'已經是一個建議,我在我的問題做 - 我還是不知道如何/從這個對象計算角度。試圖將其轉換爲「旋轉」不起作用。 – mik

+0

圍繞哪個軸和哪個樞軸點旋轉? –

+0

在xy平面上的旋轉.so,可能圍繞着Z軸?和根據在[Java API 8文檔](http://docs.oracle.com/javafx/2/api/javafx/scene/Node.html#rotateProperty)「關於其發生旋轉樞軸點是中心Node.rotate()'操作的未轉換的'layoutBounds'「。謝謝 – mik