旋转一个矩形,直到两点具有相等的y坐标



假设我有一个矩形(R),在矩形内部有两个点,a和B。我需要围绕中心点(C)旋转矩形,使a和B具有相等的y坐标。由于这个的解可以产生两个单独的答案(其中Ax = <Bx,当Ax> Bx时,我想把它限制为只允许Ax <Bx。>

我的解是在绕M (A和B之间的中点)旋转时求出,然后绕C旋转(下)。

这是否在所有情况下都有效?提前感谢!

CGPoint m = CGPointMake(a.x / 2 + b.x / 2, a.y / 2 + b.y / 2);
float dx = m.x - a.x;
float dy = m.y - a.y;
float radians = -atan2f(dy, dx)

您可以围绕C进行旋转,但要通过检查A点和b点之间的关系来确定旋转角度,旋转角度将为-atan2(dy, dx),其中dy = B.y-A.ydx = B.x-A.x

atan2的范围是-M_PIM_PI,因此表达式将始终提供最小的旋转以使线AB平行于x轴。产生一个结果,其中A.x <B.x,检查dx的符号。一个负的dx意味着A.x> B.x,在这种情况下,你的旋转应该被调整。总结:

CGPoint A = // some point
CGPoint B = // some point
CGFloat dx = B.x - A.x;
CGFloat dy = B.y - A.y;
CGFloat rotation = (dx < 0)? M_PI+atan2(dy,dx) : -atan2(dy,dx);

将旋转应用于矩形坐标系中的任意点。矩形将围绕该点旋转,使直线AB平行于x轴,留下A.x

相关内容

最新更新