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 的子类(AffineRotateScaleShearTranslate)。它们允许您使用 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));