如何围绕一个点旋转一个三角形(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。
答案 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