Короче говоря, вы должны реализовать алгоритм пересечения для случая, когда (a1 * b2 - a2 * b1) = 0 (т. Е. Когда плоскости не являются независимыми, когда вы устанавливаете z = 0).
Чтобы расширить это, сначала нам нужно понять, как вы продвинулись так далеко.Сначала запишем уравнение двух плоскостей:
a1x + b1y + c1z + d1 = 0
и
a2x + b2y + c2z + d2 = 0
Когда две плоскости пересекаются, пересечение является прямой.Итак, самый обычный способ решить эту проблему - сначала найти точку на такой линии, а затем выяснить ее ориентацию (a, b, c) в вашем случае.Ориентация является прямым перекрестным произведением.Точка пересечения обычно рассчитывается путем установки одной из координат равной 0 и последующего решения двух полученных линейных уравнений.В вашем коде это делается путем установки:
z = 0
Но это работает только тогда, когда уравнения
a1x + b1y + d1 = 0 and a2x + b2y + d2 = 0
способны дать решение для x и y, что не являетсяслучай, когда a1b2-a2b1 = 0.Таким образом, в таких случаях вы можете решить то же самое, установив x или y в 0, что снова дает два линейных уравнения, которые вы можете решить, чтобы получить точку на линии.Затем вы можете вычислить параметрическую форму так же, как вы это сделали.Например (установка y в 0):
x0 = (c1d2 - c2d1)/(a1c2 - a2c1)
y0 = 0
z0 = (a2d1 - a1d2)/(a1c2 - a2c1)
Но для того, чтобы это было определенное значение, вы должны иметь (a1c2 - a2c1), чтобы оно было ненулевым.Это помогает?