我遇到了javafx(java 8)中的polygon类的一个奇怪问题。 当我在多边形实例上应用一组平移,旋转或缩放时,它正确地在我的形状上移动多边形。问题是,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);
}
有没有办法在几次操作后获得平移,旋转和缩放的点?
或者我必须分开实施它们吗?
答案 0 :(得分:2)
查看Transform
(Affine
,Rotate
,Scale
,Shear
和Translate
)的子类。它们允许您使用double[]
方法转换存储在transform2DPoints
数组中的点。
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));