1) Сфера: Идея состоит в том, чтобы найти расстояние от центра сферы до линии. Если оно больше, чем радиус -> снаружи, наоборот - внутри (и если равна -> на поверхности)
Уравнение линии, которая проходит через 2 точки А, В представляет собой
x = A.x + (B.x - A.x)*t
y = A.y + (B.y - A.y)*t
z = A.z + (B.z - A.z)*t
расстояние от точки М до точки в линии АВ:
d(t) = Math.sqrt((x - M.x) * (x - M.x) + (y - M.y) * (y - M.y) + (z - M.z) * (z - M.z))
расстояние от точки М на линии АВ является самой короткой д (т)
Если мы устанавливаем
g(t) = (x - M.x) * (x - M.x) + (y - M.y) * (y - M.y) + (z - M.z) * (z - M.z)
Мы будем иметь
d(t) = Math.sqrt(g(t))
Чтобы найти min(d(t))
, мы попытаемся найти min(g(t))
вместо (так как функция производной будет проще).И найти min(g(t))
, решить уравнение derivative(g(t)) = 0
Вы найдете
t = ((B.x - A.x)*(M.x - A.x) + (B.y - A.y)*(M.y - A.y) +
(B.z - A.z)*(M.z - A.z))/((B.x - A.x)*(B.x - A.x) + (B.y - A.y)*(B.y - A.y) + (B.z - A.z)*(B.z - A.z))
Тогда вы можете найти d (или d * d)
2) Куб: Идея заключается в том, чтобы найти пересечение линии (AB) с каждой стороны куба и посмотреть, не имеет ли по крайней мере 1 стороны внутри квадрата
Вы ничего не говорите о том, имеет ли куб стороны параллельно w й координаты осей, но мы будем использовать этот случай (самый простой :))
уравнение прямой АВ такая же, как и в 1)
x = A.x + (B.x - A.x)*t
y = A.y + (B.y - A.y)*t
z = A.z + (B.z - A.z)*t
Уравнения всех 8 сторон являются: (в вашем примере, д = 5)
X = M.x - d
X = M.x + d
Y = M.y - d
Y = M.y + d
Z = M.z - d
Z = M.z + d
Вы должны найти пересечение между AB с каждой стороны куба Например, АВ с Х = Мх -d
решить систему е quations:
x = A.x + (B.x - A.x)*t
y = A.y + (B.y - A.y)*t
z = A.z + (B.z - A.z)*t
x = M.x - d
Вы найдете:
x = M.x -d
t = (M.x -d - A.x)/(B.x - A.x) .. then find y, z
точка (х, у, г) находится внутри боковой X = Mx -d куба, если
M.y - d <= y <= M.y + d (and similar for z)
И сделать то же самое для других сторон.
ПРИМЕЧАНИЕ: Если вы хотите проверить, является ли отрезок [AB] пересекается (достигает) сфера/куб, вам нужно проверить еще одно условия: Пересечение в сегменте [AB]
min(A.x, B.x) <= x <= max(A.x, B.x)
min(A.y, B.y) <= y <= max(A.y, B.y)
..
Надеюсь, он может вам помочь!
Если вы идете в coursera, есть бесплатные курсы по линейной алгебре. – CraigR8806
google для бесконечного расстояния до точки, если он меньше или равен, чем 'r' вы попадаете в сферу ... или решаете:' p = p0 + (p1-p0) * t AND (px-sx)^2 + (py-sy)^2 + (pz-sz)^2 <= r^2' где 'p0, p1' - ваши точки линии,' sx, sy, sz' - ваш центр сферы и 'r' его радиус. Параметр 't' является параметром. 'p = (p.x, p.y, p.z)' находится в строке с параметром 't' – Spektre
Каков параметр t, используемый для? –