如何围绕JavaFX中的点旋转三角形并获取这些点的值?

时间:2019-05-20 13:59:25

标签: java javafx

如何围绕一个点旋转一个三角形(3个点)?

我将三角形转换为Polyline,创建了带有角度和点的Rotate,并使用了.getTransforms(rotation)

不幸的是,这并没有改变Polyline,我试图将其转换回三角形以完成更多任务。

Polyline polyline = new Polyline();
polyline.getPoints().addAll(
  resized.getVertexA().getX(),resized.getVertexA().getY(),
  resized.getVertexB().getX(),resized.getVertexB().getY(),
  resized.getVertexC().getX(),resized.getVertexC().getY(),
  resized.getVertexA().getX(),resized.getVertexA().getY()
);

Rotate rotation = new Rotate(alpha, start.getX(), start.getY());
polyline.getTransforms().add(rotation);

Tuple vertexC = new Tuple(polyline.getPoints().get(4),
  polyline.getPoints().get(5));
...

我希望得到伽马为90度的矩形三角形C点的x和y。

3 个答案:

答案 0 :(得分:2)

我不知道使用JavaFX的方法,但是您可以使用Java2D来做到这一点:

double[] untransformedPoints = {
    resized.getVertexA().getX(), resized.getVertexA().getY(),
    resized.getVertexB().getX(), resized.getVertexB().getY(),
    resized.getVertexC().getX(), resized.getVertexC().getY(),
    resized.getVertexA().getX(), resized.getVertexA().getY()
};

double[] transformedPoints = new double[untransformedPoints.length];

AffineTransform rotation = AffineTransform.getRotateInstance(
    Math.toRadians(alpha), start.getX(), start.getY());

rotation.transform(untransformedPoints, 0, transformedPoints, 0,
    untransformedPoints.length / 2);

Tuple vertexC = new Tuple(transformedPoints[4], transformedPoints[5]);

答案 1 :(得分:1)

我认为您也可以通过以下方式从代码中获取点的转换值:

import javafx.geometry.Point2D;

Rotate rotation = new Rotate(alpha, start.getX(), start.getY());
Point2D rotatedPoint = rotation.transform(resized.getVertexC().getX(),resized.getVertexC().getY());

当然我知道这个值不是来自实际的转换,而是单独计算的。只是想让您知道这一点。

答案 2 :(得分:1)

如果添加变换,则本地坐标不会更改。父坐标系中的坐标会更改。

您可以使用Node的功能将本地坐标转换为父坐标:

Point2D pointInParent = polyline.localToParent(polyline.getPoints().get(4),
                                               polyline.getPoints().get(5));

或直接使用transform的{​​{1}}方法:

Rotate