You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaFX中旋转矩形后如何获取新的左上角X、Y坐标?

解决JavaFX矩形旋转后获取新左上角坐标的问题

Hey,这个问题我之前也碰到过!其实JavaFX里的getX()和getY()返回的是矩形的布局坐标——也就是它在父容器里的原始定位点,旋转操作属于几何变换(Transform),不会改动这个基础的布局位置,所以旋转前后这俩值当然不变啦。

要获取旋转后矩形左上角在父容器中的实际坐标,有两种简单的方法:

方法一:使用localToParent()方法(推荐)

这个方法可以把矩形自身局部坐标系中的点,转换为父容器坐标系中的坐标。矩形的左上角在自身局部坐标系里是(0,0),直接把这个点转换就行:

Rectangle r = new Rectangle(100, 100, 40, 40);
System.out.println("旋转前布局X: " + r.getX() + ", 布局Y: " + r.getY()); // 输出100,100

r.setRotate(85);

// 将矩形自身左上角(0,0)转换为父容器中的坐标
Point2D rotatedTopLeft = r.localToParent(0, 0);
System.out.println("旋转后左上角X: " + rotatedTopLeft.getX() + ", Y: " + rotatedTopLeft.getY());

方法二:手动计算旋转坐标

如果想自己实现旋转逻辑,需要先确定旋转中心(默认是矩形的中心),再用旋转公式计算:

Rectangle r = new Rectangle(100, 100, 40, 40);
double rotateAngle = 85;

// 计算默认旋转中心(矩形中心)
double centerX = r.getX() + r.getWidth() / 2;
double centerY = r.getY() + r.getHeight() / 2;

// 原始左上角相对于旋转中心的偏移量
double offsetX = r.getX() - centerX;
double offsetY = r.getY() - centerY;

// 角度转弧度,应用旋转公式
double rad = Math.toRadians(rotateAngle);
double rotatedOffsetX = offsetX * Math.cos(rad) - offsetY * Math.sin(rad);
double rotatedOffsetY = offsetX * Math.sin(rad) + offsetY * Math.cos(rad);

// 转换为父容器中的实际坐标
double rotatedTopLeftX = centerX + rotatedOffsetX;
double rotatedTopLeftY = centerY + rotatedOffsetY;

System.out.println("旋转后左上角X: " + rotatedTopLeftX + ", Y: " + rotatedTopLeftY);

注意:如果你通过setRotatePivotX()和setRotatePivotY()修改了旋转中心,计算时要使用你设置的旋转中心坐标,而不是矩形中心哦。

内容的提问来源于stack exchange,提问作者Michael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:56:03