Kugelschnittberechnung liefert falsche Werte

mamelinchen

Bekanntes Mitglied
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.

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:

Andi_CH

Top Contributor
Ich habe eine Kugeklasse, und diese Kugel
hat 3 Koordinaten, einen Strahl mit Ursprung und Richtung.


Ich seh den Fehler nicht...

Die Kugel muss sicher noch einen Radius haben, sonst ist es keine Kugel.

Wo ist die Formel für die Durchdringung (Anzahl Punkte in denen der Strahl die Kugelhülle durchdringt muss > 0 sein) oder die Abstandsberechnung (Abstand Strahl - Mittelpunkt <= Radius) ?

Vor lauter sysouts ist es etwas schwieirig den Überblick zu behalten ...
--
Zitat: "Mathematiker sterben nicht, sie verlieren nur einige ihrer Funktionen"

Hier sind fehlt auch schon einiges, wer ist am Sterben :)
 
Zuletzt bearbeitet:

FArt

Top Contributor
Wenn deine Formeln richtig sind, solltest du mal dein Augenmerk auf numerische Probleme (Genauigkeit und Rundung) legen. Verwende z.B. double und achte darauf, dass du keine Vermengung mit ints produzierst.
Die Rechnung mit Fließkomma ist immer ein wenig problematisch, sollte aber in einem defnierten Wertebereich für dein Vorhaben ausreichend sein.
 

mamelinchen

Bekanntes Mitglied
Wenn deine Formeln richtig sind, solltest du mal dein Augenmerk auf numerische Probleme (Genauigkeit und Rundung) legen. Verwende z.B. double und achte darauf, dass du keine Vermengung mit ints produzierst.
Der Kreis hat die Instanzvariablen Vector(float x,float y,float z) als Mittepunkt(offset), den radius float r und ne Farbe.

Ich verwende überall nur float zur Berechnung, das habe ich schön überprüft.
Ich habe ja alles per Hand mit Taschenrechner ausgerechnet,
der liefert das gleiche Ergebnis:S

Der Radius ist r im Code,

oder die Abstandsberechnung (Abstand Strahl - Mittelpunkt <= Radius) ?

Der Abstand soll t sein, also durch die p-q-Formel berechnet werden,

das wäre t= -b +- Wurzel aus(b*b-c)

Je nachdem b*b-c ergibt(kleiner als null= kein Schnittpunkt, grösser gleich)

Das wird aber mit der Formel nie erreicht,
und die Formel hab ich von meinem Professor.
 

Andi_CH

Top Contributor
Hm, so banal ist die Berechunung ja gar nicht (Mathe ist 25 Jahre her)

Hier ist eine Abhandlung

und hier auch

Entweder der Professor will dass du herausfindest, dass seine Formel nicht stimmt oder er vergleicht dein Resultat mit seiner Formel .... ich hab keine Ahnung was du machen sollst :-(
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
8u3631984 Argument Captor liefert NULL zurück Allgemeine Java-Themen 2
DiekleineRatte77 Schlüsselworte ANSI Konverter liefert UTF-8 Allgemeine Java-Themen 7
Arif Math.cos liefert komische Werte Allgemeine Java-Themen 8
I HTML einer Website auslesen liefert nur head Allgemeine Java-Themen 6
A Datentypen Long.valueOf liefert kein "L" am Ende Allgemeine Java-Themen 3
T Variablenübergabe liefert immer null Allgemeine Java-Themen 13
C Object.equals() liefert falschen Wert? Allgemeine Java-Themen 14
Q GregorianCalendar Methode add liefert komische Werte Allgemeine Java-Themen 3
T Datentypen ArrayUtils.indexOf( ... ) liefert -1 obwohl Wert scheinbar enthalten ist Allgemeine Java-Themen 15
T SimpleDateFormat.parse() liefert falschen Tag Allgemeine Java-Themen 2
T java.uil.Random liefert negative Werte Allgemeine Java-Themen 2
I newInstance() liefert null zurück Allgemeine Java-Themen 4
Z new Date() liefert falsche Uhrzeit Allgemeine Java-Themen 12
S Newton-Verfahren liefert nur 1 Wert Allgemeine Java-Themen 3
J Liefert new URL(String) gecachte Webseiten? Allgemeine Java-Themen 15
S HashMap containsKey liefert immer false zurück Allgemeine Java-Themen 15
A md5 liefert unterschiedliche Testsummen? Allgemeine Java-Themen 4
S FOP liefert fehlerhafte PDF Allgemeine Java-Themen 13
S instanceof liefert true, aber cast funktioniert nicht! Allgemeine Java-Themen 6
MasterEvil File.createTempFile liefert nur kurzen Pfad mit Tilde Allgemeine Java-Themen 3
M BufferedReader.read(char[] cbuf) liefert falsche Werte? Allgemeine Java-Themen 4
N contains(.) liefert nicht erwartetes Ergebnis Allgemeine Java-Themen 3
H JNI: loadLibrary liefert UnsatisfiedLinkError Allgemeine Java-Themen 2
J Base64 Kodierung liefert korrupte Dateien Allgemeine Java-Themen 3
S ´Locale.getDefault() liefert en Allgemeine Java-Themen 10
C ImageIO die read-Methode liefert mir ein null- Wert zurück Allgemeine Java-Themen 10
S aFile.delete() liefert false - Gründe ? Allgemeine Java-Themen 2
M Kein Scanner Fehler durch falsche EIngabe Allgemeine Java-Themen 4
J Unvorhersehbares Verhalten - benutze ich die falsche Bedingungsprüfung oder brauche ich Threads? Allgemeine Java-Themen 12
D falsche Zeile aus JTable in MySQL gelöscht Allgemeine Java-Themen 6
K Input/Output JUnit: Log Inhalte, falsche Assertion Allgemeine Java-Themen 2
S Ins Falsche Forum gepostet... Allgemeine Java-Themen 0
P BatchUpdateException für falsche Datumsformate anstatt SQLServerException Allgemeine Java-Themen 2
H2SO3- SCJP Chapter 3 Frage 10. Falsche Antwort? Allgemeine Java-Themen 15
P Falsche Ausgabe Allgemeine Java-Themen 5
E Falsche Ergebnisse bei PQ-Formel Berechnung Allgemeine Java-Themen 12
M rxtx OutputStream sendet falsche werte Allgemeine Java-Themen 3
I Teilweise falsche Darstellung jap. Zeichen im JEditorPane mit RTFEditorKit aus RTF-Datei Allgemeine Java-Themen 5
D falsche Annahme nach korrekter Auswertung (if, boolean) Allgemeine Java-Themen 2
J Calendar gibt falsche Wochenanzahl zurück Allgemeine Java-Themen 3
D Problem mit java.util.scanner: Falsche Ergebnisse Allgemeine Java-Themen 4
hdi Logikfehler/falsche Methode? - Grösse von Dateien/Festplatte Allgemeine Java-Themen 14
G Denksport: Der falsche Barren Allgemeine Java-Themen 9
W PrintWriter (PrintStream) sendet falsche Werte Allgemeine Java-Themen 18
oliver1974 "(.) should be accessed in a static way" Falsche W Allgemeine Java-Themen 6
N URLClassLoader läd falsche Klasse Allgemeine Java-Themen 3
G BigDecimal Rundet falsche Allgemeine Java-Themen 4
G ständig Iterator über Kollektion --> falsche Reihenfolge? Allgemeine Java-Themen 2
H falsche ausgabe Allgemeine Java-Themen 15
S Decimalformat gibt falsche Werte aus Allgemeine Java-Themen 3
A Falsche Werte bei .readDouble() Allgemeine Java-Themen 2
M problem mit packages - falsche einstellungen? Allgemeine Java-Themen 2

Ähnliche Java Themen


Oben