[英]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
的子類( Affine
, Rotate
, Scale
, Shear
和Translate
)。 它們使您可以使用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.