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
相关产品推荐
相关产品推荐

