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 user profile iconNarses: Topic aus Multimedia / Grafik verschoben am So 29.01.2012 um 19:04
Moderiert von user profile iconNarses: Titel erweitert.


Delete - So 29.01.12 20:00

Moderiert von user profile iconNarses: 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?


Martok - So 29.01.12 20:53

user profile iconBronstein hat folgendes geschrieben Zum zitierten Posting springen:
Die Daten werden in der Datei in bits gespeichert.
:lol:

Es ist also eine Transformationsmatrix - sag das doch ;)
Das sieht mir nach der gleichen Reihenfolge wie in GDI's XFORM [http://msdn.microsoft.com/en-us/library/dd145228%28v=vs.85%29.aspx] aus. Dementsprechend sind die letzten beiden Werte Dx und Dy, was die bedeuten steht ja im Link.


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// Rotiert durch das Zentrum der Grafik
P.eDY := Height div 2// Hier kann auch ein anderer Drehpunkt angegeben werden

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.