vekorrechnung im raum

Neue Frage »

alex_ Auf diesen Beitrag antworten »
vekorrechnung im raum
hallo!

also ich mache in flash gerade etwas wo ich mit dreidimensionalen vektoren rechne, das geht ja auch alles..
nur will ich jetzt z.b. auch einen würfel oder quader zeichen mit hilfe der eingegebenen daten.
aber in flash gibt es ja nur x und y achsen, also keine z achse..

meine frage ist jetzt ob ich diesen dreidimensionalen vektor irgendwie in einem zweidimensionalen koordinatensystem zeichnen kann??

thx, mfg. alex
DeGT Auf diesen Beitrag antworten »

Klar kannst du das.

Du kannst die Tiefe simulieren, indem du das einfach folgendermaßen zeichnest:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
   __________
  /         /|
/ _________/ |
|          | |
|          | |
|          | |
|__________|/


Dabei rechnest du einfach eine Einheit z in eine halbe x und eine halbe y um.

Wenn du das ganze drehen willst, solltest du mit sinus etc arbeiten.
Leopold Auf diesen Beitrag antworten »

Nennen wir das vorgegebene zweidimensionale Koordinatensystem xy und das virtuelle dreidimensionale uvw.

Die Ursprünge der zwei Systeme sollen zusammenfallen, ebenso die y-Achse des xy-Systems und die w-Achse des uvw-Systems. (Ich gehe hier davon aus, daß die x-Koordinaten nach rechts hin und die y-Koordinaten nach oben hin zunehmen. Ich weiß nicht, wie es in deiner Programmiersprache ist.)

Die u-Achse sei mit dem Winkel und die v-Achse mit dem Winkel zur Horizontalen geneigt (siehe Zeichnung unten). Auf der u-,v-,w-Achse wird jetzt die Einheit 1 festgelegt. Die wirklichen Längen im xy-System seien .

Dann kannst du die uvw-Koordinaten folgendermaßen in xy-Koordinaten umrechnen:



Und falls du mit der Matrizenrechnung nicht vertraut bist, hier noch einmal die Formeln ohne Matrizen:





Gängige Vorgaben sind:

das Schrägbild:


das Normalbild in Isometrie:


das Normalbild in Dimetrie:
alex_ Auf diesen Beitrag antworten »

ich danke euch für die schnelle hilfe und werde es gleich mal probieren..

mfg. alex
alex_ Auf diesen Beitrag antworten »

aja, eines habe ich vergessen bei mir nehmen die x-koordinaten zwar nach rechts zu aber die y-koordinaten nach unten.
was muss ich an der formel ändern damit alles passt??

thx, mfg. alex
DeGT Auf diesen Beitrag antworten »

dann kannst du einfach die y-Koordinaten angleichen, indem du
Ymax-y
rechnest.
yMax ist dabei der Wert am unteren Ende und dann gehst du durch abziehen einfach wieder nach oben.
 
 
alex_ Auf diesen Beitrag antworten »

also ich hab das jetzt probiert so wie du das gesagt hast nur check ich das grad nicht, kannst du mir vielleicht dir richtige formel aufschreiben??

thx, mfg. alex
DeGT Auf diesen Beitrag antworten »

statt

nimmst du einfach


Immer angenommen, du hast ein absolutes y.

Wenn du ein relatives y hast, reicht es einfach, ein Minus davor zu setzen.
alex_ Auf diesen Beitrag antworten »

danke es geht, ich habs zwar genauso gemacht nur hatte ich vielleicht irgendwo nen kleinen fehler weil bei mir is da nix gscheites rausgekommen..
alex_ Auf diesen Beitrag antworten »

eine frage hätte ich noch..

wie drehe ich den würfel(oda sonst was) jetzt um die x-, y- und z-achse??

thx, mfg. alex
Leopold Auf diesen Beitrag antworten »

Drehung um die u-Achse mit dem Winkel :



Entsprechend gehen die Drehungen um die v- bzw. w-Achse.
alex_ Auf diesen Beitrag antworten »

also ich wollte jetzt einen kegel zeichnen, das bekomm ich ja auch hin is die linie des kreises etwas zu dick..
deshalb möchte ich gerne wissen wie ich mit 3d-vektoren einen gscheiten kreis zeichnen kann??

thx, mfg. alex
DeGT Auf diesen Beitrag antworten »

Da solltest du eine Ellipse nehmen und die Seitenverhältnisse entsprechend anpassen (Die Formeln hast du ja schon ansatzweise)

Allerdings verstehe ich deine Aussage nicht: wieso zeichnest du nicht einfach den Kreis dünner? verwirrt
alex_ Auf diesen Beitrag antworten »

was ich auch versucht habe ich habs nicht hinbekommen
DeGT Auf diesen Beitrag antworten »

Wenn du sagen könntest, WAS du versucht hast (und welches Ergebnis du genau haben willst), wäre das sehr hilfreich.

Eventuell könntest du auch Codeschnipsel posten, ich kenne mich zwar nicht so mit Flash aus, aber schaden tuts ja nie. Augenzwinkern
alex_ Auf diesen Beitrag antworten »

@ leopold

ich habe deine formel für die drehung einens vektors um eine achse mal ausprobiert und leider funktioniert es nicht so richtig..
könntest du mir die formel auch mal ohne matrizen aufschreiben, vielleicht habe ich die falsch umgewandelt??

thx, mfg. alex
DeGT Auf diesen Beitrag antworten »

Du kannst das als drei einzelne Formeln nehmen.
einfach erste zeile=erste Formel und so weiter.
Die Vektorform ist aber gar nicht so schlecht vür so ein Programm.
alex_ Auf diesen Beitrag antworten »

das will ich ja auch machen, hab ich auch gemacht nur kommt trotzdem nix richitges raus..
könntest du mir vielleicht diese formel für eine drehung um die x-, y- und z-achse aufschreiben??

thx, mfg. alex
DeGT Auf diesen Beitrag antworten »

Wie schon gesagt: es wäre wirklich sehr hilfreich, wenn du das, was du gemacht hast, auch hier posten könntest.
Dann kann man nämlich viel leichter die Fehler erkennen und du kannst daraus auch mehr lernen.
alex_ Auf diesen Beitrag antworten »

also mein code schaut folgendermaßen aus..
for(i=0;i<points.length;i++) {
points[i][1] = (Math.cos(alphax) * points[i][1]) - (Math.sin(alphax) * points[i][1]);
points[i][2] = (Math.sin(alphax) * points[i][2]) + (Math.cos(alphax) * points[i][2]);

points[i][0] = (Math.sin(alphay) * points[i][0]) + (Math.cos(alphay) * points[i][0]);
points[i][2] = (Math.cos(alphay) * points[i][2]) - (Math.sin(alphay) * points[i][2]);

points[i][0] = (Math.cos(alphaz) * points[i][0]) - (Math.sin(alphaz) * points[i][0]);
points[i][1] = (Math.sin(alphaz) * points[i][1]) + (Math.cos(alphaz) * points[i][1]);
}

points ist mein array und in jedem array von points steckt wieder ein array 3 zahlen(x, y & z). alphax gibt an um wieviel grad sich der punkt um die xasche bewegt, das selbe gilt für alphay und alphaz
points[i][0] ist ein xwert
points[i][1] ist ein ywert
points[i][2] ist ein zwert

ich hoffe dass du mir jetzt helfen kannst und falls noch unklarheiten bestehn werde ich gerne versuchen es nocheinmal zu erklären..

thx, mfg. alex
DeGT Auf diesen Beitrag antworten »

Das müsste eigentlich eher folgendermaßen lauten:

points[i][1] = (Math.cos(alphax) * points[i][1]) - (Math.sin(alphax) * points[i][2]);
points[i][2] = (Math.sin(alphax) * points[i][1]) + (Math.cos(alphax) * points[i][2]);

Da man ja Zeile mal spalte rechnet.

Ich muss zugeben, dass mein vorletzter Post schlecht war. Hoffenttlich bügelt dieser das aus :P
alex_ Auf diesen Beitrag antworten »

vielen dank für deine hilfe und für die y- und z-achse muss ich es einfach genauso ändern damit dann alles passt??

mfg. alex
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »