Ich habe eine Kugeklasse, und diese Kugel
hat 3 Koordinaten, einen Strahl mit Ursprung und Richtung.
Ich will jetzt berechnen, ob die kugel von dem Strahl getroffen wird oder nicht.
Es klappt aber nicht.
Bei der Beispielrechnung:
Strahl(0,0,0->0,0,-5)
Kugel: (x,y,z,radius)
Kugel(0,0,-5,2)
liefert t nicht den Abstand zur Kugel beim ersten Trefferpunkt 3(5-2 für Radius),
sondern 0.423..., wie die Ausgabe zeigt:
Ich seh den Fehler nicht...
hat 3 Koordinaten, einen Strahl mit Ursprung und Richtung.
Ich will jetzt berechnen, ob die kugel von dem Strahl getroffen wird oder nicht.
Java:
public Hit intersect(Ray ray) {
System.out.println(" SPHERE_______________________________");
// Verschiebung des Mittelpunktes
Vector x0 = ray.getOrigin().sub(offset);
System.out.println(x0 + " Mittelpunkt verschoben");
// b: x0*d
float b = (float) x0.dot(ray.getDirection());
System.out.println(b + " B");
System.out.println(ray.getDirection() + " RayDirection()");
// c: x02 * r2
System.out.println(r + " Radius");
float c = (float) (x0.dot(x0)) - (r * r);
System.out.println(c + " C");
// Kein Treffer
float treffertest = (b * b) - c;
System.out.println(treffertest + " Treffertest (b*b-c)");
if (treffertest < 0) {
return new Hit(0, false, null);
} else {
// Ein Treffer
// return new Hit(t, false, this);
float t = (float) (-b - (Math.sqrt(treffertest)));
System.out.println(t + " T");
return new Hit(t, true, this);
}
Es klappt aber nicht.
Bei der Beispielrechnung:
Strahl(0,0,0->0,0,-5)
Kugel: (x,y,z,radius)
Kugel(0,0,-5,2)
liefert t nicht den Abstand zur Kugel beim ersten Trefferpunkt 3(5-2 für Radius),
sondern 0.423..., wie die Ausgabe zeigt:
Code:
SPHERE_______________________________
(0.0, 0.0, 5.0) Mittelpunkt verschoben
-25.0 B
(0.0, 0.0, -5.0) RayDirection()
2.0 Radius
21.0 C
604.0 Treffertest (b*b-c)
0.42358854 T
5.0 Länge des Richtungsvektors
Ich seh den Fehler nicht...
Zuletzt bearbeitet: