Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math 根据标记位置计算球的旋转角度_Math_Rotation_Geometry_Angle - Fatal编程技术网

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
也适用于此处。