2016-11-16 52 views
1

我遇到了javafx(java 8)中的多邊形類的一個奇怪的問題。 當我應用一個集翻譯,旋轉或縮放多邊形實例時,它正確地移動我的形狀周圍的多邊形。問題是,getPoints()方法中的點保持不變。 我現在開始創建自己的方法並圍繞點移動並重置它們,方法做他們應該做的事,但它是正確的嗎?JavaFX多邊形翻譯,旋轉,縮放及其點

下面的例子:

private void translatePoints(double translateX, double translateY) { 
    List<Double> newPoints = new ArrayList<>(); 
    for (int i = 0; i < getPoints().size(); i += 2) { 
     newPoints.add(getPoints().get(i) + translateX); 
     newPoints.add(getPoints().get(i + 1) + translateY); 
    } 
    getPoints().clear(); 
    getPoints().addAll(newPoints); 
} 

有沒有辦法了幾個操作後得到的平移,旋轉和縮放點?

還是我必須分開實施它們?

回答

2

看一看的TransformAffineRotateScaleShearTranslate)的子類。它們允許您使用transform2DPoints方法轉換存儲在double[]陣列中的點。

double[] points = new double[] { 
    0, 0, 
    0, 1, 
    1, 1, 
    1, 0 
}; 
Rotate rot = new Rotate(45, 0.5, 0.5); 
Translate t = new Translate(5, 7); 
Scale sc = new Scale(3, 3); 

for (Transform transform : Arrays.asList(rot, t, sc)) { 
    transform.transform2DPoints(points, 0, points, 0, 4); 
} 

System.out.println(Arrays.toString(points)); 

這種方式您需要照顧確定轉換的樞軸點,這些轉換點與您自己相關。

你也可以得到所得變換使用Node.getLocalToParentTransform節點。

double[] points = polygon.getPoints().stream().mapToDouble(Number::doubleValue).toArray(); 
polygon.getLocalToParentTransform().transform2DPoints(points, 0, points, 0, points.length/2); 
System.out.println(Arrays.toString(points)); 
+0

THX,這是正確的建議。爲我工作 – user2699706