Schnittberechnung!

Hey ho!

Ich habe folgendes Problem.

Alle Geometrie-Klassen haben eine gemeinsame abstrakte Basisklasse Geometry.
Diese beinhaltet als Attribut eine Farbe. Darüber hinaus deklariert sie die Methode hit, welche
einen Strahl als Parameter entgegen nimmt. In einer Implementierung dieser Methode erfolgt die
Schnittberechnung. Eine Implementierung gibt bei mehreren Schnittpunkten immer den mit dem
kleinsten positiven t zurück.
Ich versuche jetzt die ganze Zeit den Schnittpunkt also den Hit! zu implementieren, aber irgendwie will ich das nicht so richtig hinbekommen. Könnt ihr mir helfen? :frowning:

Geometry:

package raytracer.geometry;
import raytracer.geometry.Hit;
import raytracer.Color;
import raytracer.math.Ray;

/**
 * Klasse NICHT fertig
 * @author Vincent
 *
 */

public abstract class Geometry {
	
	public final Color color;
	
	public Geometry(final Color color){
		this.color = color;
	}
	
	public Hit hit(Ray r){
		if(r == null){
		return null;
		} else {
		  
			
		}
		return null;
         
		
		
	}

}

Ray:

package raytracer.math;

/**
 * Klasse NICHT fertig
 * @author Nicole
 *
 */

public class Ray {
	
	public final Point3 o;
	public final Vector3 d;
	
	
	public Ray(final Point3 o, final Vector3 d) {
		
		this.o = o;						//Urspruch des Strahls
		this.d = d;					//Richtung des Strahls
	}
	
	public Point3 at (final double t) { //Gibt entsprechendden Punkt aus		
		return o.add(d.mul(t));
	}
	
	public double tOf( Point3 p){
		
	  double t;
	  return 0;
		
					//ausgabe vom Parameter
	}

	
	
}

Hit:

package raytracer.geometry;

import raytracer.math.Ray;

/**
 * Klasse NICHT fertig
 * @author Vincent
 *
 */

public class Hit {

	public final double t;
	public final Ray ray;
	public final Geometry geo;
	
	/**
	 * @param t
	 * @param ray
	 * @param geo
	 */
	public Hit(final double t, final Ray ray, final Geometry geo) {
		this.t = t;
		this.ray = ray;
		this.geo = geo;
	}
	  
      
	
	
	
	
}

Ich würde den “hit” nicht als eigene Klasse ansehen, es ist ja kein Objekt.

Ich würde der Geometry-Klasse eine (abstrakte) Methode hitBy(Ray ray) spendieren, in der dann die konkreten Implementierungen den (kleinsten) Schnittpunkt mit sich selbst berechnen.

bye
TT

Danke für die Antwort ich werde es mal ausprobieren :slight_smile: