# Aus Gerade andere Geraden mit bestimmtem Winkel berechnen



## Illuvatar (16. Aug 2004)

Ich will dreidimensionale Pfeile erstellen, die so aussehen sollen:






Ich habe die Positionen der Punkte (x/y/z) gegeben, die rot markiert sind.
Wie bekomme ich Positionen für die anderen Punkte mit einem best. Abstand bzw die Vektoren für die Richtungen?

PS1: Benis Tutorial hat mich auch nicht weitergebracht.
PS2: Sicher gibt es viele Möglichkeiten für die Punkte, ich brauch halt irgendeine davon.

Thx


----------



## Beni (16. Aug 2004)

Ich würde mal so spontan sagen:

Nimm einen Punkt auf der Geraden (zwischen den roten Punkten) mit Abstand d von der "Spitze".

Leg eine Ebene die normal zu dieser Geraden ist durch den Punkt.

```
x0, y0, z0 = // Der Punkt auf der Geraden
x1, y1, z1 = // Spitze
x2, y2, z2 = // Ende

a = x1-x2;
b = y1-y2;
c = z1-z2;

d = -( a*x0 + b*y0 + c*z0 )

// a*x + b*y + c*z + d = 0 ist die Gleichung einer Ebene durch den Punkt (x0, y0, z0) und senkrecht zur Geraden
```

Dann nimm irgendeinen Punkt auf dieser Ebene (ist egal welcher Punkt, hier kannst du lustige Zusatzbedingungen einbauen...), nennen wir ihn mal (xp, yp, zp).

Jetzt den Vektor v = (xp-x0, yp-y0, zp-z0) auf die Länge d strecken (Die Komponenten von v durch die Gesammtlänge des Vektors teilen, und mit d multiplizieren, das gibt den neuen Vektor w = (xw, yw, zw)).

Und nun bilden die Punkte (x0, y0, z0), (x1, y1, z1) und (x0+xw, y0+yw, z0+zw) ein rechtwinkliges, gleichschenkliges Dreieck...


Schreib das Zeugs doch mal auf, vielleicht kannst du irgendwo noch was kürzen, auslassen, wegstreichen...


----------



## Illuvatar (16. Aug 2004)

hm, hm ... *grübel, grübel* ...  :### 
das is aber kein Klasse9-Stoff mehr 

Vor allem das mit der Ebene versteh ich nicht so ganz...
Das d in Zeile 9 hat nix mit dem Abstands-d zu tun, oder?
Und wie komme ich von diesem Code von dir zu einem Punkt auf der Ebene?



> Und nun bilden die Punkte (x0, y0, z0), (x1, y1, z1) und (x0+xw, y0+yw, z0+zw) ein rechtwinkliges, gleichschenkliges Dreieck...


Ich will zwar kürzer und 45° aber das schaff ich dann alleine wenn ich soweit bin.

Trotzdem schonmal danke :toll:


----------



## Beni (16. Aug 2004)

Illuvatar hat gesagt.:
			
		

> das is aber kein Klasse9-Stoff mehr


Hm, sollte aber bald kommen :wink:



> Das d in Zeile 9 hat nix mit dem Abstands-d zu tun, oder?


Dreimallverdammt nein, das sind zwei total verschiedene d's. Sorry, das hab ich übersehen.

Das hier :"Jetzt den Vektor v = (xp-x0, yp-y0, zp-z0) auf die Länge d" bezieht sich auf das Abstands-d.



> Und wie komme ich von diesem Code von dir zu einem Punkt auf der Ebene?


In diese Gleichung "a*x + b*y + c*z + d = 0" kann man nicht jeden Punkt (x, y, z) setzen, denn vielleicht gibt "a*x + b*y + c*z + d" _nicht_ 0.
Und es ist so, dass nur Punkte die Gleichung erfüllen, welche in der Ebene liegen.

Du kannst eigentlich per Zufall einen Wert für x und y wählen, und z aus dem Rest berechnen. (_z = ( d + a*x + b*y ) / -c_) (und es kann unglückliche Zahlen geben, ein paar if's sollten noch rein.)



> Ich will zwar kürzer und 45° aber das schaff ich dann alleine wenn ich soweit bin.


Jo, wenn du mal das Dreieck hast, kannst du es immer noch strecken und verzerren.


----------



## Illuvatar (17. Aug 2004)

Ich habe jetzt zwei der vier Punkte (den "von Beni beschriebenen" und den gegenüberliegenden).

Der nächste Punkt soll ja aber sowohl 90° von der Mitte (das 45° mach ich dann ganz am Schluss) als auch 90° von dem ersten Punkt entfernt sein.

Zuerst wollte ich das mit zwei Ebenen machen, von denen ich die eine durch die Spitze und die andere durch die neue Gerade lege, und die ich dann in einem Gleichungssystem gleichsetze (weil der Punkt ja auf beiden Ebenen liegen müsste), aber dann ist mir aufgefallen, dass ich das ja dann nicht so einfach machen kann, wie mit nur einer Ebene, weil ich ja nicht einfach x und y vorgeben und dann davon ausgehen, dass es ein passendes z gibt, kann.

PS: Netter Satz :wink:


----------



## Beni (17. Aug 2004)

Kennst du das "Vektorprodukt"?

Zwei Vektoren a und b miteinander multipliziert geben c:

```
cx = ay*bz - az*by
cy = az*bx - ax*bz
cz = ax*by - ay*bx
```

Das praktische: c ist senkrecht zu a und zu b. Bei den vielen 90° Winkel die du hast, kannst du das sicher noch irgendwo brauchen :wink:


----------



## Illuvatar (17. Aug 2004)

Jo kann ich, das ist es glaub ich, danke 

(das gibt ja sogar schon!)
Edit: Mistlinks


----------

