gpt4 book ai didi

JavaFX 多边形平移、旋转、缩放及其点

转载 作者:行者123 更新时间:2023-11-30 02:44:23 25 4
gpt4 key购买 nike

我遇到了来自 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 的子类(仿射旋转缩放剪切平移)。它们允许您使用 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));

关于JavaFX 多边形平移、旋转、缩放及其点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40641451/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com