Как повернуть треугольник вокруг точки в JavaFX и получить значение точек? - PullRequest
0 голосов
/ 20 мая 2019

Как мне повернуть треугольник (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));
...

Я ожидаю получить x и y точки C, изпрямоугольный треугольник с гаммой 90 градусов.

Ответы [ 3 ]

2 голосов
/ 20 мая 2019

Я не знаю, как это сделать в 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 голос
/ 21 мая 2019

Локальные координаты не меняются, если вы добавляете преобразования.Координаты в родительской системе координат изменяются.

Вы можете использовать функциональность Node для преобразования локальных координат в родительские координаты:

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

или использовать метод transformRotate напрямую:

Point2D pointInParent = rotation.transform(polyline.getPoints().get(4),
                                           polyline.getPoints().get(5));
1 голос
/ 21 мая 2019

Я думаю, что вы можете получить преобразованное значение точек из вашего кода следующим образом:

import javafx.geometry.Point2D;

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

Конечно, я знаю, что это значение не из фактического преобразования, а вычисляется отдельно.Подумал, чтобы ты знал об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...