Entwickler-Ecke
Off Topic - Bild drehen (Plotter; Koordinaten-Format)
Bronstein - So 29.01.12 19:21
Titel: Bild drehen (Plotter; Koordinaten-Format)
Hallo,
ich habe eine Software die bei einem Plotter mitgeliefert wurde.
Jetzt habe ich alle Grafiken die ich so benötige angelegt mit 0 Grad.
Wenn ich jetzt die Grafik um 90 Grad drehe ändert sich folgende Zeile in der Datei:
500;0;0;500;3.518;923 => 0 Grad
0;500;-500;0;5.379;938 => 90 Grad
Jetzt würde mich intressieren was bei der 2 Zeile berrechnet wurde.
Die ersten 4 Werte sind eindeutig, doch was hat die Software bei den letzten beiden Werten gemacht?
Hat jemand eine Idee was da für eine Formel dahinter steckt?
Moderiert von Narses: Topic aus Multimedia / Grafik verschoben am So 29.01.2012 um 19:04
Moderiert von Narses: Titel erweitert.
Delete - So 29.01.12 20:00
Moderiert von Narses: Komplett-Zitat des letzten Beitrags entfernt.
Wenn du nicht verraten möchtest, um was für ein Dateiformat es sich hier handelt, wird dir wohl keiner helfen können.
Bronstein - So 29.01.12 20:32
Die Dateiendung heißt *.wmj ist was ganz unbekanntes zumindest für mich.
Die Software nennt sich Weldmark.
Die Daten werden in der Datei in bits gespeichert.
Ich bin jetzt so vorgegangen:
Ich habe ein Symbol mit 0 Grad angelegt und die Datei (wmj) mit einem Editor geöffnet alle Zeilen herauskopiert, danach habe ich das Symbol um 90 Grad gedreht und dann haben sich eben nur die oben genannten Daten geändert. Das ist die Zeile in der Datei die sich geändert hat:
mulmatrix=-500.000000,-0.000044,0.000044,-500.000000,5.379.043213,938.871277
Hoffe das hilft weiter!
Da gibt es doch bestimmt eine mathematische Formel die hier angwendet wurde?
Bronstein - So 29.01.12 21:06
Danke für die Info.
Habe mich mal ein wenig umgeschaut und habe folgendes gefunden:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| var P : XFORM; begin SetGraphicsMode(DC, GM_ADVANCED);
P.eM11 := Cos(DegToRad(Angle)); P.eM22 := Cos(DegToRad(Angle)); P.eM12 := Sin(DegToRad(Angle)); P.eM21 := -Sin(DegToRad(Angle)); P.eDX := Width div 2; P.eDY := Height div 2; SetWorldTransform(DC, P); end; |
Wie kann ich jetzt diese Daten dem P zuweisen und wieder auslesen
mulmatrix=-500.000000,-0.000044,0.000044,-500.000000,5.379.043213,938.871277
Bronstein - Mo 30.01.12 22:05
Hier nochmal ein Beispiel, vllt. hat ja doch noch jemand eine Idee wie ich auf die Werte kommen kann:
0 Grad:
Quelltext
1:
| mulmatrix=499.999969,0.000000,0.000000,500.000000,1407.000000,0.000000 |
wenn ich die Grafik um 90 Grad drehe kommt das raus:
Quelltext
1:
| mulmatrix=-0.000022,500.000000,-499.999969,-0.000022,4135.000000,1050.000000 |
und nochmal um 90:
Quelltext
1:
| mulmatrix=-499.999969,-0.000044,0.000044,-500.000000,5184.000000,-1679.000000 |
Blup - Do 09.02.12 18:41
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32:
| typedef struct _XFORM { FLOAT eM11; FLOAT eM12; FLOAT eM21; FLOAT eM22; FLOAT eDx; FLOAT eDy; } XFORM, *PXFORM; . eM11 = cos(a) * b eM12 = sin(a) * b eM21 = -sin(a) * b eM22 = cos(a) * b . b = 500% a = 0° eM11 = 1 * 500 = 500 eM12 = 0 * 500 = 0 eM21 = 0 * 500 = 0 eM22 = 1 * 500 = 500 . a = 90° eM11 = 0 * 500 = 0 eM12 = 1 * 500 = 500 eM21 = -1 * 500 = -500 eM22 = 0 * 500 = 0 . a = 180° eM11 = -1 * 500 = -500 eM12 = 0 * 500 = 0 eM21 = 0 * 500 = 0 eM22 = -1 * 500 = -500 |
Zu den Werten eDx und eDy:
Die Koordinaten der einzelnen Punkte innerhalb der Grafik werden immer ausgehend von einem Ursprungspunkt gespeichert. Im Prinzip kann der Ursprungspunkt überall sein, im einfachsten Fall (0, 0). Die beiden Werte geben den Abstand des Punktes zum Ursprung an, um den rotiert wird.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!