AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Brauche Denkanstoß für Zeichnung mit Gauß Krügerkoordinaten
Thema durchsuchen
Ansicht
Themen-Optionen

Brauche Denkanstoß für Zeichnung mit Gauß Krügerkoordinaten

Ein Thema von verkouter · begonnen am 27. Feb 2018 · letzter Beitrag vom 2. Apr 2018
Antwort Antwort
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.140 Beiträge
 
Delphi 2009 Professional
 
#1

AW: Brauche Denkanstoß für Zeichnung mit Gauß Krügerkoordinaten

  Alt 1. Mär 2018, 14:58
https://de.wikipedia.org/wiki/Drehmatrix
Man beachte die Formel unter "Diese Matrixmultiplikation ergibt".

Für eine Drehung um einen Punkt, der nicht (0,0) ist, braucht es dann schon Kenntnisse in Affiner Geometrie. Dafür kann man zur Not mein RedeemerAffineGeometry aus RedeemerSVG verwenden:
AffineTransformation(AffineRotation(90, 100, 200), Point(x,y)) <-- Das dreht den Punkt (x,y) an der Position (100,200) um 90°.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
verkouter

Registriert seit: 29. Dez 2004
64 Beiträge
 
Delphi 2010 Architect
 
#2

AW: Brauche Denkanstoß für Zeichnung mit Gauß Krügerkoordinaten

  Alt 2. Mär 2018, 15:43
Habe im Internet was zur Drehmatrix gefunden, was ich auch gleich eingebaut habe.
Verstanden habe ich es aber bis jetzt noch nicht.
Wenn ich meine Zeichnung z.B um 33 Grad drehe, werden die Werte negativ, was das Bild natürlich
extrem nach Links verschiebt. Da bin ich noch auf der Suche, irgendwie mit meinen Max-Werten das auszugleichen.
Angehängte Dateien
Dateityp: zip Gauß Krüger.zip (115,5 KB, 9x aufgerufen)
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#3

AW: Brauche Denkanstoß für Zeichnung mit Gauß Krügerkoordinaten

  Alt 3. Mär 2018, 14:10
Ungetestet:

Delphi-Quellcode:
procedure TForm1.ToolButton2Click(Sender: TObject);
var winkel,x,y,xc,yc :real;
Img : TImage;
i:integer;
begin

winkel:=strtofloat(edit1.Text);

// Mitte berechnen
xc := (max1+min1) / 2;
yc := (max2+min2) / 2;
for i := stringgrid1.RowCount-1 downto 1 do
begin
x:=strtofloat(stringgrid1.Cells[1, i]);
y:=strtofloat(stringgrid1.Cells[2, i]);


winkel := -winkel; // da Y Achse von unten nach oben
// Winkelfunktionen benoetigen Rad anstatt Grad
winkel := DegToRad(winkel);

// in den Ursprung verschieben
x := xc - x;
y := yc - y;

// drehen

xn := x * cos (Winkel) - y * Sin(Winkel);
yn := x * sin (Winkel) + y * Cos(Winkel);

// zurueck verschieben
x := xc + x;
y := yc + y;

stringgrid1.Cells[3,i]:=floattostr(x);
stringgrid1.Cells[4,i]:=floattostr(y);

end;
zeichnen;
end;

Bitte gewoehn dir frueh genug an, den Programmcode einzuruecken.
  Mit Zitat antworten Zitat
verkouter

Registriert seit: 29. Dez 2004
64 Beiträge
 
Delphi 2010 Architect
 
#4

AW: Brauche Denkanstoß für Zeichnung mit Gauß Krügerkoordinaten

  Alt 30. Mär 2018, 16:32
Entschuldigung, das ich mich solange nicht gemeldet habe. Hatte im Moment viel zu tun.

der Fehler lag im ABS vor xn und yn.
Code:
procedure TForm1.ToolButton2Click(Sender: TObject);
var winkel,x,y,xn,yn,xc,yc,u,d :real;
Img : TImage;
i:integer;
begin
winkel:=strtofloat(drehwinkel.Text);
xc:=max1-min1;
yc:=max2-min2;
label1.caption:=floattostr(xc)+'  '+floattostr(yc);
for i := stringgrid1.RowCount-1 downto 1 do
begin
x:=strtofloat(stringgrid1.Cells[1, i]);
y:=strtofloat(stringgrid1.Cells[2, i]);
u:= Winkel * Pi/180 + arctan2(Y-Yc,X-Xc);
d:= sqrt((X-Xc)*(X-Xc) + (Y-Yc)*(Y-Yc));
xn:=((Xc+d*cos(u)));
yn:=((Yc+d*sin(u)));
stringgrid1.Cells[3,i]:=floattostr(xn);
stringgrid1.Cells[4,i]:=floattostr(yn);
end;
zeichnen;
end;
mit diesem Code funktioniert jetzt das Drehen.
Jetzt ist immer noch das Problem, das die Zeichnung teilweise außerhalb des Images liegt.
Schlecht wäre es auch nicht, wenn er die Imagegröße automatisch anpassen würde.
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#5

AW: Brauche Denkanstoß für Zeichnung mit Gauß Krügerkoordinaten

  Alt 2. Apr 2018, 15:27
Ich blick zwar gerade nicht mehr komplett durch, aber:

Delphi-Quellcode:
procedure TForm1.Zeichnen;
var x1,x2,y1,y2,a,i:integer;
begin
image1.Picture.assign(nil);
SortStringGrid(StringGrid1, 3);
min1:=strtofloat(stringgrid1.Cells[3, 1]);
max1:=strtofloat(stringgrid1.Cells[3, stringgrid1.RowCount-1]);
SortStringGrid(StringGrid1, 2);
min2:=strtofloat(stringgrid1.Cells[4, 1]);
max2:=strtofloat(stringgrid1.Cells[4, stringgrid1.RowCount-1]);

label1.Caption:=inttostr(round((max2-min2+5)*20))+' '+inttostr(round((max1-min1+5)*20));

image1.Height:=abs(round((max2-min2)*20) + 40); // geaendert!
image1.Width:=abs(round((max1-min1)*20)) + 40); // geaendert!

// hier auf "+ 40" gaendert, da unten y2/x2 .. bei der 2. Koordinate + 40 addiert wird
// ggf. noch wegen der Textausgabe vergrößern mit z.B. Canvas.GetTextHeight bzw. Canvas.GetTextWidth und die zusätzlichen "+ 25"

for a := stringgrid1.RowCount-1 downto 1 do
begin
x1:=round((strtofloat(stringgrid1.Cells[3, a])-min1)*20);
y1:=round((max2-strtofloat(stringgrid1.Cells[4, a]))*20);
x2:=x1+40;
y2:=y1+40;
image1.canvas.brush.Style:=(bsclear);
image1.canvas.pen.color:=clblack;
image1.canvas.Ellipse(x1,y1,x2,y2);
image1.Canvas.TextOut(x1+25,y1+25,stringgrid1.Cells[0, a]);
end;
end;
  Mit Zitat antworten Zitat
verkouter

Registriert seit: 29. Dez 2004
64 Beiträge
 
Delphi 2010 Architect
 
#6

AW: Brauche Denkanstoß für Zeichnung mit Gauß Krügerkoordinaten

  Alt 2. Apr 2018, 18:23
Hallo brechi,
die 20 ist der Vergrößerungsfaktor, die(+40) ist die Größe der Elippse ,das entspricht dann in der Zeichnung 2m.
Ich habe mal die neuste Version hochgeladen.Aber ich blicke auch nicht mehr durch.Die Anpassung der Bildgröße habe ich erstmal rausgenommen.
Warscheinlich ist das alles so auf diese Koordinate angepasst, daß es bei neuen Koordinaten wieder garnicht passt.
Angehängte Dateien
Dateityp: zip Gauß Krüger.zip (780,4 KB, 3x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:48 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