Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Black-Panther

Alter Hase

  • »Black-Panther« ist der Autor dieses Themas

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

1

11.08.2006, 11:34

AABB Schnitt mit Ebene --> Fläche: deren Achsen?

Hi!

Arbeite derzeit an einem BSPTree mit PVS und steh atm an...
Ich muss eine Ebene in eine Fläche umwandeln und die Fläche dann mit Punkten in regelmäßigen Abstand versehen.
Die Ebene wird durch eine AABB begrenzt. Schnittpunkte hab ich ausgerechnet. Nun habe ich diese vier Eckpunkte der Fläche, wie komm ich jetzt auf den x und y Achsenvektor?
Im Pirnzip wäre der ja der verbindungvektor zweier aufeinanderfolgender Eckpunkte. ABER, wie weiß ich, ob ein Verbindungsvektor eine Seite oder die Diagonale darstellt? Ich weiß ja nicht welcher Vektor welche Ecke beschreibt!
Kann mir da einer helfen?
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

big_muff

Alter Hase

Beiträge: 460

Wohnort: Schweiz

Beruf: Informatikstudent (4. Semester)

  • Private Nachricht senden

2

11.08.2006, 11:49

Irgendwie hast du ein Problem mit den Begriffen. Eine Ebene ist unendlich ausgedehnt während eine Fläche begrenzt ist.
Du kannst also aus einer Ebene keine Fläche erzeugen, aber umgekehrt und eine Ebene kann nicht begrenzt sein.
Deshalb verstehe ich jetzt auch nicht genau was dein Problem ist.
Nur Idioten halten Ordnung, ein Genie beherrscht das Chaos.[size=7]

[/size]HardFate - Ein Start, Ein Ziel, Viele Wege[size=7]

[/size]Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

3

11.08.2006, 11:58

Verstehe ich das richtig?
Du hast eine Ebene (mit Normalenvektor) und willst jetzt zwei "Achsenvektoren" haben? Also zwei Vektoren, die parallel zur Ebene verlaufen und zueinander senkrecht sind?

Das wäre relativ einfach.
Sagen wir N = (Nx, Ny, Nz) ist der Normalenvektor, und A = (Ax, Ay, Az) und B = (Bx, By, Bz) sind die gesuchten Achsenvektoren.

1. Schritt:
A bestimmen, so dass A senkrecht zu N ist, also A*N = 0.
Das bedeutet, es muss gelten: Ax*Nx + Ay*Ny + Az*Nz = 0.

Da brauchen wir eine Fallunterscheidung.
Wenn eine der Koordinaten von N, also Nx, Ny oder Nz = 0 ist, dann setzt du die entsprechende Koordinate von A auf 1. Beispiel: N = (0, 0.75, 0.5) => dann setzen wir A = (1, 0, 0). Somit ist garantiert, dass A senkrecht zu N ist.
Wenn jedoch keine der Koordinaten von N null ist, gehen wir anders vor. Wir setzen erst einmal beispielsweise Ax = 1 und die beiden anderen Koordinaten Ay = Az = 0. (Du könntest auch Ay oder Az = 1 setzen)
Jetzt schauen wir, was beim Skalarprodukt A*N herauskäme, nämlich Ax*Nx = 1*Nx = Nx. Es soll aber null herauskommen. Also müssen wir Ay oder Az so wählen, dass Ay*Ny bzw. Az*Nz genau -Nx ist, damit insgesamt null herauskommt. Das heißt Ay*Ny = -Nx <=> Ay = -Nx/Ny bzw. Az*Nz = -Nx <=> Az = -Nx/Nz.
Darum war auch vorhin eine Fallunterscheidung nötig, weil hier ja dividiert wird, und Dividieren durch null ist nicht gut.

Jetzt haben wir also A.

2. Schritt:
B berechnen wir nun ganz einfach durch B = A x N.
Damit haben wir zwei Vektoren A und B, die senkrecht zu N stehen.

Black-Panther

Alter Hase

  • »Black-Panther« ist der Autor dieses Themas

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

4

11.08.2006, 12:20

@big_muff
Doch, hab ich doch geschrieben. Ich begrenze die Ebene durch eine AA-BoundingBox, damit wird aus der Ebene eine Fläche mit 4 Eckpunkten...

@David
Hmmm.... ich glaub das ist nicht genau das was ich mein...
Also, Schritt 2, ist klar, aber dazu braucht man mal A... Wenn ich jetzt nur den normalvektor habe, dann gibt es ja unendliche viele vektoren die senkrecht auf N stehen... Ich brauche aber einen ganz bestimmten und zwar den normalisierten Verbindungvektor von der linken oberen Ecke zur rechten oberen Ecke (x-Achse!). Mein Problem ist aber, dass ich nicht weiß, welches die linke obere Ecke ist, und welches die rechte!
Praktisch, wenn ich einen Verbindungsvektor v0 - v1 erstelle, dann könnte sein, dass es der besagte ist, aber auch, dasses der y-Achsenvektor ist, oder gar die Diagonale der Fläche... was natürlich nicht richtig wäre.
Du berechnest ja IRGEND einen Vektor der senkrecht auf N steht, oder?
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

big_muff

Alter Hase

Beiträge: 460

Wohnort: Schweiz

Beruf: Informatikstudent (4. Semester)

  • Private Nachricht senden

5

11.08.2006, 12:25

Zitat von »"Black-Panther"«

@big_muff
Doch, hab ich doch geschrieben. Ich begrenze die Ebene durch eine AA-BoundingBox, damit wird aus der Ebene eine Fläche mit 4 Eckpunkten...

Sorry, da habe ich was falsch verstanden.

Die Diagonale ist einfach die längste aller möglichen Kombinationen. Die x- und y-Achsenvektoren die zweitlängste und die kürzeste. Ohne weitere Angaben kannst du nicht sagen, ob es der x- oder y-Achsenvektor ist.
Nur Idioten halten Ordnung, ein Genie beherrscht das Chaos.[size=7]

[/size]HardFate - Ein Start, Ein Ziel, Viele Wege[size=7]

[/size]Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.

Black-Panther

Alter Hase

  • »Black-Panther« ist der Autor dieses Themas

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

6

11.08.2006, 12:32

Danke big_muff....!!!
Das hab ich gebraucht... ich glaub, manchmal denk ich zu kompliziert ;)
Und dann ist die Lösung so trivial... naja... Danke jedenfalls :D

PS: In meinem Fall ist es egal, ob man weiß welches die x und welches die y achse ist...
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

Werbeanzeige