Delphi-PRAXiS
Seite 2 von 2     12   

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)

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 01:42 Uhr.
Seite 2 von 2     12   

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