JavaFX多边形平移、旋转、缩放及其点
JavaFX Polygon Translation, Rotation, Scaling and its Points
我 运行 遇到一个 st运行ge 问题,来自 javafx (java 8) 的多边形 class。
当我在多边形实例上应用一组 t运行slate、旋转或缩放时,它正确地在我的形状上四处移动多边形。问题是,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);
}
有没有办法在几次操作后得到 t运行 指定的、旋转的和缩放的点?
还是我必须单独实施它们?
看看 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));
我 运行 遇到一个 st运行ge 问题,来自 javafx (java 8) 的多边形 class。 当我在多边形实例上应用一组 t运行slate、旋转或缩放时,它正确地在我的形状上四处移动多边形。问题是,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);
}
有没有办法在几次操作后得到 t运行 指定的、旋转的和缩放的点?
还是我必须单独实施它们?
看看 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));