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");
}
}
#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");
}
}