Я создал этот кусок кода, чтобы получить пересечение двух трехмерных линейных сегментов.Код 3d-пересечения не работает должным образом
К сожалению, результат этого кода является неточным, точка пересечения не всегда находится на обеих линиях.
Я смущен и не уверен, что я делаю неправильно.
Вот мой код:
--dir = direction
--p1,p2 = represents the line
function GetIntersection(dirStart, dirEnd, p1, p2)
local s1_x, s1_y, s2_x, s2_y = dirEnd.x - dirStart.x, dirEnd.z - dirStart.z, p2.x - p1.x, p2.z - p1.z
local div = (-s2_x * s1_y) + (s1_x * s2_y)
if div == 0 then return nil end
local s = (-s1_y * (dirStart.x - p1.x) + s1_x * (dirStart.z - p1.z))/div
local t = (s2_x * (dirStart.z - p1.z) - s2_y * (dirStart.x - p1.x))/div
if (s >= 0 and s <= 1 and t >= 0 and t <= 1) and (Vector(dirStart.x + (t * s1_x), 0, dirStart.z + (t * s1_y)) or nil) then
local v = Vector(dirStart.x + (t * s1_x),0,dirStart.z + (t * s1_y))
return v
end
end
Что должен делать этот код? Это странная смесь 2D и 3D корпусов! – MBo
Можете ли вы предоставить конкретные тесты, которые не совпадают с ожидаемыми результатами? –