[英]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.