[ stefic_kg @ 10.09.2008. 17:02 ] @
Trebaa da ucitam koliko tacaka ima poligon, pa da ucitam kordinate za svaku tacku.
Sada treba da se ispita da li se neka proizvoljno uneta tacka (mi unosimo kordinate tacke) nalazi unutar poligona ili ne!

Evo primera koji je uradjen preko uglova uglova, tj ako je tacka unutar poligona ugao je 360 (tako sto se ispitivana tacka spaja sa svim kordinatama poligona) , a ako je van poligona, onda je naravno ukupan ugao manji od 360.

Ali ovaj primer ne radi dobro, pa ako neko vidi gresku, bio bih zahvalan da pokaze gde i zasto!
Unapred hvala.


Code:


#include <stdio.h>

void main()
{
    int xc,yc,x,y;
    int i=0;
    double cosA[10];
    double ugao=0;
    int broj_cvorova;
    int kordinata[2][10];
    printf("upisi koliko cvorova ima poligon: ");
    scanf("%d",&broj_cvorova);
    while(i<broj_cvorova)
    {
        printf("upisi x kordinatu %d. cvora: ",i+1);
        scanf("%d",&xc);
        printf("upisi y kordinatu %d. cvora: ",i+1);
        scanf("%d",&yc);
        i++;
    }
    for(i=0;i<broj_cvorova;i++)
    {
        kordinata[0][i]=xc;        kordinata[1][i]=yc;
        i++;
    }
    printf("Unesi kordinate cvora koji ispitujete x pa y: ");
    scanf("%d",&x);
    scanf("%d",&y);
    for(i=0;i<broj_cvorova;i++)
    {
        cosA[i]=((kordinata[0][i]*kordinata[0][i+1]+kordinata[1][i]*kordinata[1][i+1])/(((kordinata[0][i]*kordinata[0][i])+sqrt(kordinata[1][i]*kordinata[1][i]))*sqrt((kordinata[0][i+1])+(kordinata[1][i+1]))));
        if(i+1==broj_cvorova)
        {
                    cosA[i]=((kordinata[0][i]*kordinata[0][0]+kordinata[1][i]*kordinata[1][0])/(((kordinata[0][i]*kordinata[0][i])+sqrt(kordinata[1][i]*kordinata[1][i]))*sqrt((kordinata[0][0])+(kordinata[1][0]))));

        }
        for(i=0;i<broj_cvorova;i++)
        {
            ugao+=cosA[i];
        }
        if(ugao==360)
            printf("\nTacka se nalazi u poligonu.\n");
        if(ugao<360)
            printf("\nTacka nije u poligonu.\n");
    }
}
[ X Files @ 10.09.2008. 18:40 ] @
(10.09.2008. - 20:40) Tema je premeštena iz foruma C programiranje u forum C za početnike.
[ X Files @ 10.09.2008. 18:45 ] @
Pogledaj prvo ovde:
http://en.wikipedia.org/wiki/Point_in_polygon

Zatim pogledaj linkove na dnu te strane (External links), sigurno ces naci nekoliko rutina koje rade.
[ StefanJer91 @ 10.09.2008. 18:55 ] @
Nisam gledao kod ali pretopostavljam da su problemi kod izdubljenih poligona. Pogledaj ovaj article http://www.gamasutra.com/view/...rashing_into_the_new_year_.php