将图形对象旋转360度

时间:2016-02-22 06:15:55

标签: java android math geometry

我有两个点(x1,x2,y1,y2)它们正在形成一条垂直线。当用户旋转物体时,我知道这两点,问题是:如何找到形成水平线的其他两个点的坐标。如何更容易实现?我将不胜感激任何帮助!  example object

1 个答案:

答案 0 :(得分:1)

Rotation matrix是:

[cos(a) -sin(a)]
[sin(a)  cos(a)]

因此x,y旋转的是:

rx = x*cos(a) + y*sin(a);
ry = -x*sin(a) + y*cos(a);

因为另一条线是90度,所以评估为:

rx = y;
ry = -x;

所以:

(x1,x2,y1,y2) => (y1,y2,-x1,-x2)

我会使用Point类来存储它并将其放在一个方法中:

public static Point Rotate90(Point point){
     return new Point(point.y, -point.x);
}

现在关于原点的轮换,如果你的线需要触摸另一条线,那么你需要在前后翻译。

p = x,y
pr = centre of rotation

关于p

转动pr
Rotate90(p - pr) + pr

在方法中:

public static Point Rotate90(Point point, Point about){
     Point translated = new Point(point.x - about.x, point.y - about.y);
     Point rotated = Rotate90(translated);
     return new Point(rotated.x + about.x, rotated.y + about.y);
}