[#4]
Re: [algorytm] czy punkt jest wewnatrz wielokata
@Lorak,
post #3
kiedys to napisalem i dzialalo:
struct wspolrzedne
{
int x;
int y;
};
class area
{
string name; // nazwa obszaru
vector granica; // vector opisujacy granice
..
}
int sprawdz(int x, int y)
{
vector::iterator iter1;
vector::iterator iter2;
vector lista_x;
int x1,x2,y1,y2,x3,y3;
double a,b;
// cout <<"nX: " << x << " Y: " << y <<"n" << name << endl;
iter1 = granica.begin();
iter2 = granica.end();
iter1++;
// bedzimy badac w pętli od punktu 2 i 2-1
while(iter1 != iter2)
{
y1=(*(iter1-1)).y;
y2=(*(iter1)).y;
// cout <<"Y1: " << y1 << " Y2: " << y2 <<"n" << endl;
// sprawdzamy czy odcinek przecina wspolrzedna Y punktu
if (y1>y2)
{
if( (y2<=y) && (y1>y) )
{
x1=(*(iter1-1)).x;
x2=(*(iter1)).x;
if(x1==x2)
{
x3=x1;
}
else
{
// obliczamy wspolczynniki prostej przechodzacej przez 2 pkty
a=(y1-y2);
a/=(x1-x2);
b=y1-a*x1;
// printf("a: %f, b: %fn", a,b);
// obliczamy X punkt przeciecia
x3=(int)((y-b)/a);
}
// cout <<"X_3: " << x3 << " " << endl;
lista_x.push_back(x3);
}
}
else
if( (y2>=y) && (y1
{
x1=(*(iter1-1)).x;
x2=(*(iter1)).x;
if(x1==x2)
{
x3=x1;
}
else
{ // obliczamy wspolczynniki prostej przechodzacej przez 2 pkty
a=(y1-y2);
a/=(x1-x2);
b=y1-a*x1;
// printf("a: %f, b: %fn", a,b);
// obliczamy X punkt przeciecia
x3=(int)((y-b)/a);
}
// cout <<"X3: " << x3 << " "<< endl;
lista_x.push_back(x3);
}
iter1++;
}
sort(lista_x.begin(), lista_x.end());
for( int i = 0; i < lista_x.size(); i++ )
{
if(lista_x[ i ]>x)
if(i%2)
{
cout << "--------->" << name << endl;
return 1;
}
else
return 0;
}
return 0;
}
Ostatnia modyfikacja: 01.11.07 11:46
Ostatnia modyfikacja: 01.11.07 11:48