Witam sprawdzilem algorytm dla 2 odcinkow, i dziala on prawidlowo :|AB| |CD| kazdy Punkt ma 2 wspolrzedne x,y
istnieje warunek ze:
[det(A,B,C)]*det(A,B,D)] >=0 brak przeciecia jesli <0 jest przeciecie.
moj problem:
ifstream plik_manipulator;
plik_manipulator.open("manipulator.dat");
plik_manipulator>>punkt0[0]>>punkt0[1];
plik_manipulator>>punkt1[0]>>punkt1[1];
plik_manipulator>>punkt2[0]>>punkt2[1];
plik_manipulator>>punkt3[0]>>punkt3[1];
plik_manipulator.close();
int ile_wielokatow,ile_bokow,ile_punktow;
cout<<"ile przeszkod?"<<endl;
cin>>ile_przeszkod;
cout<<"ile bokow kazda z przeszkod"<<endl;
cin>>ile_bokow;
if (ile_bokow<3)
cout<<"przeszkoda powinna miec minimum 3 boki"<<endl;else{
ile_punktow=ile_przeszkod*ile_bokow+ile_przeszkod;
cout<<"podaj wspolrzedne przeszkody jako 'x y' powtarzajac na koniec kadej przeszkody jej pierwszze wpsolrzedne"<<endl;
schowek.clear();
for(int i=0; i<ile_punktow; i++)
{
cin>>przeszkoda[0];
cin>>przeszkoda[1];
schowek.push_back(przeszkoda);}
int przeciecie=0;
Wektor Tab_pom[]={punkt0,punkt1,punkt2,punkt3};
for(int z=0;z<4;z++){
for(int v=0; v<schowek.size(); v++){
if ((det(Tab_pom[z],Tab_pom[z+1],schowek[v]))*(det(Tab_pom[z],Tab_pom[z+1],schowek[v+1]))>=0) {}//nieprzecinaja sie
if ((det(Tab_pom[z],Tab_pom[z+1],schowek[v]))*(det(Tab_pom[z],Tab_pom[z+1],schowek[v+1]))<0) {przeciecie++;} //przecianja sie
}}
if (przeciecie>0) return true;
else return false;