Здесь упрощенная версия моего объекта треугольника и связанных объектов:
class line{
public:
double x1;
double y1;
double x2;
double y2;
}
class vertex{
public:
double x;
double y;
double z;
};
class triangle{
vertex a;
vertex b;
vertex c;
public:
line *intersection(double z_axis){
line *l = new line;
//intersection code here
return l;
}
};
Мне нужно, чтобы функция пересечения возвращала линию, где треугольник и плоскость параллельны оси x и y на данной оси z. Весь образец кода, на который я смотрел, либо предполагает, что имеет нормальную силу, либо возвращает не возвращает то, что мне нужно. Я бы очень хотел понять, как это сделать оптимальным образом. У меня возникли проблемы с пониманием формальных математических решений для пересечения плоскостных плоскостей.
Заранее спасибо,
Максимум
вы должны обращаться с разными ситуациями:
1) нет пересечения. (для каждой вершины: z_axis> vertex.z) или (для каждой вершины: z_axis <vertex.z)
2) треугольник лежит в плоскости z = z_axis (для каждой вершины: z_axis = vertex.x). Это неудобно для удвоений, но 0 или несколько степеней двух или несколько хороших двоичных дробей представлены точно.
3) одна вершина (пусть назовем ее P) ниже и две вершины (Q, R) находятся выше плоскости z = z_axis (или наоборот)
здесь вы сможете найти перекрестки. Ваша проблема будет разбита, чтобы найти пересечение линии PQ и PR с плоскостью z = z_axis.
4) одна или две вершины лежат на плоскости z = z_axis.
Пересечения здесь тривиальны, но их все равно можно вычислить так же, как в пункте 3.
Так понятно? Вы можете начать внедрять...