Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Achsenspiegelung: Punkt an einer Gerade spiegeln? (https://www.delphipraxis.net/53413-achsenspiegelung-punkt-einer-gerade-spiegeln.html)

nano 15. Sep 2005 21:58


Achsenspiegelung: Punkt an einer Gerade spiegeln?
 
Schöne Grüße an alle DP'ler =)

Folgende Situation:
Es wird eine Gerade vorgegeben (nur Anfangs- und Endpunkt)
Daran soll ein Punkt P(x,y) gespiegelt werden... Wie berechnet man das am günstigsten?

ps: es wird anschließend auf TImage32 (graphics32) gezeichnet...

ultrasombrero 15. Sep 2005 22:18

Re: Achsenspiegelung: Punkt an einer Gerade spiegeln?
 
Zitat:

Zitat von nano
Schöne Grüße an alle DP'ler =)
Es wird eine Gerade vorgegeben (nur Anfangs- und Endpunkt)

[ ] Du weißt, was eine Gerade ist.

Eichhoernchen 15. Sep 2005 22:35

Re: Achsenspiegelung: Punkt an einer Gerade spiegeln?
 
dann meinst er eben ne Stecke von A nach B^^

hmm ich vermute mal du wolltest sagen es sind 2 Punkte vorgegeben durch die die Gerade verläuft und dann darfste auch Gerade sagen, naja ich würde einfach den Abstand zwischen P(x|y) und der Gerade berechnen, den Winkel brechnen unter dem eine Gerade, die durch P(x|y) auf die Gerade auftrifft und dann das alles auf der anderen Seite dann einzeichnen. Der Winkel sollte ja 90° sein wenn du den kürzesten Weg von P(x|y) zu Geraden wählst.
Und ich glaube die Steigung der Senkrechten auf einer Geraden war der negative Kehrwert der Steigung der ausgangs Geraden.

glkgereon 15. Sep 2005 23:19

Re: Achsenspiegelung: Punkt an einer Gerade spiegeln?
 
Zitat:

ich würde einfach den Abstand zwischen P(x|y) und der Gerade berechnen
was wiederum nicht ganz trivial ist.

das geht imho nur so (Klasse 11 :) ) dass du die senkrechte der geraden berechnest (m1 = - 1/m2), daraus den schnittpunkt der beiden geraden berechnest (m1*x+b1=m2*x+b2) und dann mit pytagoras (weisst du selber :) ) den abstand berechnest

oder geht es einfacher?

Edit:

Bitte sagt mir ob ich grad völligen schwachfug erzähle, aber ich hab bei ein paar tests auf nem blatt folgendes entdeckt:

y2 = y1 - 2*DeltaY

das funktioniert zb bei folgendenden Punkten:
A(1|1), B(10|4), P1(7|6), P2(8|0) (y2 = 6 - 2 * 3 = 0)
A(-1|-1), B(5|2), P1(2|4), P2(5|-2) (y2 = 4 - 2 * 3 = -2)

es kommt mir irgendwie ziemlich unwahrscheinlich vor das das wirklich stimmt, kann es sein das ich einfach zufällig zwei passende Beispiele gefunden hab?

Also A und B sind die Punkte wo die Gerade durchläuft, P1 der Punkt der gespiegelt werden soll, P2 der gespiegelte Punkt.
DeltaY ist halt xA - xB (evtl. |xA - xB| ?)

ich geh jetzt schlafen, bin auch relativ müde, von daher bin ich mir nicht sicher ob es doch nur zufall ist :)

n0b0dy 16. Sep 2005 00:38

Re: Achsenspiegelung: Punkt an einer Gerade spiegeln?
 
also ich war in mathe eigentlcih bis zum abi im Mathe-LK immer sehr gut *angeb* und könnte bestimmt helfen :mrgreen: ,
aber ich verstehe net mal was gemacht werden soll. die frage is sehr seltsam gestellt... :?

und die lösung kommt mir etwas suspekt vor, trotz das ich nicht weiß was gemacht werden soll ;)


[EDIT]
vllt hab ich nun doch gerafft was gemacht werden soll^^

also folgende überlegungen sind notwendig:
1) Steigung der Geraden bestimmen
2) Steigung der Orthogonalen dazu bestimmen
3) Geraden zum Schnitt bringen
4) länge bis zum schnittpunkt bestimmen
5) punkt auf anderer Seite im gleichen abstand auftragen
6) Fertig
[/EDIT]

glkgereon 16. Sep 2005 07:14

Re: Achsenspiegelung: Punkt an einer Gerade spiegeln?
 
also ich habe meinen Ansatz nochmal durchdacht, und der muss schwachsinn sein.

weil man kann P1 ja einfach entlang der Geraden durch P1|P2 nach "oben" verschieben. dann kann es so nicht mehr passen.

runger 16. Sep 2005 08:03

Re: Achsenspiegelung: Punkt an einer Gerade spiegeln?
 
Hallo,

1.) Gerade berechnen--> Zweipunkteform
oder f(x)=mx+b beide Geradenpunkte einesetzen --> m und b berechnen.

2.) m negativ reziprok machen--> kehrwert * (-1)
Diese Steigung nenne ich M.

3.) in g(x)=Mx+B einsetzen

4.) Den Punkt durch den die senkrechte gehen soll in diese gleichung einsetzen.

5.) B berechen.

6.) B in Gleichung einsetzen

7.) Schnittpunkt beider Geraden berechnen.
mx+b=Mx+B löse auf dann kriegst du x0 einsetzen dann kriegst du y0

8.) Abstand berechnen (Formelsammlung)

9.) Diesen Abstand in die allgemeine Abstandsformel einsetzen
x1 und y1 werden durch durch deinen Schnittpunkt ersetzt
y2 wir durch Mx+B ersetzt

10.) Löse diese Gleichung auf, dann bekommst du einen X Wert
setze diesen in deine Geradengleichung ein und du bekommst einen y Wert
fertig.

Es gibt noch einen anderen Weg über die hessesche Normalform. ist aber komplizierter und hab ich im Moment nicht im Kopf

Eine etwas zynische Bemerkung: Hab ich dir jetzt deine Hausaufgaben gemacht?
Rainer

n0b0dy 16. Sep 2005 09:20

Re: Achsenspiegelung: Punkt an einer Gerade spiegeln?
 
@runger.
über die Vektorielle Analytische Geometrie wäre das auch einfacher gewesen. ist halt geschmackssache. aber ich glaube das war auch nicht gefragt ^^

runger 16. Sep 2005 12:03

Re: Achsenspiegelung: Punkt an einer Gerade spiegeln?
 
Hallo,

glaubst du, dass der das kann? Ich nicht.
Mein Beitrag ist extra banal angelegt um Ihn nicht zu verwirren.

Aber nochwas:
Ich hasse es auf den Tod, wenn sich hier jemand seine Hausaufgaben lösen lässt.
Hier gibts heute bestimmt schon 10 Beiträge in diese Richtung.

Rainer
Logisch ist ja auch wieder Schule!

n0b0dy 16. Sep 2005 12:05

Re: Achsenspiegelung: Punkt an einer Gerade spiegeln?
 
jo glaube es auch nciht, deshalb habe ichs ja nicht erklärt ;)

und das mit den HA haste recht :D

tigerman33 16. Sep 2005 14:32

Re: Achsenspiegelung: Punkt an einer Gerade spiegeln?
 
Wenn's euch so aufregt, warum antwortet ihr dann? Wenn ich einen Post seh, der mich aufregt oder bei dem ich so meine Zweifel an der Legitimation hab (Hausaufgaben, Sachen die eindeutig nach Virus etc klingen) dann antworte ich halt nicht.

Eichhoernchen 16. Sep 2005 19:50

Re: Achsenspiegelung: Punkt an einer Gerade spiegeln?
 
Auch wenn es Hausaufgaben sind, ne Anregung soll er ruhig haben, wir Rechnen ihm ja immerhin nix aus oder Posten den Code den er gern hätte, wir liefern ihm ja nur Denkanstöße, ok der ein oder andere ist nen Tritt aber das macht ja nix^^

Also mir ist es egal wofür er das braucht, ich geb gern nen Denkanstoß, mehr soll aber auch reichen!

BlackJack 16. Sep 2005 20:42

Re: Achsenspiegelung: Punkt an einer Gerade spiegeln?
 
Code:
d = |(x1 - x0)*n|
mit
x1: zu überprüfender Punkt
x0: Punkt auf der Geraden
n: normierte Normale der Geraden.
d: Abstand von Gerade zu x0

sagt zumindest meine Formelsammlung.

edit: und dann noch
Code:
x1' = x1 - 2*d*n
mit
x1': an der Geraden gespiegeltes x1

nano 17. Sep 2005 00:10

Re: Achsenspiegelung: Punkt an einer Gerade spiegeln?
 
Zitat:

[ ] Du weißt, was eine Gerade ist.
Alles reine Definitionssache. Tut mir herzlich leid, wenn ich meine Schrift zu ungenau verfasst habe. Glücklicherweise verstand die Mehrheit, was ich damit meinte. Danke übrigens für den sehr hilfreichen Beitrag ;)

Zitat:

Eine etwas zynische Bemerkung: Hab ich dir jetzt deine Hausaufgaben gemacht?
Blödsinn =) Um etwas gleich mal klar zu stellen: Ich gehe jetzt in die 13. Klasse eines Gymnasius mit Mathe als Leistungskurs, wo ich in beiden Vorsemestern jeweils 27 Punkte erreicht habe. Die Berechnungen sollten mir daher nicht so schwer fallen, wie von euch vermutet. Die analytische Geometrie war übrigens Stoff des ersten Semesters.

Zitat:

...Posten den Code den er gern hätte, ..
keine voreiligen Schlüsse, bitte ;) Ehrlich gesagt, nach solch unbegründeten Vorwürfen wird es mir ziemlich bald schwer fallen, hier überhaupt noch Fragen zu stellen =))


Ich gebe ja zu, die Frage war nicht korrekt gestellt:
1) Gibt es vorgefertigte Prozeduren/Bibliotheken zur Achsen- und (möglichst) Punktspiegelung?
2) Gehen bei der Berechnung von Schnittpunkt nicht ein Paar Werte verloren, sodass zwei unterschiedliche Punkte auch einen gemeinsamen Spiegelpunkt fallen würden?
3) Gibt es vielleicht rein graphische Lösungen (Drehen des Bitmaps?)?


Vielen Dank für eure Beiträge!

runger 17. Sep 2005 15:21

Re: Achsenspiegelung: Punkt an einer Gerade spiegeln?
 
Der getroffene Hund bellt!

Rainer

nano 17. Sep 2005 19:04

Re: Achsenspiegelung: Punkt an einer Gerade spiegeln?
 
sehr informativ, danke ;)


Für alle, die noch an der Lösung interessiert sind:

Delphi-Quellcode:
function TMain.PunktAnGeradeSpiegeln(A, B, P: TPoint): TPoint;
var                                                                
xS,yS: Real;
begin
  xS:= - P.X + 2*(((A.X-B.X)*(A.X-B.X)*P.X + (A.Y-B.Y)*(A.Y-B.Y)*A.X + (A.X-B.X)*(A.Y-B.Y)*P.Y - (A.X-B.X)*(A.Y-B.Y)*A.Y) / ((A.Y-B.Y)*(A.Y-B.Y) + (A.X-B.X)*(A.X-B.X)));
  yS:= - P.Y + 2*(((A.X-B.X)*(A.Y-B.Y)*P.X - (A.X-B.X)*(A.Y-B.Y)*A.X + (A.Y-B.Y)*(A.Y-B.Y)*P.Y + (A.X-B.X)*(A.X-B.X)*A.Y) / ((A.Y-B.Y)*(A.Y-B.Y) + (A.X-B.X)*(A.X-B.X)));
  Result:= Point(Round(xS),Round(yS));
end;
A und B legen die Gerade fest. P ist derjenige Punkt, der an der Gerade [AB] gespiegelt werden soll. Die Funktion gibt den Spiegelpunkt zurück. Bei beiden Koordinaten wird mit exakten Werten gerechnet, anschließend werden sie gerundet.

Ansatz:
1) Geradengleichung
2) Normalengleichung
3) Gleichsetzen
4) Nach X bzw. Y auflösen


Funktion erfolgreich getestet, danke für die Aufmerksamkeit ;)

nano 17. Sep 2005 19:10

Re: Achsenspiegelung: Punkt an einer Gerade spiegeln?
 
Zitat:

Zitat von runger
Hallo,

1.) Gerade berechnen--> Zweipunkteform
oder f(x)=mx+b beide Geradenpunkte einesetzen --> m und b berechnen.

2.) m negativ reziprok machen--> kehrwert * (-1)
Diese Steigung nenne ich M.

3.) in g(x)=Mx+B einsetzen

4.) Den Punkt durch den die senkrechte gehen soll in diese gleichung einsetzen.

5.) B berechen.

6.) B in Gleichung einsetzen

7.) Schnittpunkt beider Geraden berechnen.
mx+b=Mx+B löse auf dann kriegst du x0 einsetzen dann kriegst du y0

8.) Abstand berechnen (Formelsammlung)

9.) Diesen Abstand in die allgemeine Abstandsformel einsetzen
x1 und y1 werden durch durch deinen Schnittpunkt ersetzt
y2 wir durch Mx+B ersetzt

10.) Löse diese Gleichung auf, dann bekommst du einen X Wert
setze diesen in deine Geradengleichung ein und du bekommst einen y Wert
fertig.

zu umständlich

so geht die eine oder andere Nachkommastelle verloren. Bequemer wär die Aufstellung einer Formel, die direkt zum Ergebnis führt. Spart man Zeit und Ressis..


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz