C ++ Треугольник-Плоскость пересечения с линией

0

Здесь упрощенная версия моего объекта треугольника и связанных объектов:

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. Весь образец кода, на который я смотрел, либо предполагает, что имеет нормальную силу, либо возвращает не возвращает то, что мне нужно. Я бы очень хотел понять, как это сделать оптимальным образом. У меня возникли проблемы с пониманием формальных математических решений для пересечения плоскостных плоскостей.

Заранее спасибо,

Максимум

  • 2
    Почему ваша ось просто двойная? Кроме того, вы можете опубликовать код, который вы пробовали. Мы постараемся исправить это, на всякий случай.
  • 0
    У меня нет ничего работающего, действительно стоит опубликовать. Ось z просто двойная, потому что z для плоскости - это точка, а x и y всегда равны 0.
Показать ещё 3 комментария
Теги:
geometry
intersection

1 ответ

1
Лучший ответ

вы должны обращаться с разными ситуациями:

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.

Так понятно? Вы можете начать внедрять...

  • 0
    В случае 3 будет полезна теорема о перехвате

Ещё вопросы

Сообщество Overcoder
Наверх
Меню