Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
25.11.2002, 13:05
the_viking



Hi Leute, ich hab da ein kleines Mathematisches Problem:

Ich hab 3 Ebenen, die durch die normalenform beschrieben sind (Punkt auf Ebene und Normalenvektor der Ebene)
Diese 3 Ebenen schneiden sich.
Wisst ihr, wie ich den Schnittpunkt dieser 3 Ebenen herausfinden kann? Thx, ihr seit echt klasse :)

--

thx, cu, MfG the_viking

(( My =]=H=O=M=E=> Page! ))
Coder bei Brainshock-Interactive und bei Z-Software
My ICQ: #160959446

zum Seitenanfang zum Seitenende Profil || Suche
001
25.11.2002, 15:05
Prefect



Naja, du hast drei (Ebenen-)Gleichungen der Form ax + by + cz + d = 0
Drei Gleichungen, drei Unbekannte, lineares Gleichungssystem. Das dürfte doch lösbar sein, oder?

Natürlich könntest du auch erst die Schnittgerade zweier Ebenen bestimmen und die dann mit der dritten Ebene schneiden, aber das wäre wohl etwas mehr Aufwand.

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.

zum Seitenanfang zum Seitenende Profil || Suche
002
26.11.2002, 13:33
the_viking



OK, mal anders:

struct TPlane
{
Vector point,normal;
};

Vector CalcIntersect(TPlane* p1,TPlane* p2,TPlane* p3)
{
Vector intersect;
[wasweißich]
return intersect;
}

ax + by + cz + d = 0
Was ist ax,by,cz und d? Das kapier ich wahrscheinlich nie...
Da muss doch irgendwo die Normale und der Punkt sein...

--

thx, cu, MfG the_viking

(( My =]=H=O=M=E=> Page! ))
Coder bei Brainshock-Interactive und bei Z-Software
My ICQ: #160959446

zum Seitenanfang zum Seitenende Profil || Suche
003
26.11.2002, 17:25
Prefect



n*(x - a) = 0
n*x - n*a = 0

Auflösen in einzelne Koordinaten:
n1*x1 + n2*x2 + n3*x3 - n*a = 0
ax + bx + cy + d = 0
=> a = n1, b = n2, c = n3, d = -n*a

Außerdem kannst du die Ebene dann mit nur vier Konstanten (= 16 oder 32 Bytes) speichern, was einiges günstiger für Caches und so ist. Außerdem kannst du Abstände von Ebenen zu Punkten einiges leichter bestimmen.

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.

zum Seitenanfang zum Seitenende Profil || Suche
004
27.11.2002, 14:07
the_viking



*confused*

also eine Normalen-Ebene hat die Normale (n). Und einen Punkt (x). Und wo kommt jetzt das (a) her??

Also: Ich will den Schnittpunkt von 3 Ebenen berechnen! Es ist mir scheißegal wieviel Speicher die structs verbrauchen! Ich will einfach nur den schnittpunkt! Muss ich den erst auffe Uni gehen um diesen Mist zu verstehen? Es wird doch wohl irgendwo eine Funktion á la:

Vector CalcIntersect(TPlane* p1,TPlane* p2,TPlane* p3);

geben??

PS: ICH BIN NICHT SCHLECHT GELAUNT!

--

thx, cu, MfG the_viking

(( My =]=H=O=M=E=> Page! ))
Coder bei Brainshock-Interactive und bei Z-Software
My ICQ: #160959446

zum Seitenanfang zum Seitenende Profil || Suche
005
27.11.2002, 16:11
Prefect



Kann es sein, daß du gar nicht weißt, was die Normalenform ist?

n*(x - a) = 0

In dieser Gleichung sind a und n Konstanten (bzw. halt konstante Vektoren). x ist eine Unbekannte - wenn man hier einen Punkt für x einsetzt und die Gleichung stimmt, dann ist das gleichbedeutund damit, daß der Punkt in der Ebene liegt.

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.

zum Seitenanfang zum Seitenende Profil || Suche
006
28.11.2002, 13:42
the_viking



achso also:

n * (x - a) = 0
n * x - n * a = 0

jaja und wenn n * ( x - a) > 0 dann hinter und <0 vor der Ebene oder umgekehrt..

So, jetz hab ich 3 Ebenen:

n1 * (x - a1) = 0
n2 * (x - a2) = 0
n3 * (x - a3) = 0

d.h. :

n1 * (x - a1) = n2 * (x - a2) = n3 * (x - a3) = 0

d.H. jetzt müsste ich für jeden Punkt gucken, ob das alles Null ergibt.

gibt es nicht so eine Formel:

(punkt) = irgendwasmitdenebenenberechnen

Denn ich will ja den Schnittpunkt und nicht gucken wo ein Punkt relativ zur ebene liegt!

--

thx, cu, MfG the_viking

(( My =]=H=O=M=E=> Page! ))
Coder bei Brainshock-Interactive und bei Z-Software
My ICQ: #160959446

zum Seitenanfang zum Seitenende Profil || Suche
007
28.11.2002, 14:49
Prefect



*sigh*

Lies dir einfach Post #3 nochmal durch. Du mußt die Normalenform _umformen_, indem du sie in die einzelnen Koordinaten auflöst, und dann eben sowas wie Ax + By + Cz + D = 0 hast, eben eine stinknormale lineare Gleichung. Diese Form ist letztendlich genau dasselbe, wird aber manchmal auch Koordinatenform genannt.

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.

zum Seitenanfang zum Seitenende Profil || Suche
008
28.11.2002, 16:39
the_viking



Das ist die Parameterform.

Mathe-Formelsammlung (anno 1960 ) :

Quellcode:
A1x + B1y + C1z + D1 = 0
A2x + B2y + C2z + D2 = 0
A3x + B3y + C3z + D3 = 0

      1   | - D1 B1 C1 |
x =  ---  | - D2 B2 C2 |
      D   | - D3 B3 C3 |

      1   | A1 - D1 C1 |
y =  ---  | A2 - D2 C2 |
      D   | A3 - D3 C3 |

      1   | A1 B1 - D1 |
z =  ---  | A2 B2 - D2 |
      D   | A3 B3 - D3 |

Hmm....

--

thx, cu, MfG the_viking

(( My =]=H=O=M=E=> Page! ))
Coder bei Brainshock-Interactive und bei Z-Software
My ICQ: #160959446


Dieser Beitrag wurde am 28.11.2002 um 16:40 von the_viking bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
009
29.11.2002, 14:00
Prefect



Nein, die Parameterform einer Ebene sieht so aus:
x = p + su + tv

Die Parameterform heißt so, weil sie mit zwei reellen Parametern s und t arbeitet. Sie ist überhaupt konzeptionell völlig anders als die Normalenform. Die Parameterform beschreibt eine Ebene als eine Menge von Punkten, die durch zwei Vektoren (u und v) ausgehend von einem Stützpunkt (p) aufgespannt wird.
Die Koordinaten- oder Normalenform (die beiden sind äquivalent) beschreiben eine Ebene als die Menge aller Punkte die, wenn man sie orthogonal auf die Ursprungsgerade mit dem Richtungsvektor n projeziert in einem Punkt zusammenfallen.
Essentiell dabei ist, daß die Normalenform letztendlich nicht nur eine Ebene beschreibt, sondern (auf alle Dimensionen ausgeweitet) einen "Raumteiler", der jeden Raum - egal in welcher Dimension - in zwei Hälften aufteilt. Im R2 beschreibt die Normalenform deswegen eine Gerade, im R3 beschreibt sie eine Ebene, im R4 beschreibt sie einen Raum, usw.

In der Formelsammlung dürfte doch auch stehen, wie man Determinanten berechnet, oder? Entweder über die Regel von Sarrus oder über die Zerlegung in zwei-dimensionale Determinanten usw.

Ach ja, D ist in diesem Fall die Determinante:

Quellcode:
    | A1 B1 C1 |
D = | A2 B2 C2 |
    | A3 B3 C3 |

Das müßte aber auch in der Formelsammlung stehen.

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.


Dieser Beitrag wurde am 29.11.2002 um 14:06 von Prefect bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
010
29.11.2002, 16:02
the_viking



Zitat:
Prefect postete
Auflösen in einzelne Koordinaten:
n1*x1 + n2*x2 + n3*x3 - n*a = 0
ax + bx + cy + d = 0
=> a = n1, b = n2, c = n3, d = -n*a[/i]

sind da jetzt schon alle drei ebenen drin? Dann könnte man das ja nicht mehr mit den 3 ebenen ausrechnen.
Wenn das nur eine sein soll, versteh ich x1 x2 x3 nicht...

--

thx, cu, MfG the_viking

(( My =]=H=O=M=E=> Page! ))
Coder bei Brainshock-Interactive und bei Z-Software
My ICQ: #160959446

zum Seitenanfang zum Seitenende Profil || Suche
011
30.11.2002, 11:28
Prefect



x1 ist die erste Komponente von x, x2 die zweite usw. Du könntest auch einfach x, y und z schreiben.

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.

zum Seitenanfang zum Seitenende Profil || Suche
012
30.11.2002, 17:47
the_viking



Also
nx * xx + ny * xy + nz * xz - n * a = 0

Ahh gut. ( Ich bin zwar immer noch nicht weiter, aber was solls?)

--

thx, cu, MfG the_viking

(( My =]=H=O=M=E=> Page! ))
Coder bei Brainshock-Interactive und bei Z-Software
My ICQ: #160959446

zum Seitenanfang zum Seitenende Profil || Suche