2009-03-12 4 views
2

Учитывая путь, выраженный как массив 2d точек:Путь к списку Triangle (.NET/C#)

Point[] path = new Point[4] 
{ 
    new Point(0,0), 
    new Point(10,0), 
    new Point(10,10), 
    new Point(0,10), 
}; 

... Вот, коробка.

Каков наилучший способ преобразования этого списка в список треугольников (которые заполняют путь), которые будут использоваться в 3D-приложении? Учитывая, что это всего лишь простой пример, и путь может быть довольно сложным в реальности. Есть ли что-то уже в рамках, возможно, System.Drawing или в WPF, которые помогут с этим?

Edit: (После того, как комментарий Самуил) идеале I'l, чтобы иметь возможность работать с обеими выпуклыми и вогнутыми многоугольниками, иначе графический придется быть из множества выпуклых многоугольников вручную ..

+0

Является ли путь выпуклым многоугольником? Если это легко, иначе это будет довольно сложно. – Samuel

+0

В идеале я хотел бы иметь дело с вогнутыми и выпуклыми многоугольниками. – Rob

+0

Роб, см. Мой ответ ниже. Он будет обрабатывать обе, но будет немного больше усилий. Для обработки вырожденных многоугольников требуется дополнительная осторожность (выше и выше большинства простых алгоритмов). –

ответ

5

Это зависит от того, из чего состоит путь и как он создается.

Если это всегда выпуклый многоугольник, вы можете легко создать вентилятор треугольника, который заполнит регион.

Если это не выпуклый многоугольник, вам, скорее всего, понадобится использовать некоторую форму триангуляции, чтобы заполнить путь. Есть немало вариантов. Большая часть кода образца находится в C или C++, а не в C#, но это может помочь:

http://local.wasp.uwa.edu.au/~pbourke/papers/triangulate/morten.html

Основная идея заключается в том, чтобы заполнить внешние границы, и процедура триангуляции будет проходить обратно правильный треугольник индексы, необходимые для вашего 3D-приложения.

В этом разделе нет ничего, что сделает это за вас.