当前位置: 首页 > 知识库问答 >
问题:

JavaFX获取旋转图像视图的角坐标?

柏夕
2023-03-14

我正在做一个简单的模拟,并且在寻找一个旋转的、大小怪异的ImageView节点的X和Y坐标时遇到了很多麻烦。(蓝色的部分是前面)

目标是在旋转后找出相对于imageView指向的方向的XY坐标。我可以找到imageView相对于其起始位置的角度,但我不知道如何获得imageView相对于该角度的XY坐标。从那以后。setRotate(angle)方法不会更改imageView的X和Y位置,我应该如何查找imageView面对的点?

我正在使用的旋转和ImageView的最小示例:

主要的JAVA

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) {
        Group root = new Group();

        primaryStage.setScene(new Scene(root, 500, 500));

        Image robotImage = null;

        try {
            robotImage = new Image(new FileInputStream("res\\robot.png"));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        ImageView robot = new ImageView(robotImage);
        robot.setLayoutX(125);
        robot.setLayoutY(125);

        System.out.println("PreRotate X: " + robot.getLayoutX() + "PreRotate Y: " + robot.getLayoutY());
        robot.setRotate(45);
        System.out.println("PostRotate X: " + robot.getLayoutX() + "PostRotate Y: " + robot.getLayoutY());
        root.getChildren().add(robot);

        primaryStage.show();
    }


    public static void main(String[] args) {
        launch(args);
    }
}

我已经尝试使用imageView的边界以及位于imageView顶部的线,但这要求我在每次imageView更改其最大/最小x/y时都找到新的最大/最小x/y。

例如:

        if (turnAngle < 35) {
            directionLine.setStartX(robotLeftRightAngle.getBoundsInParent().getMaxX());
            directionLine.setStartY(robotLeftRightAngle.getBoundsInParent().getMinY());
            directionLine.setEndX(robotRightLeftAngle.getBoundsInParent().getMinX() + ((robotLeftRightAngle.getBoundsInParent().getMaxX() - robotRightLeftAngle.getBoundsInParent().getMinX()) / 2));
            directionLine.setEndY(robotRightLeftAngle.getBoundsInParent().getMinY() + ((robotLeftRightAngle.getBoundsInParent().getMinY() - robotRightLeftAngle.getBoundsInParent().getMinY()) / 2));
        }
        else if (turnAngle < 55) {
            directionLine.setStartX(robotLeftRightAngle.getBoundsInParent().getMaxX());
            directionLine.setStartY(robotLeftRightAngle.getBoundsInParent().getMaxY());
            directionLine.setEndX(robotRightLeftAngle.getBoundsInParent().getMinX() + ((robotLeftRightAngle.getBoundsInParent().getMaxX() - robotRightLeftAngle.getBoundsInParent().getMinX()) / 2));
            directionLine.setEndY(robotRightLeftAngle.getBoundsInParent().getMinY() + ((robotLeftRightAngle.getBoundsInParent().getMaxY() - robotRightLeftAngle.getBoundsInParent().getMinY()) / 2));
        }

一直到360度。干货。

我应该如何处理这个问题?我使用了错误的转换吗?我没有看到一种方法可以用于此吗?我知道一定有更好的办法。谢谢你的阅读。

共有1个答案

杜禄
2023-03-14

我不确定我100%理解这个问题。坐标系统之间的转换,但是很难从你的描述中说出你需要转换的坐标系统,所以我假设你想在机器人的坐标系到的坐标系之间转换。

它可以使用localToP的从一个节点的坐标系转换到父节点的坐标系,以适应所有的转换。(父母本地将实现逆变换,但这似乎不是所需的转换案例。)

下面的示例将一行的起点和终点修改为Rectgle坐标系中的Rectgle上方的左上角坐标和100px点的坐标:

@Override
public void start(Stage primaryStage) {
    Group root = new Group();

    primaryStage.setScene(new Scene(root, 500, 500));

    Rectangle robot = new Rectangle(100, 20, Color.RED);
    robot.setLayoutX(125);
    robot.setLayoutY(125);
    Line line = new Line(125, 125, 125, 25);

    robot.rotateProperty().addListener(o -> {
        Point2D start = robot.localToParent(0, 0);
        Point2D end = robot.localToParent(0, -100);
        line.setStartX(start.getX());
        line.setStartY(start.getY());
        line.setEndX(end.getX());
        line.setEndY(end.getY());
    });

    RotateTransition rotateTransition = new RotateTransition(Duration.seconds(5), robot);
    rotateTransition.setCycleCount(Animation.INDEFINITE);
    rotateTransition.setFromAngle(0);
    rotateTransition.setToAngle(360);
    rotateTransition.setInterpolator(Interpolator.LINEAR);
    rotateTransition.play();

    root.getChildren().addAll(robot, line);

    primaryStage.show();
}
 类似资料:
  • 在Javafx中旋转图像? 我正在写 但是图像不会相对于图像的中心旋转。

  • 当我尝试使用旋转图像视图时,我现在开始学习JavaFX 它绕着它的中轴线旋转,但是当我尝试使用 它随机旋转,我不知道它的旋转轴是一样的

  • 如何获得旋转矩形的角坐标(以矩形为中心)? 我已经尝试了以下链接中的所有解决方案,但似乎没有任何运气。 将一个点绕另一个点旋转(2D) 找到给定中心点和旋转的旋转矩形的角 https://game dev . stack exchange . com/questions/86755/how-to-calculate-corner-positions-marks-of-a-rotated-tilte

  • 我试图让用户从图库中选择个人资料图片。我的问题是有些图片向右旋转。 我启动图像选择器,如下所示: 我得到的图像从onActivityResult这样: 如何使图像不旋转? 更新: 根据我收到的一些有用的答案,我设法提出了以下可行的解决方案(它只是一个可行的代码,写得不好)。我很想得到你对我如何改进的反馈!

  • 问题内容: 我需要能够单独旋转图像(在Java中)。到目前为止,我发现的唯一东西是g2d.drawImage(image,affinetransform,ImageObserver)。不幸的是,我需要在特定点绘制图像,并且没有一种方法带有参数1.分别旋转图像和2.允许我设置x和y。任何帮助表示赞赏 问题答案: 这就是你可以做到的。这段代码假设存在一个名为“ image”的缓冲图像(如你的评论所说)