Vector 点与线之间的最小垂直向量

Vector 点与线之间的最小垂直向量,vector,Vector,好的,我正在尝试使用分离轴定理算法(用于碰撞检测),我需要找到点和线之间的最小垂直向量。我不是要求最小垂直距离(我知道如何求),而是求向量,它的大小与距离相同,从任意点到直线上的一点。我知道点的位置,直线上的一个点,以及给出直线方向的单位向量 我试图做的是首先找到点和线之间的最小距离 下一部分令人困惑,但我: 1) 找到了点和直线上点之间的向量,我知道 2) 求出直线上的点和直线上的点之间的向量加上给出直线方向的单位向量 3) 取这两个向量的叉积(我称之为叉积A) 4) 取给出直线方向的单位向量

好的,我正在尝试使用分离轴定理算法(用于碰撞检测),我需要找到点和线之间的最小垂直向量。我不是要求最小垂直距离(我知道如何求),而是求向量,它的大小与距离相同,从任意点到直线上的一点。我知道点的位置,直线上的一个点,以及给出直线方向的单位向量

我试图做的是首先找到点和线之间的最小距离

下一部分令人困惑,但我: 1) 找到了点和直线上点之间的向量,我知道 2) 求出直线上的点和直线上的点之间的向量加上给出直线方向的单位向量 3) 取这两个向量的叉积(我称之为叉积A) 4) 取给出直线方向的单位向量的叉积和叉积A的向量(我称之为叉积B) 5) 归一化叉积B 6) 按最小距离缩放叉积B


无论如何,整个尝试都失败了。有人能告诉我怎么找到这个向量吗

如果我正确理解了你的问题,我相信这就是你想要的:

P - point
D - direction of line (unit length)
A - point in line

X - base of the perpendicular line

    P
   /|
  / |
 /  v
A---X----->D

(P-A).D == |X-A|

X == A + ((P-A).D)D
Desired perpendicular: X-P
其中,周期表示点积,| X-A |表示幅值。

从上图可以看出,您有:

q = p + s --> s = q - p = q - (p2-p1) = q + p1 - p2

==> s^ = |q - p2 - p1| / |s|   (unitary vector)

Also:   |s| = |q| sin c = |q|sin(b-a)

b = arcsin (qy / |q|); a = arcsin( p1y / |p1| )

where: |q| = (qx^2 + qy^2)^1/2

你是在写一个程序来做这件事,还是只是想做你的物理/计算作业?这是为了一个游戏,我是为了好玩才写的,就像我说的,这是为了碰撞检测。虽然这是一个物理问题,因为它是以一般形式提出的,但它也适用于其他领域。它帮助我找到了光线追踪中圆柱体碰撞的法线。对。这就是我所说的“句号”:)抱歉错过了。无论如何,它似乎想工作,但出于某种原因,我的SAT算法有点不合适。事情在不应该发生的时候发生了冲突。我在想你给我的可能是有效的,因为碰撞现在看起来“更正确”,我有各种各样的标记,现在看起来更接近目标。非常感谢,但不幸的是,我似乎在代码中犯了一些其他类型的错误。天哪,是的,终于成功了,我无意中应用了两次旋转变换。