AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Gradmaß zu X,Y Koordinaten

Ein Thema von axellang · begonnen am 17. Sep 2007 · letzter Beitrag vom 19. Sep 2007
Antwort Antwort
axellang

Registriert seit: 3. Mai 2003
Ort: München
138 Beiträge
 
Delphi XE2 Enterprise
 
#1

Gradmaß zu X,Y Koordinaten

  Alt 17. Sep 2007, 22:42
Hallo Leute,

nachdem ich heute, wie es auch bisher in diesem Forum war, bestens bedient worden bin codevervollstaendigung, gleich noch ein Problemchen. Zurzeit arbeite ich an einem Projekt zur Auswertung von Schussergebnissen. Kurz zusammengefasst; Mietgliederverwaltung, Disziplinen, Mannschaften, Teilnehmer, Schießarten, Schussbilddiagramme, Turniere, Preisgelder usw.
alles in allem, alles was so eine DB basierte Anwendung so hergibt.

Das Ganze ist eine Netzwerkfähige Lösung, basierend auf dem MSSQL 2005 Express bzw. MSSQL Server >7. Das ist zwar Arbeit, aber da kenne ich mich aus (DB) und da bin ich zuhause. Nun bin ich auf ein Problem gestoßen wo ich nicht so genau weiß, wie es zu therapieren ist.

Um was geht es:

Bei der Schußauswertung gibt der Schütze seine Scheiben ab die dann von einer sog. Auswertungsmaschine ausgewertet werden. Dazu wird Scheibe für Scheibe in die Auswertungsmaschine gelegt, die mittels Scanner die Treffer auswertet. Die Auswertemaschine ist per RS232 Schnittstelle mit dem Rechner verbunden und sendet die ausgelesenen Ergebnisse an die Anwendung die es anfordert. In diesem speziellen Fall sendet die Auswertemaschine die Ergebnisse in folgender Formatierung:

String + CheckSumme + CR:

Das sieht dann so aus:

Sch=[Schußnr.];[Ringwert];[Teilerwert*];[Winkel*];[Flag*];[CheckSum*]

(Original Datenstring von der Auswertemaschine pro Schuß)

SCH=3;10.0;358.6;101.5;G#


* Teilerwert: Je kleiner der Teilerwert umso näher ist man der Mitte, ergo dem Zehner.
* Winkel: in Grad; Oben ist 0° rechts 90° usw.
* Flag: G = Gültig; U = Ungültig; K = Schuß muss kontrolliert werden.
* CheckSum <32, wird 32 dazuaddiert (XOR-Verknüpfung aller Zeichen).

Nachdem alle Scheiben (Serie) ausgewertet worden sind, soll ein Schußbild der Serie angezeigt werden (meist 40 Schuß auf 20 Scheiben, ergo 2 Schuß pro Scheibe). Das bedeutet: Alle abgegebenen Schüsse (Serie) sollen auf einer Scheibe angezeigt werden damit sich der Schütze einen Überblick über seine Serie verschaffen kann. Außerdem soll nach jeder Auswertung, also pro Scheibe, die Treffer auf der Scheibe im Programm angezeigt werden.

Mein Problem ist:

Es gibt Auswertemaschinen die senden keinen Winkel in Grad, sondern gleich die richtigen Koordinaten zu, z.B. X:120, Y: 230 aber diese eine sendet das im Gradmaß. Wie rechne ich das um, um die X, Y Koordinaten zu bekommen, um den Schuß, Schüsse auf der Scheibe darzustellen.

Im Forum habe ich einen Post gefunden Gradmaß zu Mauskoordinaten, in dem X, Y zu Gradmaß umgerechnet wird. Geil dachte ich, dann muss ich nur noch andersrum rechen, doch Pustekuchen, das funktioniert nicht. Also packte ich meine verstaubten Schulbücher aus und zog mir Trigonmetrische Funktionen wieder rein, aber irgendwie machte es nicht: Heureka. Deshalb habe ich eine kleine Anwendung geschrieben die das Problem verdeutlichen soll.

Zur Anwendung:

Nach dem Start wird eine Zielscheibe gezeichnet und ein Treffer wird angezeigt. Dieser Treffer wird auf der original Scheibe, von der Auswertemaschine, mit einem Winkel (Gradmaß) von 101.5 angegeben. Der oben angegebene Rückgabestring von der Auswertemaschine stimmt mit der Trefferanzeige in meiner Anwendung ± 1mm überein.

Wie könnt Ihr mir helfen:

Wie muss ich rechnen, damit ich den Treffr den ich als Gradmaß von der Auswertemaschine erhalte, genau dort in meiner Anwendung platziere, wie dieser auf der Originalscheibe zu sehen ist?


Alexander
Angehängte Dateien
Dateityp: rar target_v1.0_111.rar (200,5 KB, 5x aufgerufen)
Alexander Lang
  Mit Zitat antworten Zitat
ken_jones

Registriert seit: 16. Mai 2005
Ort: Luzern
154 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

Re: Gradmaß zu X,Y Koordinaten

  Alt 17. Sep 2007, 23:48
Salut Alexander,

Tja, Trigonometrie ist bei mir auch ne Weile her, aber so mal ins blaue geschossen sag ich jetzt mal:

Ich kenne mich mit diesen Scheiben überhaupt nicht aus, aber du sagst, je kleiner der Teilerwert ist, desto Näher ist man dem Zehner. Also nehme ich mal an: 0 = Volltreffer, 10'000 = Niete.
Die Grafik für die Scheibe ist 500 x 500 Pixel gross (Width x Height), die Mitte der Scheibe ist 0,0 (also nicht oben Links), dann brauchen wir dazu einen Offset: XOfs = Width div 2; YOfs = Height div 2

Dann würde ich mal Tippen die Winkel und Teilermasse folgendermassen in Koordinaten umzurechnen:

X := XOfs + (Width / 10'000 * Teiler * Sin(Winkel))
Y := YOfs - (Height / 10'000 * Teiler * Cos(Winkel))

Beispiel:

Winkel = 101.5 Grad
Sin(Winkel) = 0.9799
Cos(Winkel) = -0.1993
Teiler = 358

X := 250 + (250 / 10'000 * 358 * 0.9799) = 258
Y := 250 - (250 / 10'000 * 358 * -0.1993) = 252

Der Treffer ist somit leicht rechts unten auf der Scheibe.

Vielleicht lieg ich völlig im Wald, ist jetzt alles rasch im Kopf entstanden.
  Mit Zitat antworten Zitat
axelf98

Registriert seit: 27. Aug 2003
Ort: Ennepetal
440 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Gradmaß zu X,Y Koordinaten

  Alt 18. Sep 2007, 00:32
Zu Bedenken: Der Rechner rechnet intern mit Bogenmaß für das gilt:

Code:
2*pi = 360 Grad

Bogenmaß b
Winkel w

b = w*pi/180
w = b*180/pi
  Mit Zitat antworten Zitat
axellang

Registriert seit: 3. Mai 2003
Ort: München
138 Beiträge
 
Delphi XE2 Enterprise
 
#4

Re: Gradmaß zu X,Y Koordinaten

  Alt 18. Sep 2007, 01:19
Hallo ken_jones,

erstmal danke für Deine Antwort doch leider stimmt es nicht bzw. ich komme nicht auf den
richtigen Treffer(?)

Auf die Größe der Scheibe kommt es nicht an. Ich habe hier das
original Programm zur Auswertung der Trefferzahlen (Übrigens
mit D2 oder D3 geschrieben. Soll erneuert werden). Dort kann man z.B,
einen Zoom einstellen da werden nur die Ringe 5-10 dargestellt.
Also nicht das Img gezoomt sondern mann kann am Anfang der Auswertung
einstellen; Nur im Zoom anzeigen. Dann werden nur die Ringe 5-10 dargestellt.

Es geht darum das oben 0° sind, die rechte Ringbegrenzung ist 90° unten 180° und oben 360° (Laut Schnittstellenbeschreibung Auswertemaschine).

Deshalb, so denke ich, ist es egal wie groß die Scheibe ist, es geht um die Gradangabe.
In meiner Anwendung, die ich zum testen bereitgestellt habe, ist ein Edit-Feld in dem
man die Gradzahl eintragen kann und über den btn Schuß kann man überprüfen ob der Schuß
an der richtigen stelle ist. Leider ist hinter dem btn kein Ereignis hinterlegt weil ich
nicht weiß wie der,die,das auszusehen hat.

Hier eine Serie mit 10 Schuß wie es die Auswertemaschine sendet:


SCH=1;6.0;3373.0;300.7;G+
SCH=2;7.0;3112.0;58.3;G6
SCH=3;10.0;358.5;101.0;G%
SCH=4;8.0;1766.0;247.0;G'
SCH=5;8.0;1808.0;220.9;G)
SCH=6;7.0;2486.0;333.4;G"
SCH=7;7.0;3031.0;283.5;G!
SCH=8;7.0;2896.0;251.4;G$
SCH=9;8.0;1726.0;186.6;G&
SCH=10;7.0;2415.0;158.4;G0


Und dass dazugehörige Screenshot aus dem Auswerte Programm im Anhang.

Axel
Miniaturansicht angehängter Grafiken
scheibe_org_196.jpg  
Alexander Lang
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Gradmaß zu X,Y Koordinaten

  Alt 18. Sep 2007, 06:46
hallo,

du musst in deine berechnung, wenn du die exakten koordinaten haben willst, die größe der scheibe einstellen. bzw. was die auswertungsmaschine als grenzen für die entfernung nimmt.

Das sollte auch in der Dokumentation der Auswertungsmaschine stehen.

heißt vielleicht "10.0" einfach 1er und "1.0" 10er? Wär zwar bescheuert...
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#6

Re: Gradmaß zu X,Y Koordinaten

  Alt 18. Sep 2007, 08:55
Dein Problem ist doch eigentlich die Umrechnung von kartesischen in Polarkoordinaten, oder? Dann sollte dir Wikipedia: Polarkoordinaten helfen.

Aber eigentlich sollte der Code von ken_jones ganz gut sein. Und wenn du 0° oben hast, musst du eben
x=x_mitte+radius*(WinkelInRad-pi/4) rechnen.

Ich hab grad kein Windows, könntest du vielleicht mal die Ausgabe von seinem Code als Screenshot hier reinstellen?
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
mbamler

Registriert seit: 19. Mai 2005
Ort: Hamburg
118 Beiträge
 
Delphi 7 Architect
 
#7

Re: Gradmaß zu X,Y Koordinaten

  Alt 18. Sep 2007, 09:47
Arcus-Tangens (ArcTan) sollte das Mittel der Wahl sein ...

Gruß
Matthias
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#8

Re: Gradmaß zu X,Y Koordinaten

  Alt 18. Sep 2007, 10:21
Nein. Er will doch von der polaren Darstellung zur kartesischen und nicht umgekehrt.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
ken_jones

Registriert seit: 16. Mai 2005
Ort: Luzern
154 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

Re: Gradmaß zu X,Y Koordinaten

  Alt 18. Sep 2007, 11:31
So wie ich das sehe, brauchst du leider schon die Scheibengrösse in Pixel. Mit Winkel und Radius bestimmst du dann den Zielpunkt in der Grafik.
Und im weitren war ich mit meiner Schätzung von 10'000 als maximaler Teilerwert etwas daneben, es scheint bei dieser Scheibe wohl in die Richtung von 16'000 zu gehen.
Ich hab deinen Source mal runtergeladen und folgendermassen ergänzt:

Auf der Form ein edtTeiler (TEdit) hinzugefügt, um den Teilerwert anzugeben (hatte keine Lust den String "SCH=1;6.0;3373.0;300.7;G+" auseinanderzupriemeln).
Jetzt musst du halt auf der Form dann rasch Winkel und Teiler eingeben.

Die Schussprozedur habe ich folgendermassen ergänzt: (Danke an axelf98, Bogenmass hatte ich ganz vergessen!)

Delphi-Quellcode:
procedure TForm1.btnShootNowClick(Sender: TObject);
var
  x, y : Integer;
  w : Real;
begin
  w := StrToFloat(edtDegree.Text)*pi/180;

  x := Trunc( XCenter + (Image1.Width / 16000 * StrToFloat(edtTeiler.Text) * Sin(w)));
  y := Trunc( YCenter - (Image1.Height / 16000 * StrToFloat(edtTeiler.Text) * Cos(w)));

  DrawShot(Image1.Canvas,x,y,8,clGreen);

end;
Guck mal wie das in etwa stimmt.
  Mit Zitat antworten Zitat
axellang

Registriert seit: 3. Mai 2003
Ort: München
138 Beiträge
 
Delphi XE2 Enterprise
 
#10

Re: Gradmaß zu X,Y Koordinaten

  Alt 19. Sep 2007, 09:38
Hallo ken_jones,

ja das war es. Ich habe es mit einigen Trefferergebnissen ausprobiert und die Markierung stimmt mit der
auf der org. Scheibe überein. Leider war ich gestern den ganzen Tag über außer Haus (Schulung beim Kunden) so das ich es nicht mit der Auswertemaschine testen konnte was ich heute im laufe des Tages nachholen werde. Witzig ist, das ich hier bei mir, auch ein TEdit mit der Bezeichnung edtTeiler angelegt habe und mit verschiedenen Teilerwerten rumhantierte.

Dabei ist mir folgendes aufgefallen: Das der max. mögliche Teiler im alten Auswerteprogramm bei 8875,0 liegt (siehe Bild 1) und wenn man vollkommen daneben schießt, also dem äußersten Rand der Scheibe, die Treffer in einem Halbkreis am Rand der Scheibe platziert werden (siehe Bild 2). Was mich vermuten lässt, das die keine Kreise auf einem TImage zeichnen so wie ich, sondern TShape := Circle verwenden um so die Scheibe zu erstellen.

Es werden so viele Shape's aufeinander gelegt um so die Zielscheibe zu erhalten. Muss das noch testen.
Doch eines ist sicher, Dein Code ist des Rätsels Lösung und mein Dank dafür . Auch an axelf98. Ja klar intern wird im Bogenmaß gerechnet.

Zitat:
@DGL-Luke,
Das sollte auch in der Dokumentation der Auswertungsmaschine stehen.
Das sollte auch so sein, aber es gibt keine Dokumentation. Es gibt eine RS232 Schnittstellenbeschreibung die so gut ist das ich nur mithilfe von einem Serial Port Monitor herausgefunden habe wie die Auswertemaschine mit dem hauseigenem Programm kommuniziert. Auch mein Anruf beim Hersteller brachte nicht viel. Auf die versprochene Mail mit weiteren Beschreibungen warte ich noch bis heute. Aber das war mir schon klar. Die wollen schließlich ihre eigene Software verkaufen.


Ich werde das in den nächsten Tagen mit den Shape's testen und mich wieder melden.

Bis dahin einen herzlichen Dank

Alexander Lang
________________________
Miniaturansicht angehängter Grafiken
bild_2_158.jpg   bild_1_890.jpg  
Alexander Lang
  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 13:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz