Code:
int ab = a[0]*a[1] + b[0]*b[1];
Das hier ist falsch. a*b ist hier definiert als a0*b0 + a1*b1 (usw. für höhere Dimensionen).
Müsste also
Code:
int ab = a[0]*b[0] + a[1]*b[1];
lauten.
Mein Code (C):
Code:
double computeAngle(int x1, int y1, int x2, int y2, int x3, int y3) {
int a[] = {x1 - x2, y1 - y2};
int b[] = {x1 - x3, y1 - y3};
int ab = a[0]*b[0] + a[1]*b[1];
double aa = sqrt((double)(a[0]*a[0] + a[1]*a[1]));
double bb = sqrt((double)(b[0]*b[0] + b[1]*b[1]));
double aabb = ab/(aa*bb);
return acos(aabb)*360.0/(2*3.14159265359);
}
int x0 = 5, y0 = 5,
x1 = 0, y1 = 0,
x2 = 10, y2 = 10;
double d = computeAngle(x0, y0, x2, y2, x1, y1)/*a*/ + computeAngle(x1, y1, x2, y2, x0, y0)/*b*/ + computeAngle(x2, y2, x0, y0, x1, y1)/*c*/;
return 0;
Und eine Abbildung dazu:
[Only registered and activated users can see links. Click Here To Register...]
Die Winkel a, b und c müssen aufaddiert 180° ergeben (das tun sie bei mir auch). Der Rest sollte durch Code und Abbildung verständlich genug sein, nehme ich an ;)
Du kannst das sicherlich auch mit einem Punkt im Dreieck machen, aber ich war zu faul dazu :D
Ich hoffe, dass ich helfen konnte
Jeoni
P.S.: Wenn es in Java eine Vector-Klasse (nicht den Container, sondern den mathematischen Vektor) gibt, dann könnte man diese gegebenenfalls auch nutzen statt alles manuell zu machen. Aber das hier ist ja noch relativ klein, da macht das nicht viel.