我在两点 a 和 b(3d 向量)和第三个点 p(来自标量投影)之间有一条线。
我想确定第三点 p 是否在 a 和 b 之间的线上或不在它们之间。
LuaJIT 最有效的算法是什么?其他语言也可以,但效率很重要
感谢 numberZero 我得到了这个代码,它似乎工作
function vec3d:is_between(a, b)
local ab = b - a
local ap = self - a
local lp = ap:len()
local lb = ab:len()
local dot = ap:dot(ab) / (lp * lb)
return lp < lb and dot > 0.95
end
如果您知道这些点位于一条直线上,则可以只计算点积,如果0 ≤ 〈AB, AP〉 ≤ 〈AB, AB〉,则P介于A和B之间。但请注意,如果P不完全在线,则此方法可能会产生奇怪的结果。但它应该是最快的。
您可能还想计算 2 个值,从P到AB 的距离和AP到AB 的(正交)投影。后者为AP_AB = 〈AP, AB〉 / 〈AB, AB〉(以AB 为单位,因此如果AP和AB共线,则AP = AB * AP_AB),前者为ρ(P, AB) = ρ( AP, AB * AP_AB) = |AP - AB * AP_AB| . 因此,如果ρ(P, AB)很小,则您决定如果0 ≤ AP_AB ≤ 1,则P介于A和B之间
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句