以给定角度旋转点

时间:2018-11-28 12:09:38

标签: java javafx

我编写了一个代码,该代码应逆时针旋转一个点。但是它不能正常工作。

public boolean contains(double x, double y) {
    double ox = this.x.get() + (this.width.get()/2);
    double oy = this.y.get() + (this.height.get()/2);
    double theta = rotate.get() - (rotate.get() * 2);
    double px1 = Math.cos(theta) * (x-ox) - Math.sin(theta) * (y-oy) + ox;
    double py1 = Math.sin(theta) * (x-ox) + Math.cos(theta) * (y-oy) + oy;
    return shape.contains(px1, py1);
}

x,y-是要旋转的点的坐标。

ox,oy-是要旋转的点的坐标。

rotate.get()-旋转角度

更新:解决问题的代码发生了变化,谁可以派上用场?

    double px1 = Math.cos(Math.toRadians(theta)) * (x-ox) - Math.sin(Math.toRadians(theta)) * (y-oy) + ox;
    double py1 = Math.sin(Math.toRadians(theta)) * (x-ox) + Math.cos(Math.toRadians(theta)) * (y-oy) + oy;

2 个答案:

答案 0 :(得分:2)

请检查您的(?=...)是否会给您度数(例如45°)或弧度值(例如0.5 * pi)。 rotate.get()Math.sin()仅接受弧度。

要转换它们,您可以使用类似Math.cos()

答案 1 :(得分:1)

尽管可以回答,但完成此操作的另一种简单方法是使用Rotate类的内置方法。这样,您就不必担心数学问题;)

Rotate r = new Rotate();
r.setPivotX(ox);
r.setPivotY(oy);
r.setAngle(angleInDegrees);
Point2D point = r.transform(new Point2D(x, y));