簡體   English   中英

JavaFX多邊形平移,旋轉,縮放及其點

[英]JavaFX Polygon Translation, Rotation, Scaling and its Points

我遇到了來自javafx(java 8)的多邊形類的奇怪問題。 當我在多邊形實例上應用平移,旋轉或縮放時,它可以在我的形狀上正確移動多邊形。 問題是,getPoints()方法中的點保持不變。 我現在開始創建自己的方法,並在各個要點周圍移動並重置它們,這些方法將執行應有的作用,但這是正確的方法嗎?

這里是一個例子:

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);
}

經過幾次操作后,是否可以獲取轉換,旋轉和縮放的點?

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

看一下Transform的子類( AffineRotateScaleShearTranslate )。 它們使您可以使用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));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM