Triangulacja zbioru losowych punktow

0

Witam, mam program ktory losuje 100 punktow i znajduje dla nich otoczke wypukłą a nastepnie ma dokonac triangulacji na tych punktach. Znajdowanie otoczki dziala ok, problem jest z triangulacja.
Korzystam z najprostszego algorytmu:

 #include	<stdio.h>
#define	NMAX	100
main()
{
    int x[NMAX],y[NMAX],z[NMAX];/* input points xy,z=x^2+y^2 */
    int	n;			/* number of input points */
    int	i, j, k, m;		/* indices of four points */
    int	xn, yn, zn;		/* outward vector normal to (i,j,k) */
    int	flag;			/* t if m above of (i,j,k) */
    /* Input points and compute z = x^2 + y^2. */
    scanf("%d", &n);
    for ( i = 0; i < n; i++ ) {
	  scanf("%d %d", &x[i], &y[i]);
	  z[i] = x[i] * x[i] + y[i] * y[i];
	}
    /* For each triple (i,j,k) */
    for ( i = 0; i < n - 2; i++ )
    for ( j = i + 1; j < n; j++ )
    for ( k = i + 1; k < n; k++ ) 
    if ( j != k ) {
    /* Compute normal to triangle (i,j,k). */
    xn = (y[j]-y[i])*(z[k]-z[i]) - (y[k]-y[i])*(z[j]-z[i]);
    yn = (x[k]-x[i])*(z[j]-z[i]) - (x[j]-x[i])*(z[k]-z[i]);
    zn = (x[j]-x[i])*(y[k]-y[i]) - (x[k]-x[i])*(y[j]-y[i]);
    /* Only examine faces on bottom of paraboloid: zn < 0. */
    if ( flag = (zn < 0) )
    /* For each other point m */
    for (m = 0; m < n; m++)
    /* Check if m above (i,j,k). */
    flag = flag && ((x[m]-x[i])*xn +(y[m]-y[i])*yn +(z[m]-z[i])*zn <= 0);
    if (flag) printf("%d\t%d\t%d\n", i, j, k);
    }
} 

A na ekranie dostaje takie cos:user image
Jezeli ustawie 1000 losowych punktow to jest troche lepiej: user image
Widac ze algorytm nie znajduje wszystkich trojkatow, ma ktos jakis pomysl?
Pozdrawiam.

0

Ale jaki to jest algorytm? Bo algorytmów triangulacji jest jak psów.

1 użytkowników online, w tym zalogowanych: 0, gości: 1