Откройте папку /triangles_3d/build и выполните команды "cmake ..", "make"
- Считываем треугольники
- Если это 2 точки - проверяем совпадают ли их координаты. Если совпадают - есть пересечение. Если нет - нет пересеченияю. Если это не 2 точки - далее.
- Если только 1 треугольник - точка - проверяем лежат ли они в одной плоскости. Если лежат - проверяем пересечение (как пересечение треугольников в одной плоскости, описанное ниже). Если они не лежат в одной плоскости или это не точки - идем далее.
- Далее проверяем что плоскости не параллельны. Если они паралельны проверяем на совпадения плоскостей и пересекаем треугольников в одной плоскости. Если совпадают - есть пересечение. Если нет - нет пересечения. Если плоскости не параллельны - идем далее.
- Проверям что все точки одного треугольника не находятся по одну сторону от второго. Если да - нет пересечение. Если нет - идем далее.
- Пересекаем плоскости, получаем прямую пересечения плоскостей.
- Пересекаем эту прямую с обоими треугольниками, получаем 4 точки пересечения.
- Проверям что порядок этих точек чередуется (то есть чередуются точки пересечения сторон треугольника А с прямой пересечения плоскостей чередуется и точками пересечения сторон треугольника А и прямой пересечения плоскостей). Другие допустимые варианты: когда точки одного треугольника содержатся в точках другого или хотя бы 1 из них совпадает. В противном случае пересечения нет.
Для проверки пересечения треугольников в одной плоскости проверяем что хотя бы 1 точка находится внутри другого треугольника, то есть делит треугольник на 3 части, сумма площадей которого = сумме площадей исходного.
Так же для повышения производительности пространство разбивается на другие подпространства и пересечения треугольников ищется внутри этих подпространств. Этот метод называется октодеревом