我想了解一种非常特定的方法,用于计算二维平面上点到直线的距离。以下是具体步骤:
// Given an arbitrary point, and a normal vector
// to a line along with a scalar offset
distance = DotProduct(normal, point) - offset
我知道这是真的,因为Erin Catto在他的Box2D Lite源代码中使用了这种方法。在这个页面上,一位程序员提到了这个方程式:
distance = (V dot normal) - offset
这是我找到的唯一一个与此计算有关的资源。通常检查点与半空间相交的方法是将从所讨论平面到你的点的向量点乘,然后通过检查所得标量的符号(+或-)来确定它是否面向该平面的法线或背向法线。
在实时应用程序中,这可能是不理想的,因为找到平面上的一个点(或者在这种情况下是2D直线)可能很昂贵,并且您只有该线的法线和偏移量。
简而言之,"offset"是什么,如何计算?这个偏移量代表什么?根据我目前对自己的研究的了解,我的最佳猜测是,它是2D线的一般方程中的c变量:
ax + by + c = 0
附加信息: Erin Catto在几个地方(针对于定向边界框碰撞检测)中计算偏移量,但我不明白这里的数学或具体发生了什么:
offsetScalar = Dot(BoxPositionVector, normalVector) + BoxYHalfWidthScalar;