假设我有一个矩形(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)
答案 0 :(得分:1)
您可以围绕C执行旋转,但可以通过检查点A和B之间的关系来确定旋转角度。旋转角度为-atan2(dy, dx)
,其中dy = B.y-A.y
和{{1} }。
dx = B.x-A.x
的范围是atan2
到-M_PI
,因此表达式将始终提供最小的旋转,以使AB线平行于x轴。产生A.x <1的结果。 B.x,检查dx的符号。负dx表示A.x> B.x.在这种情况下,您的轮换应该通过pi调整。总结一下:
M_PI
将旋转应用于矩形坐标系中您想要的任何点。矩形将围绕该点旋转,以使线AB平行于x轴,留下A.x <1。 B.x。