繁体   English   中英

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

[英]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的子类( 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));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM