Hier mal Pseudocode (JAVA ähnlich) dafür:
PHP-Code:
// p0 berechnen
Point3 p0 = new Point3(0,0,0);
for (int i = 0; i < point.length; i++) {
p0.x+=point[i].x;
p0.y+=point[i].y;
p0.z+=point[i].z;
}
p0.x/=point.length;
p0.y/=point.length;
p0.z/=point.length;
// Alle Vektoren auf p0 basieren
for (int i = 0; i < point.length; i++) {
point[i].x-=p0.x;
point[i].y-=p0.y;
point[i].z-=p0.z;
}
// Gemitteltes Kreuzprodukt berechnen
Point3 pV = new Point3(0,0,0);
for (int i = 0; i < point.length; i++) {
pV.x+=point[i].y*point[(i+1)%point.length].z - point[i].z*point[(i+1)%point.length].y;
pV.y+=point[i].z*point[(i+1)%point.length].x - point[i].x*point[(i+1)%point.length].z;
pV.z+=point[i].x*point[(i+1)%point.length].y - point[i].y*point[(i+1)%point.length].x;
}
pV.x/=point.length;
pV.y/=point.length;
pV.z/=point.length;
// Alle Vektoren zurück heben
for (int i = 0; i < point.length; i++) {
point[i].x+=p0.x;
point[i].y+=p0.y;
point[i].z+=p0.z;
}
// auch das Kreuzprodukt
pV.x+=p0.x;
pV.y+=p0.y;
pV.z+=p0.z;
//Ausgabe
println("Hesse Punkt p0="+p0);
println("(Hesse Punkt) pV="+pV);
println("Hesse Vektor V=("+p0+", "+pV+")");
Dies liefert für die Punkte:
Code:
( 10, 0, 0),
( 0, 10, 1),
(-10, 0, 0),
( 0, -10, 1),
das erwartete Ergebnis:
Code:
Hesse Punkt p0=(0.0, 0.0, 0.5)
(Hesse Punkt) pV=(0.0, 0.0, 100.5)
Hesse Vektor V=((0.0, 0.0, 0.5), (0.0, 0.0, 100.5))
Lesezeichen