Autor Beitrag
Bronstein
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 578
Erhaltene Danke: 1

WIN XP
Delphi 6 / Delphi 2006 / Delphi XE
BeitragVerfasst: So 29.01.12 19:21 
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.

_________________
Es gibt keine dummen Fragen nur dumme Antworten!!!
Perlsau
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 578
Erhaltene Danke: 1

WIN XP
Delphi 6 / Delphi 2006 / Delphi XE
BeitragVerfasst: 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?

_________________
Es gibt keine dummen Fragen nur dumme Antworten!!!
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: 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 aus. Dementsprechend sind die letzten beiden Werte Dx und Dy, was die bedeuten steht ja im Link.

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Bronstein Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 578
Erhaltene Danke: 1

WIN XP
Delphi 6 / Delphi 2006 / Delphi XE
BeitragVerfasst: So 29.01.12 21:06 
Danke für die Info.

Habe mich mal ein wenig umgeschaut und habe folgendes gefunden:
ausblenden 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

_________________
Es gibt keine dummen Fragen nur dumme Antworten!!!
Bronstein Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 578
Erhaltene Danke: 1

WIN XP
Delphi 6 / Delphi 2006 / Delphi XE
BeitragVerfasst: 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:
ausblenden 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:
ausblenden Quelltext
1:
mulmatrix=-0.000022,500.000000,-499.999969,-0.000022,4135.000000,1050.000000					


und nochmal um 90:
ausblenden Quelltext
1:
mulmatrix=-499.999969,-0.000044,0.000044,-500.000000,5184.000000,-1679.000000					

_________________
Es gibt keine dummen Fragen nur dumme Antworten!!!
Blup
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 173
Erhaltene Danke: 43



BeitragVerfasst: Do 09.02.12 18:41 
ausblenden volle Höhe 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.