#include <Plane.h>

Öffentliche Typen | |
| enum | PLANE_TYPE { INSIDE = 0, OUTSIDE = 1, INPLANE = 2 } |
Öffentliche Methoden | |
| Plane () | |
| Konstruktor. | |
| virtual | ~Plane () |
| Destruktor. | |
| void | clear (void) |
| Initialisiert die Ebene. | |
| void | set (Vec &v0, Vec &va, Vec &vb) |
| Setter fuer die Ebenenparameter: Definiert die Ebene ueber drei Punkte, die sich auf der Ebene befinden Die Punkte duerfen nicht alle auf einer Geraden liegen! Aus den Punkten wird der Normalenvektor berechnet, und normalisiert (Laenge 1) Ausserdem wird der Abstand zum Ursprung D berechnet. Der Normalenvektor zeigt in Richtung der Ebene. Es gilt: d = N * Q + D. | |
| int | check (Vec &v0) |
| Testet, ob ein Punkt (Vektor) innerhalb, ausserhalb oder auf der Ebene liegt. | |
| bool | intersect (Line &P, float *dist) |
| Liefert die Distanz der Linie zur Ebene. | |
| float | getInterLegth () |
| Liefert die Distanz zur Intersection zurueck. | |
| void | dump (char *msg) |
| Obligatorische Dumb-Methode fuer Debugzwecke. | |
Öffentliche Attribute | |
| Vec | m_N |
| Vec | m_P |
| float | m_D |
Private Attribute | |
| float | m_intersectLength |
| enum Plane::PLANE_TYPE |
| Plane::Plane | ( | ) |
Konstruktor.
| Plane::~Plane | ( | ) | [virtual] |
Destruktor.
| void Plane::clear | ( | void | ) |
Initialisiert die Ebene.
Setter fuer die Ebenenparameter: Definiert die Ebene ueber drei Punkte, die sich auf der Ebene befinden Die Punkte duerfen nicht alle auf einer Geraden liegen! Aus den Punkten wird der Normalenvektor berechnet, und normalisiert (Laenge 1) Ausserdem wird der Abstand zum Ursprung D berechnet. Der Normalenvektor zeigt in Richtung der Ebene. Es gilt: d = N * Q + D.
va | | | |----------vb v0
| v0 | ||
| va | ||
| vb |
| int Plane::check | ( | Vec & | v0 | ) |
Testet, ob ein Punkt (Vektor) innerhalb, ausserhalb oder auf der Ebene liegt.
| v0 | Der Punkt |
| bool Plane::intersect | ( | Line & | P, | |
| float * | dist | |||
| ) |
Liefert die Distanz der Linie zur Ebene.
Damit ist die Laenge vom Startpunkt der Linie bis zur Ebene gemeint. Diese Laenge ist Normiert. Die Laenge einer Linie/Strahls ist normalerweise unendlich. Mann kann aber ein Polygonsegment (hier Tilesegment) in eine Linie mit einer festen Laenge umwandeln. Vergleicht mann die Laenge des Tilesegments mit der der Distanz t zur Plane weiss mann, ob das Tilesegment die Plane schneidet. Wichtig: um beide laengen vergleichen zu koennen, muss die Laenge der Tile- segments normiert werden. Es gilt: Wenn t < 0 dann liegt die Ebene 'hinter' dem Segment Wenn t > (normierte) Laenge des Segments, ist das Segment zu kurz, und schneidet die Ebene nicht. Nur wenn (0 <=t) && t < SegLen) schneidet die Linie die Ebene. Der Schnittpunkt selbst kann mit line.getEndPoint(t) ermittelt werden.
-(N * S + D) t = ------------ N * V
| P | Line | |
| dist | Distanz |
| float Plane::getInterLegth | ( | ) |
Liefert die Distanz zur Intersection zurueck.
| void Plane::dump | ( | char * | msg | ) |
| float Plane::m_D |
float Plane::m_intersectLength [private] |
1.5.5