【问题标题】:JavaFX Polygon Translation, Rotation, Scaling and its PointsJavaFX 多边形平移、旋转、缩放及其要点
【发布时间】:2016-11-16 20:13:19
【问题描述】:

我在 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);
}

有没有办法在几次操作后获得平移、旋转和缩放的点?

或者我必须分别实现它们吗?

【问题讨论】:

    标签: java javafx javafx-2 javafx-8


    【解决方案1】:

    查看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));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-09-29
      • 1970-01-01
      • 2019-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-01
      相关资源
      最近更新 更多