我编写了一个代码,该代码应逆时针旋转一个点。但是它不能正常工作。
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;
答案 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));