Ich arbeite derzeit an einer lösung, bei der ich das gesamte viereck in den positiven quadranten des koordinatensystems verschiebe und dann anhand des winkels zwischen der y-achse und der ursprungsgeraden durch meine jeweiligen punkte sortiere.
den kleinsten winkel bekomme ich so immer problemlos raus, aber den größten nicht... ich finde meinen fehler einfach nicht.
#include <QtCore/QCoreApplication>
#include <iostream>
#include <math.h>
#include <stdlib.h>
#define pi 3.1415927
using namespace std;
void push(int& x1, int& y1, int& x2, int& y2, int& x3, int& y3, int& x4, int& y4)
{
int minx=x1;
if(minx>x2)
{minx=x2;}
if(minx>x3)
{minx=x3;}
if(minx>x4)
{minx=x4;}
int push_x;
if(minx<=0)
{
push_x = abs(minx) + 1;
}
else
push_x=0;
x1=x1+push_x;
x2=x2+push_x;
x3=x3+push_x;
x4=x4+push_x;
int miny=y1;
if(miny>y2)
{miny=y2;}
if(miny>y3)
{miny=y3;}
if(miny>y4)
{miny=y4;}
int push_y;
if (miny<=0)
{
push_y = abs(miny) + 1;
}
else
push_y=0;
y1=y1+push_y;
y2=y2+push_y;
y3=y3+push_y;
y4=y4+push_y;
}
void scan_p1 (int& x1, int& y1, int& x2, int& y2, int& x3, int& y3, int& x4, int& y4)
{
double alpha,beta,gamma,delta;
push(x1,y1,x2,y2,x3,y3,x4,y4);
double faktor = 180/pi;
alpha = atan2(x1,y1) * faktor;
beta = atan2(x2,y2) * faktor;
gamma = atan2(x4,y4) * faktor;
delta = atan2(x3,y3) * faktor;
double min=alpha;
if(min>beta)
{min=beta; x1=x2; y1=y2;}
if(min>gamma)
{min=gamma; x1=x4, y1=y4;}
if(min>delta)
{min=delta; x1=x3; y1=y3;}
}
void scan_p3 (int& x1, int& y1, int& x2, int& y2, int& x3, int& y3, int& x4, int& y4)
{
double alpha,beta,gamma,delta;
double faktor = 180/pi;
alpha = atan2(y1,x1) * faktor;
beta = atan2(y2,x2) * faktor;
gamma = atan2(y4,x4) * faktor;
delta = atan2(y3,x3) * faktor;
double min=alpha;
if(min>beta)
{min=beta; x1=x2; y1=y2;}
if(min>gamma)
{min=gamma; x1=x4, y1=y4;}
if(min>delta)
{min=delta; x1=x3; y1=y3;}
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
int b,c,d,e,f,g,h,i;
cout<<"4 Punkte eingeben:\n"; cout<<"\n";
cout<<"koordinate x1 eingeben:\n"; cin>>b;
cout<<"koordinate y1 eingeben:\n"; cin>>c;
cout<<"koordinate x2 eingeben:\n"; cin>>d;
cout<<"koordinate y2 eingeben:\n"; cin>>e;
cout<<"koordinate x3 eingeben:\n"; cin>>f;
cout<<"koordinate y3 eingeben:\n"; cin>>g;
cout<<"koordinate x4 eingeben:\n"; cin>>h;
cout<<"koordinate y4 eingeben:\n"; cin>>i;
scan_p1(b,c,d,e,f,g,h,i);
cout<<"P1=("<<b<<","<<c<<")\n";
//cout<<"P2=("<<d<<","<<e<<")\n";
scan_p3(b,c,d,e,f,g,h,i);
cout<<"P3=("<<f<<","<<g<<")\n";
//cout<<"P4=("<<h<<","<<i<<")\n";
return a.exec();
}[/PHP]