测量球形物体图像中任意2点之间的差异的单位是什么。
例如网球上2个红点之间的距离。
注意:事实上,由于球是非欧几里德,所以不能使用“欧几里德距离”。球几乎是球形的,成像系统将球表面投射在平面上,其中图像元素不是等间隔的,也不代表相等的区域。真欧几里德距离取决于点相对于相机的实际位置。
答案 0 :(得分:2)
假设图片采用空间的等距投影,我们可以测量图片上的坐标,就好像它们是平面上的坐标一样。
从那里我们可以将它们转换成任意以球为中心的球坐标系,然后我们就可以很容易地得到它们之间的距离。
让我们假设您知道球体的半径r。我们将使用以球体中心为中心的坐标系,x是与图片引起的平面投影正交的方向(因此矢量直接出现在照片之外)。然后方向y和z在图片中,让我们取y水平和z垂直。参见图纸以供参考。
然后由此引起的球面坐标系使得我们与球体的中心距离始终为r
,并且2角度为θ和phi:
angles illustrated http://motionscript.com/mastering-expressions/img/spherical-coords.gif
现在我们可以将每个点转换为球面坐标并计算它们之间的距离。
对于每个点,z
坐标是点与水平线之间的图像上的垂直距离,将两个相等的一半切割成球。用r
,球的半径表示z = c * r
,c
,[-1,1]
z = r * cos(theta)
表示,如果点低于线,则为负,如果高于正数则为正。
我们知道theta = arccos(c)
,所以[0,Π]
。由于theta在y
,因此这里没有特殊情况。
现在以相同的方式测量y = r * b
,这是点与在2中切割球的垂直线之间的水平距离(向右为正)。b
和{{ 1}} [-1,1]
。
我们需要theta的正弦值,sin(theta) = sqrt(1 - c*c)
,然后是phi = arcsin( b / sqrt(1 - c*c) )
。因为我们可以看到图片上的点,我们知道它的坐标系定义为x > 0
。这意味着phi
位于[-Π/2,Π/2]
,所以这里的三角学也没有任何技巧或惊喜。
好的一切都在this math exchange question中解释,因为大多数大弧距离都是用纬度和经度表示的,它们使用不同的约定。
现在我们用以前计算过的c1,c2,b1和b2替换公式的元素:
你最终获得的公式是,其中cos -1 也称为arccos函数。
我不会深入研究细节(特别是因为从移动应用程序中包含乳胶是如此痛苦),但步骤如下:
最终的衡量单位将是您表达的任何单位r
。
如您所见,您只需要在arccos结束后的半径(对于b
和c
s,您只需要r
的大小和y
{1}} s和z
在图片上,而不是在物理世界中。
然后,如果你只想比较同一个球体上的点的距离,你可以简化r
,并比较球体中心点之间的角度(即只使用arccos的结果而不用乘以r
),因为这些角度与球体上弧线的距离成正比。然后,您的测量单位将以弧度为单位。