Die Flächen könnten über folgende Flächenformel berechnet werden.
Das Beispiel müsste noch allerdings noch entsprechend modifiziert werden.
DOUBLE CAreaDialog::GetArea()
{
DOUBLE Umference = 0; //Umfang
DOUBLE An = 0, Yn1, Yn2;
//Yn1 = Rechtswert des aktuellen Punktes
//Yn2 = Rechtswert des nachfolgenden Punktes
//Die Koordinaten sind in den Punktreferenzen gespeichert
//Point->X = Rechtswert
//Point->Y = Hochwert
if (PLPoints.Count()>2)
{
CNOFPoint *fPoint = PLPoints.Item(0),*sPoint,*nPoint = PLPoints.Item(1);
//fPoint = erster Punkt der Liste
//sPoint = aktueller Punkt
//nPoint = nächster Punkt
Yn1 = nPoint->X; //Rechtswert
nPoint = PLPoints.Item(PLPoints.Count()-1);
Yn2 = nPoint->X;
An = fPoint->Y * (Yn1 - Yn2);
for (int i=1;i<PLPoints.Count();i++)
{
sPoint = PLPoints.Item(i);
if (i == PLPoints.Count()-1)
nPoint = PLPoints.Item(0);
else
nPoint = PLPoints.Item(i+1);
Umference += Utility.GetDistance(fPoint->X,fPoint->Y,sPoint->X,sPoint->Y);
Yn1 = nPoint->X;
Yn2 = fPoint->X;
An += sPoint->Y * (Yn1 - Yn2);
fPoint = sPoint;
}
sPoint = PLPoints.Item(0);
Umference += Utility.GetDistance(fPoint->X,fPoint->Y,sPoint-
>X,sPoint->Y);
}
return An / 2; //Flächeninhalt der Punktliste zurückgeben
}
}
Ich hoffe, Du kannst mit dem Beispiel etwas anfangen (Haben einige Kommentare hinzugeschrieben).
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP