ich habe folgendes Problem :
Ich bin möchte einen Algorithmus (unter C/C++)
schreiben, der eine Gerade (gegeben durch 2 Punke) um einen Bestimmen Faktor N Parallelverschiebt.
Der Funktionsaufruf könnte etwa so aussehen :
verschiebe(oldX, oldY, &newX, &newY, N) ;
oldX und oldY sind dabei die Koordianten der Original-Geraden, in newX und nexY (als Referenz Übergeben) sollten dann die Koordinaten der Parallelverschobenen Geraden stehen, und N ist der Faktor, um den verschoben werden soll.
Meine Frage : Wie gehe ich da am besten vor
Sollte ich z.b zuerst die Geradengleichung der Übergebenen riginalpunkte berechnen ?
Neugierige Grüsse
DanDanger
mezzo mix
25.05.2003, 18:36
hallo,
da tuen sich bei mir doch einige fragen auf.
du willst eine gerade um einen faktor verschieben. wie soll das denn gehen? oder meinst du sowas wie eine verschiebung um zb. n=5 punkte rechtwinklig zur gerade?
dann ist es besser du rechnest ersmal mit den punkten, und erstellst dann erst die geradengleichung.
zum funktionsaufruf:
verschiebe(oldX, oldY, &newX, &newY, N) ;
wenn du newx und newy schon als referenz übergibst warum dann noch oldx und oldy by value übergeben? einfach weglassen, und nur mit x und y arbeiten.
schreib einfach noch mal wie diese verschiebung genau passieren soll, dann helf' ich dir gern.
CU
nobody
25.05.2003, 22:01
Hi,
erstmal : Danke für die schnelle Antwort!
(...) oder meinst du sowas wie eine verschiebung um zb. n=5 punkte
rechtwinklig zur gerade?
Genau das meine ich ;)
Das Problem ist halt, das die Gerade ja durch beliebige 2 Punkte gehen kann. Ich weiss also nicht, wie ich die Punkte verschieben muss, damit die neue gerade rechtwinkelig (also parallel)
zu meiner Ursprungsgeraden ist.....
Neugierige Grüsse
DanDanger
mezzo mix
26.05.2003, 01:17
hallo,
ich bin mir zwar immer noch nicht sicher, ob du wirklich rechtwinklig zur gerade verschieben willst. bei so einer operation kommen fast immer kommazahlen raus. vielleicht meinst du auch eine verschiebung parallel zur y oder x achse um n längeneinheiten?
aber ich bin aber mal von ersterem ausgegangen.
du mußt übrigens beide punkte an die funktion übergeben, sonst geht's nicht.
/* um die zwei punkte die eine gerade bestimmen zu verschieben sucht man sich
einen vektor, der senkrecht auf der geraden steht. */
/* dazu zieht man jeweils die x und y werte voneinander ab, tauscht den x und
y wert des ergebnisses und tauscht das vorzeichen eines der beiden werte. */
v_y = *x1 - *x2;
v_x = -(*y1 - *y2);
/* jetzt brauchen wir noch die länge dieses vektors (math.h includieren). */
laenge = sqrt((pow(v_y,2) + pow(v_x,2)));
/* und jetzt gehen wir koordinatenweise zu den einzelnen punten, um anschließende n längeneinheiten in richtung des senkrechten vektors zu gehen (deshalb n/laenge * v_x, da der vektor ja nicht eine längeneinheit lang sein muß). und schon haben wir die neuen punkte. */