rechteckige plane im 3d raum anhand 3 punkten erstellen

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

feuerball11

Betreff: rechteckige plane im 3d raum anhand 3 punkten erstellen

BeitragMo, Dez 14, 2009 13:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich habe folgendes problem:

Ich will anhand 3 punkten, die sich im 3d-raum befinden ein rechteck erstellen.
die 3 punkte sind jeweils in einem type gespeichert. mit den jeweiligen 3d-koordinaten.

nun will ich aus den 3 punkten ein rechteck erstellen.
beispiel im 2d-raum
O---------A-------------O
| . . . . . . . . . . . . . . . .|
| . . . . . . . . . . . . . . . .|
| . . . . . . . . . . . . . . . .|
| . . . . . . . . . . . . . . . .|
| . . . . . . . . . . . . . . . .|
A-------------------------A

(Punkte ignorieren)

Hierbei sind die drei punkte A gegeben, und die zwei punkte O gesucht.
Nun die frage. wie schaffe ich es am besten, die zwei punkte O zu bestimmen.
problem ist: das rechteck befindet sich in einem 3d-raum und ist in einer belibigen richtung gedreht.

PS: code lass ich mal noch raus, weil im code nur die bestimmung der 3 koordinaten steht, und ich glaube das kann sich jeder vorstellen oder? falls nicht schreibe ich den code noch später rein.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMo, Dez 14, 2009 13:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Normaler weise erstellt man aus vier Vertices, also zwei Triangles, ein Quad.

Aber wenn deine Methode unbedingt sein muß, so nimm die Differenz zwischen A Links/Unten zu A Rrechts/Unten und rechne diese /2 zu A Oben jeweils hinzu, um die Eckpunkte O zu berechnen.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

feuerball11

BeitragMo, Dez 14, 2009 13:58
Antworten mit Zitat
Benutzer-Profile anzeigen
1. ich mach das ganze ja über trangles bzw vertices, aber ich will, das der user dann eine gerade fläche bekommt. könnte er alle 4 erstellen wäre es in einem 3d-raum sehr schwer eine gerade fläche zu bekommen.

2. es handeld sichum ein 3d-raum, da kann ich das wie du gesagt hast nicht so einfach machen.

3. der obere punkt A kann irgendwo auf der line sein. er muss nicht exakt auf der mitte sein.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMo, Dez 14, 2009 14:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Also mit der von mit beschriebenen Methode würdest du eine flache Fläche bekommen. Also keine gewölbte Fläche oder so. Selbst die Oberkannte wäre gerade. Das obere A würde genau zwischen den beiden Os liegen und somit sichtbar unter gehen, wenn die UV-Koordinaten durchängig wären.

Aber wie gesagt, Quads erstellt man eigendlich nicht so. Es gibt zum Beispiel wunderbare TForm... -Befehle bei Blitz3D, die einem das arbeiten mit diesem erheblich erleichtern. Und schnell sind sie auch noch.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

feuerball11

BeitragMo, Dez 14, 2009 14:17
Antworten mit Zitat
Benutzer-Profile anzeigen
eine kommplette gerade fläche will ich ja haben. auserdem kann das A auch auserhalb des rechtecks ein. es soll blos ein punkt zum erstellen sein. und tform kenn ich noch nicht, ich wüste aber uach nicht wie mir das helfen sollte.

Noobody

BeitragMo, Dez 14, 2009 14:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Angenommen, A1 und A2 sind die beiden Punkte links und rechts unten in deiner Zeichnung und A3 der Punkt oben, so würde ich folgendermassen vorgehen:

Zuerst bildest du zwei Ebenen, deren Ursprung im Punkt A1 bzw. A2 liegt und deren Normalenvektor dem Vektor A2 - A1 entspricht. Dann bildest du eine Gerade, die durch den Punkt A3 geht und parallel zu A2-A1 verläuft. Dann musst du nur noch diese Gerade mit den beiden Ebenen schneiden und erhältst die Koordinaten von O1 bzw. O2.

Wenn du willst, kann ich dir einen entsprechenden Code schreiben, wirklich schwierig ist es aber nicht. Du brauchst eigentlich nur eine Ebene-Gerade-Schnittberechnung, der Rest ist in ein paar Zeilen erledigt
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun
 

feuerball11

BeitragMo, Dez 14, 2009 15:02
Antworten mit Zitat
Benutzer-Profile anzeigen
ein bespiel-code wäre nett. ich habe mich in vektoren noch nicht eingearbeitet, so weis ich auch nicht wie diese funktionieren. ich werde sie mir mal anschauen und das versuchen, wass du gesagt hast. nen beispiel wäre trotzdem nett.
 

Kruemelator

BeitragMo, Dez 14, 2009 16:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Es kann sein das ich mich irre, aber kann es nicht sein das die Fläche dann falschrum sein kann, also das man sie von hinten sieht(dann ja eben nicht Wink )? Dann muss man wissen welcher A Punkt auf welcher Seite ist.

Gruß Kruemelator
 

feuerball11

BeitragMo, Dez 14, 2009 16:36
Antworten mit Zitat
Benutzer-Profile anzeigen
das mit der seite ist eigentlich egal, da ich 4 triangles erstellen will, 2 für jede seite. dann ist das rechteck sozusagen beidseitig. ich brauche halt erst die 4 eck-punkte, welche ich aus den ersten beiden + dem dritten erschließen will.

Midimaster

BeitragMo, Dez 14, 2009 20:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Deine Strategie ist auch noch nicht eindeutig...

Die drei Punkte A ergeben nur ein Dreieck im Raum. Nun gibt es theoretisch von jeder der 3 Seiten ein machbares Rechteck. Ist den geregelt, welche der 3 Seiten als 1. Außenkante des Rechtecks festgelegt sein soll?
  • Zuletzt bearbeitet von Midimaster am Mo, Dez 14, 2009 23:03, insgesamt einmal bearbeitet
 

feuerball11

BeitragMo, Dez 14, 2009 20:22
Antworten mit Zitat
Benutzer-Profile anzeigen
das verstehst du falsch. ich will nicht von den ausen-kanten des dreiecks ein rechteck bilden, sondern anders:

der erste punkt A ist der anfangs-punkt.
danach kommt ein punkt B welcher eine linie zum punkt A bildet.
nun will ich mit dem 3. punkt C eine höhe auf diese linie bilden und daraus dann des rechteck bilden. also so:


------------C--------------
| . . . . . . . . . . . . . . . . |
| . . . . . . . . . . . . . . . . |
| . . . . . . . . . . . . . . . . |
| . . . . . . . . . . . . . . . . |
| . . . . . . . . . . . . . . . . |
A-------------------------B
 

Kruemelator

BeitragMo, Dez 14, 2009 20:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Mir ist noch nicht alles klar.
Ist eine Seite des Dreiecks (hier A und B) Parallel zum Boden, oder ist es beliebig gedreht?
Und noch eine andere Frage: Liegt Punkt C auf der Seite des Rechtecks oder kann es auch außerhalb liegen?
Ich meine so:

C. . . . . . . -------------------
. . . . . . . . |. . . . . . . . . . . |
. . . . . . . . |. . . . . . . . . . . |
. . . . . . . . |. . . . . . . . . . . |
. . . . . . . . |. . . . . . . . . . . |
. . . . . . . . |. . . . . . . . . . . |
. . . . . . . . |. . . . . . . . . . . |
. . . . . . . . A-----------------B

Das ist vielleicht auch noch wichtig.
 

feuerball11

BeitragMo, Dez 14, 2009 21:11
Antworten mit Zitat
Benutzer-Profile anzeigen
1. die linie a-b kann frei im raum liegen.
2. der punkt c kann auch auserhalb liegen, richtig

Midimaster

BeitragDi, Dez 15, 2009 0:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ganze läßt sich mit Vektoren und Matrizen rechnen. Ich habe das selbst noch nicht gemacht, aber das dürfte weiterhelfen:

http://members.chello.at/gut.j...toren1.htm

ab Seite 4 wird es, glaub ich, interesant.


oder hier:

http://www.mathe-online.at/nml...KAP-07.pdf

Möglicherweise würde die Frage in einem der 3d foren besser beantwortet werden können. möglicherweise git es dort sogar schon Code oder spezielle Befehle (unter B3D) dazu.

Noobody

BeitragDi, Dez 15, 2009 1:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab das heute Abend noch schnell umgesetzt BlitzBasic: [AUSKLAPPEN]
Local O1#[ 2 ], O2#[ 2 ]

ConstructRectangle( 0, 0, 0, 5, 0, 0, -5, 3, 5, O1, O2 )

Print "O1( " + O1[ 0 ] + " | " + O1[ 1 ] + " | " + O1[ 2 ] + " )"
Print "O2( " + O2[ 0 ] + " | " + O2[ 1 ] + " | " + O2[ 2 ] + " )"

WaitKey()
End

Function ConstructRectangle( X1#, Y1#, Z1#, X2#, Y2#, Z2#, X3#, Y3#, Z3#, O1#[ 2 ], O2#[ 2 ] )
Local VX# = X2# - X1#
Local VY# = Y2# - Y1#
Local VZ# = Z2# - Z1#

LinePlaneIntersection( X3#, Y3#, Z3#, VX#, VY#, VZ#, X1#, Y1#, Z1#, VX#, VY#, VZ#, O1 )
LinePlaneIntersection( X3#, Y3#, Z3#, VX#, VY#, VZ#, X2#, Y2#, Z2#, VX#, VY#, VZ#, O2 )
End Function

Function LinePlaneIntersection( X#, Y#, Z#, VX#, VY#, VZ#, PX#, PY#, PZ#, NX#, NY#, NZ#, Intersection#[ 2 ] )
T# = -( NX#*X# + NY#*Y# + NZ#*Z# - NX#*PX# - NY#*PY# - NZ#*PZ# )/( NX#*VX# + NY#*VY# + NZ#*VZ# )

Intersection[ 0 ] = X# + VX#*T#
Intersection[ 1 ] = Y# + VY#*T#
Intersection[ 2 ] = Z# + VZ#*T#
End Function


Die ersten neun Parameter sind die XYZ-Koordinaten der Punkte A1, A2 und A3 (in der Reihenfolge), die letzten zwei sind jeweils ein Blitzarray für die Resultate der Berechnung, also die beiden Punkte O1 und O2 in deiner ersten Skizze.
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun
 

feuerball11

BeitragDi, Dez 15, 2009 6:29
Antworten mit Zitat
Benutzer-Profile anzeigen
ich chack da jetzt nicht ganz durch, es ist aber auch früh am morgen. ich schau mir das mal heute nachmittag an. herzlichen dank.

Midimaster

BeitragDi, Dez 15, 2009 10:17
Antworten mit Zitat
Benutzer-Profile anzeigen
@ Noobody:
Sieht ja genial aus! Da soll es hier im Forum auch ein Tutorial von Dir dazu geben...aber ich kann es nicht finden.

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group