Math 根据标记位置计算球的旋转角度
我用相机在蓝色球上追踪一个黑色标记,如下图所示 我可以可靠地检测到球图像顶部的标记位置,但需要知道 如何根据标记位置计算球的旋转角度Math 根据标记位置计算球的旋转角度,math,rotation,geometry,angle,Math,Rotation,Geometry,Angle,我用相机在蓝色球上追踪一个黑色标记,如下图所示 我可以可靠地检测到球图像顶部的标记位置,但需要知道 如何根据标记位置计算球的旋转角度 当标记处于中间时,两个角度应为0度。如图所示,当标记在左边缘仅可见一半时,水平角应为-90度。我知道2D图像的计算角度是非线性的,边缘附近的像素运动类似于旋转,比中间变化大,但我不能得出公式。 < P>垂直轴旋转: Phi = ArcSin((Marker.X - Center.X) / Radius) 通常,如果在半径为1的球操纵器的前表面抓住具有2D坐标
当标记处于中间时,两个角度应为0度。如图所示,当标记在左边缘仅可见一半时,水平角应为-90度。我知道2D图像的计算角度是非线性的,边缘附近的像素运动类似于旋转,比中间变化大,但我不能得出公式。 < P>垂直轴旋转:
Phi = ArcSin((Marker.X - Center.X) / Radius)
通常,如果在半径为1的球操纵器的前表面抓住具有2D坐标(x0,y0)的初始点,并将其拖动到终点(x1,y1),则旋转方向向量
d0 = (x0, y0, Sqrt(1 - x0^2 - y0^2))
to
d1 = (x1, y1, Sqrt(1 - x1^2 - y1^2))
如何处理这些向量?我取决于您将使用什么方法进行旋转我现在了解绕垂直轴旋转,谢谢。我想水平轴也是一样。不确定第二部分,x0、y0、x0和x1的范围是多少?我想1-x0^2-y0^2需要始终为正才能使sqrt工作?是的,只需将X更改为YFor
Radius=1
范围对于X和y为-1..1
,平方和不大于1,对于z坐标为正0..1
(我们只能看到前半球)@MBo我更喜欢使用atan2是arcsin
实现更精确,还是使用哪一个并不重要?@Spektre注意-我们需要球旋转,而不是给定点的整圆角度。我认为精度在这里并不重要。只是标记X位置的正弦定律依赖于绕垂直轴的旋转,这就是我使用Arcin的原因。此外,范围-Pi/2..Pi/2
也适用于此处。