Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Kartesische Koordinaten in Pixel umrechnen (https://www.delphipraxis.net/161048-kartesische-koordinaten-pixel-umrechnen.html)

Androxin 14. Jun 2011 11:51

Kartesische Koordinaten in Pixel umrechnen
 
Moin.

Ich bin gerade dabei an einem gezeichneten Koordinatensystem mit 4 Quadranten rumzuwerkeln.

Nun brauche ich eine Funktion, die mir aus den berechneten x,y Koordinaten den richtigen Bildpunkt auf meiner Zeichenfläche ermittelt - und umgekehrt.
Das ganze soll dann natürlich zum Wertebereich des Koordinatensystems passen.

Kann mir jemand beim zusammensetzen der Formel für die Umrechnung behilflich sein?

Die Lösung ist, wie immer, ganz einfach. Nur ich komme da gerade irgendwie nicht drauf.

Neben der Kartesischen/Bildkoordinate sollten noch die maximale Bildkoordinate und der Wertebereich in die Funktion eingehen.


Bsp:
Code:
Wertebereich: 5
MaxBildkoordinate: 20

 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20

--------------------------------------------------------------
-5    -4    -3    -2    -1     0     1     2     3     4     5

Pixel2Koordinate(6, 20, 5) ==> -2
Pixel2Koordinate(5, 20, 5) ==> -2,5

Koordinate2Pixel(-4, 20, 5) ==> 2
Koordinate2Pixel(3,5, 20, 5) ==> 17

Ich hoffe, dass mich jemand auf die richtige Bahn bringen kann.

Gruß
Androxin

PS: Nein, ich brauche keinen hübschen Quellcode. Ein Denkanstoß oder eine unhübsche Formel würden mir schon reichen.

gammatester 14. Jun 2011 12:38

AW: Kartesische Koordinaten in Pixel umrechnen
 
Ich nehme an, Du willst zwei lineare Funktionen für die beiden Abbildungen haben, wobei die jeweiligen Koordiatenachsen parallel sind und nur unterschiedliche Skalierungen und Nullpunkte haben.

Für eine Funktion: px_min wird auf Kx_min, px_max wird auf Kx_max abgebildet, also eine Gerade durch zwei Punkte. Allgemein wird dann px auf Kx abgebildet:

px -> Kx = (Kx_max - Kx_min)/(px_max - px_min) * (px - px_min) + Kx_min

Entsprechend für y (eventuell gespiegelt bei Bildschirmkoordinaten). Wenn die Beziehungen nicht so einfach sind (Drehungen, nicht-lineare Verzerrungen usw.), muß man einen anderen Ansatz verwenden.

hboy 14. Jun 2011 12:42

AW: Kartesische Koordinaten in Pixel umrechnen
 
Ich werfe mal Wiki in die Runde: http://de.wikipedia.org/wiki/Affine_Abbildung

Androxin 14. Jun 2011 12:54

AW: Kartesische Koordinaten in Pixel umrechnen
 
Code:
Wertebereich: 5
MaxBildkoordinate: 20

 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20

--------------------------------------------------------------
-5    -4    -3    -2    -1     0     1     2     3     4     5

Pixel2Koordinate(6, 20, 5) ==> -2
Pixel2Koordinate(5, 20, 5) ==> -2,5

Koordinate2Pixel(-4, 20, 5) ==> 2
Koordinate2Pixel(3,5, 20, 5) ==> 17
Hab grad noch eine Runde gegrübelt und bin (px 2 kd)-Variante auf folgende Formel gekommen:

0-(((MaxBildkoordinate/2)-px)*((Wertebereich/(MaxBildkoordinate/2))))

mit Zahlen gefüllt (2. Beispiel):
0-(((20/2)-5)*((5/(20/2)))) = -2,5

Für die andere Richtung muss man es nur vernünftig umstellen, denke ich.

@gammatester: ich muss zugeben, dass ich deine Lösung inhaltlich noch nicht so ganz verstanden habe.
Funktionieren tut sie aber prima: (5 - -5)/(20 - 0) * (5 - 0) + -5 = -2,5

gammatester 14. Jun 2011 13:39

AW: Kartesische Koordinaten in Pixel umrechnen
 
Hier eine einfache Schnellableitung mit Standardvariablen x,y: Gesucht Gerade durch (x1,y1) und (x2,y2). Ansatz Geradengleichung y = m*x + b. Punkte einsetzen ergibt

y1 = m*x1 + b (Gl.1)
y2 = m*x2 + b (Gl.2)

Gleichungen subtrahieren (Gl.2 - Gl.1): y2-y1 = m*(x2-x1) also m = (y2-y1)/(x2-x1). Einsetzen von m in Gl.1 ergibt b = y1-(y2-y1)/(x2-x1)*x1. Also insgesamt:

y = m*x+b
y = (y2-y1)/(x2-x1)*x + y1 - (y2-y1)/(x2-x1)*x1
y = (y2-y1)/(x2-x1)*(x-x1) + y1

Androxin 14. Jun 2011 13:43

AW: Kartesische Koordinaten in Pixel umrechnen
 
Au man.

Das ist ja echt total einfach. Wie ich es ja schon vermutet habe.
Doof, wenn man mal einen Knoten im Gehirn hat und auf einen Lösungsweg festgefahren ist. ;-)

Vielen, vielen Dank für die Erleuchtung!


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:23 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-2025 by Thomas Breitkreuz