Фотон путешествует с вектором v = p2 - p1, начиная с p1, создавая эту линию:
p1 + v * a
Чтобы узнать, сталкивается ли фотон с многоугольником, вы должны найти значение для:
p1 + v * a = polygon
Например:
p1 is (15, 4, 5)
p2 is (10, 1, 3)
and polygon is a 10x10 square: (-5...5, -5...5, 0)
v = p2 - p1 = (-5, -3, -2)
p1 + v * a = pol составляет:
p1.x + v.x * a = pol.x
p1.y + v.y * a = pol.y
p1.z + v.z * a = pol.z
a = (pol.z - p1.z) / v.z = (0 - 15) / -2 = 7.5
pol.x = p1.x + v.x * a = 15 + -5 * 7.5 = -22.5
pol.y = p1.y + v.y * a = 10 + -3 * 7.5 = -12.5
-22,5 не между -5 и 5 и -12,5 не между -5 и 5, поэтому фотон не сталкивается с многоугольником.
Прошло много времени с тех пор, как я это сделал, поэтому, возможно, я допустил некоторые ошибки. Я использовал тот факт, что pol.z = 0, чтобы вычислить. Возможно, вам придется вращать многоугольник, чтобы он совпал с одной осью, если только вы вращаете p1 вокруг центра многоугольника.