2015-06-02 6 views
0

Мой Google-фу только оказался один результат, который возвращает точку пересечения между лучом и треугольником: http://geomalgorithms.com/a06-_intersect-2.htmlКомпиляция кода пересечения треугольника?

И я имею абсолютно никакой удачи компиляции. Я сделал это для точек/векторов:

typedef struct { 
    float x, y, z; 
} Vector; 
typedef struct { 
    float x, y, z; 
} Point; 
typedef struct { 
    Vector P0, P1; 
} Ray; 
typedef struct { 
    Point V0, V1, V2; 
} Triangle; 

А потом выбрасывает ошибки об этом коде:

u = T.V1 - T.V0; 
v = T.V2 - T.V0; 
n = u * v; 

«не подходит для оператора - (типы операндов и точку)»

Итак, я переписал весь код, чтобы быть похожим на это:

u.x=T.V1.x-T.V0.x; 
u.y=T.V1.y-T.V0.y; 
u.z=T.V1.z-T.V0.z; 
v.x=T.V2.x-T.V0.x; 
v.y=T.V2.y-T.V0.y; 
v.z=T.V2.z-T.V0.z; 
n.x=u.x*v.x; 
n.y=u.y*v.y; 
n.z=u.z*v.z; 

Но он по-прежнему говорит, что луч {3, 1, -3 } {3, -1, -3} не находится внутри треугольника {-10, 0, -10} {10, 0, 10} {10, 0, -10}. Однако я проверил это в Blender, и луч действительно пересекает треугольник.

Может ли кто-нибудь указать, что я делаю неправильно, или ссылку на другую страницу с функцией, которая вернет точную точку, где сегмент линии пересекает треугольник? Я бы предпочел сделать это в C, чем связать некоторую векторную библиотеку. Спасибо!

+0

возможно дубликат [Operator перегрузкой] (http://stackoverflow.com/questions/4421706/operator-overloading) – CoryKramer

+0

Вам нужно определить ваши арифметические операторы, например 'operator +', 'operator-' и т. Д. – CoryKramer

+0

что такое 'T' hehe? –

ответ

1

Здесь проблема:

n = u * v; 

Это должно быть истолковано как векторное произведение п = у х об, не покомпонентном умножении.

0

Я считаю, что автор страницы не собирался публиковать действительный готовый C++ там, о чем свидетельствуют цитаты, которые он использовал для написания имени языка. Чтобы превратить этот псевдокод в компилируемый код, вам нужно будет реализовать несколько операторов самостоятельно, например, перекрестное произведение двух трехмерных векторов (кстати, это тривиально).

Предположим, что классы уже даны для объектов: ...

Смежные вопросы