visual Кто-нибудь уже использовал библиотеку Triangle / Triangle ++ в проекте C ++? (триангуляция Делоне)

Я использую SFML и хочу сделать триангуляцию Делоне для случайного набора точек.

http://www.cs.cmu.edu/~quake/triangle.html

Я использую треугольник ++, оболочка C ++

http://www.compgeom.com/~piyush/scripts/triangle/

Я добавил те #defines

#define REDUCED
#define ANSI_DECLARATORS
#define TRILIBRARY
#define CDT_ONLY
#define NO_TIMER
#define CYGWIN

Это компилирует, запускает штрафы, но теперь, когда он рассчитал эти вещи, как мне получить ребра между вершинами?

0

Решение

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

Дайте мне знать, если это все еще не ясно.

for (int i = 0; i < numberoftriangles; ++i) {
int point1Index = trianglelist[i * 3 + 0];
int point2Index = trianglelist[i * 3 + 1];
int point3Index = trianglelist[i * 3 + 2];

REAL point1X = pointlist[2 * point1Index + 0];
REAL point1Y = pointlist[2 * point1Index + 1];
... etc
}

/*  `trianglelist':  An array of triangle corners.  The first triangle's     */
/*    first corner is at index [0], followed by its other two corners in     */
/*    counterclockwise order, followed by any other nodes if the triangle    */
/*    represents a nonlinear element.  Each triangle occupies                */
/*    `numberofcorners' ints.                                                */

/*  `pointlist':  An array of point coordinates.  The first point's x        */
/*    coordinate is at index [0] and its y coordinate at index [1], followed */
/*    by the coordinates of the remaining points.  Each point occupies two   */
/*    REALs.
0

Другие решения

Это было не совсем понятно, но fiterator означает итератор лица, а лицо — это треугольник.
Org, Dest и Apex являются индексами этих вершин.

for(Delaunay::fIterator fit  = delobject.fbegin();
fit != delobject.fend();
++fit)
{
cout << " Org " <<  delobject.Org(fit)  << ", "<< " Dest " << delobject.Dest(fit) << ", "<< " Apex " << delobject.Apex(fit) << //" \t: Area = "}

Не забывайте, что Triangle ++ на самом деле не требует, чтобы вы поместили реальный код Triangle.c, так что его было действительно легко использовать.

0

По вопросам рекламы [email protected]