Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Mauskoordinaten (X,Y) in Grad umrechnen? (https://www.delphipraxis.net/79424-mauskoordinaten-x-y-grad-umrechnen.html)

smart 22. Okt 2006 12:34


Mauskoordinaten (X,Y) in Grad umrechnen?
 
Hallo Mathekünstler!

Wie kann ich die Mauskoordinaten (X,Y) in Grad umrechnen? Ich habe eine Form. Auf dieser ist ein TImage, das sich immer in Richtung der Maus drehen soll.

Gruß
Heike

hanselmansel 22. Okt 2006 12:41

Re: Mauskoordinaten (X,Y) in Grad umrechnen?
 
Ok, du hast sowohl die Mauskoordinaten als auch die Koordinaten des Images gegeben.
Mit
Delphi-Quellcode:
Abs(x1 - x2);
Abs(y1 - y2);
kommst du an die Katheten des Steigungsdreiecks. Wenn ich mich nicht täusche ist tan(alpha) = Gegenkathete / Ankathete.
Der Winkel zwischen der Verbindungsgerade Image-Maus und der Horizontalen müsste demnach
Delphi-Quellcode:
alpha := arctan(Gegenkathete/Ankathete)
sein.

lG,

hanselmansel

€dit: Irgendwie ist meine antwort zu einfach, habe ich in deiner frage was übersehen ???

Khabarakh 22. Okt 2006 12:48

Re: Mauskoordinaten (X,Y) in Grad umrechnen?
 
Oder einfach Delphi-Referenz durchsuchenArctan2 ;) . Wobei einem auch damit das Prüfen von X auf 0 (-> Ergebnis Pi/2 bzw. -Pi/2) nicht erspart bleibt.

smart 22. Okt 2006 13:03

Re: Mauskoordinaten (X,Y) in Grad umrechnen?
 
Zitat:

Zitat von Khabarakh
Oder einfach Delphi-Referenz durchsuchenArctan2 ;) . Wobei einem auch damit das Prüfen von X auf 0 (-> Ergebnis Pi/2 bzw. -Pi/2) nicht erspart bleibt.

Vielen Dank, aber da bekomme ich immer ein
Delphi-Quellcode:
[Fehler] Unit1.pas(29): Undefinierter Bezeichner: 'ArcTan2'
Gruß
Heike

mkinzler 22. Okt 2006 13:07

Re: Mauskoordinaten (X,Y) in Grad umrechnen?
 
Hast du Math eingebunden?

smart 22. Okt 2006 13:11

Re: Mauskoordinaten (X,Y) in Grad umrechnen?
 
Zitat:

Zitat von mkinzler
Hast du Math eingebunden?

Sorry hatte ich vergessen ;-) Aber ......
dann bekommen ich: [Fehler] Unit1.pas(29): Inkompatible Typen: 'Integer' und 'Extended'

Gruß
Heike

Neutral General 22. Okt 2006 13:12

Re: Mauskoordinaten (X,Y) in Grad umrechnen?
 
Was übergibst du denn als Parameter ? :gruebel:

smart 22. Okt 2006 13:13

Re: Mauskoordinaten (X,Y) in Grad umrechnen?
 
Zitat:

Zitat von Neutral General
Was übergibst du denn als Parameter ? :gruebel:

Hallo Michael!

Ich übergebe die Mauskoordinaten (X,Y).

Gruß
Heike

Neutral General 22. Okt 2006 13:16

Re: Mauskoordinaten (X,Y) in Grad umrechnen?
 
Zeig mal bitte Quelltext... Du übergibst da irgendwo nen String statt ner Zahl...
Ansonsten würde der Fehler nicht kommen :|

Gruß
Neutral General

smart 22. Okt 2006 13:21

Re: Mauskoordinaten (X,Y) in Grad umrechnen?
 
Zitat:

Zitat von Neutral General
Zeig mal bitte Quelltext... Du übergibst da irgendwo nen String statt ner Zahl...
Ansonsten würde der Fehler nicht kommen :|Neutral General

Sorry, hatte mich bei der Fehlermeldung verschrieben (Inkompatible Typen: 'Integer' und 'Extended').

Hier ist der Code:
Delphi-Quellcode:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
Var
A: Integer;
begin
A := ArcTan2(Y, X);
Caption := IntToStr(A);
end;
Gruß
Heike

Namenloser 22. Okt 2006 13:28

Re: Mauskoordinaten (X,Y) in Grad umrechnen?
 
Delphi-Quellcode:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
Var
A: double; // double statt integer -> Gleitkommazahl
begin
A := ArcTan2(Y, X);
Caption := FloatToStr(A*180/pi);
{ Wenn du keine Kommazahlen willst:
Caption := IntToStr(trunc(A*180/pi));
}
end;
Für Gleitkommazahlen musst du FloattoStr oder FloatToStrF verwenden.
Mit *pi/180 wird die Zahl ins Gradmaß umgerechnet, da du sonst eine etwas unhandliche Zahl im Bogenmaß erhälst.

smart 22. Okt 2006 13:40

Re: Mauskoordinaten (X,Y) in Grad umrechnen?
 
Zitat:

Zitat von NamenLozer
Für Gleitkommazahlen musst du FloattoStr oder FloatToStrF verwenden.
Mit *pi/180 wird die Zahl ins Gradmaß umgerechnet, da du sonst eine etwas unhandliche Zahl im Bogenmaß erhälst.

Hi,

Vielen Dank für Deine Mühe. Ich habe es geschnallt. Noch ne dumme Frage, gibt es in Delphi auch 'FloatToInt' oder soetwas? Oder muss ich Float in Integer selbst umrechnen?

Gruß
Heike

hanselmansel 22. Okt 2006 13:42

Re: Mauskoordinaten (X,Y) in Grad umrechnen?
 
Delphi-Referenz durchsuchenRound()
Delphi-Referenz durchsuchenTrunc()

smart 22. Okt 2006 13:56

Re: Mauskoordinaten (X,Y) in Grad umrechnen?
 
Vielen Dank an Alle!

Mit
Delphi-Quellcode:
Round(ArcTan2(Y, X)* 100)
klappt es.

Gruß
Heike

Flare 22. Okt 2006 15:44

Re: Mauskoordinaten (X,Y) in Grad umrechnen?
 
Zitat:

Zitat von smart
Delphi-Quellcode:
Round(ArcTan2(Y, X)* 100)

Bogenmaß * 100?

Muss ich den Sinn erkennen?
Mach es doch so:
Delphi-Quellcode:
Round(ArcTan2(Y, X)*180/Pi)

Flare

smart 22. Okt 2006 18:27

Re: Mauskoordinaten (X,Y) in Grad umrechnen?
 
Zitat:

Zitat von Flare
Bogenmaß * 100?

Muss ich den Sinn erkennen?
Mach es doch so:
Delphi-Quellcode:
Round(ArcTan2(Y, X)*180/Pi)

Hi.

Da bekomme ich zu kleine Werte. Kein Wert über 150. An 360 garnicht zu denken.

Gruß
Heike

3_of_8 22. Okt 2006 18:41

Re: Mauskoordinaten (X,Y) in Grad umrechnen?
 
Delphi-Quellcode:
round(radtodeg(arctan2(X,Y)))
So müsste es gehen.

Khabarakh 22. Okt 2006 18:49

Re: Mauskoordinaten (X,Y) in Grad umrechnen?
 
Warum bitte jetzt wieder zu ArcTan wechseln :shock: ?

@heike: Das sollte eigentlich stimmen. Beachte aber, dass die Wertemenge der Funktion (mathematisch korrekt) das Intervall [-Pi, Pi] (= -180° bis 180°) und nicht [0, 2 Pi] ist, und durch die auf dem Bildschirm normalerweise nach unten verlaufende Y-Achse Winkel genauso wie Koordinaten gespiegelt sind.

[edit]Ok, zu ArcTan2 editiert ;) . RadToDeg ist trotzdem gleichwertig zu * 180 / Pi. [/edit]

3_of_8 22. Okt 2006 18:50

Re: Mauskoordinaten (X,Y) in Grad umrechnen?
 
Hab ich schon längst editiert. ;)

Khabarakh 22. Okt 2006 18:58

Re: Mauskoordinaten (X,Y) in Grad umrechnen?
 
Ich auch :mrgreen: .
Es gäbe sogar einen Fall, in dem RadToDeg <> * 180 / Pi ist:
Man redefiniert Pi ;) . Ein Beitrag in "The Daily WTF" wäre einem damit auch gleich sicher.

3_of_8 22. Okt 2006 19:03

Re: Mauskoordinaten (X,Y) in Grad umrechnen?
 
Ich dachte Pi wäre eine von der FPU vorgegebene Konstante, die man nicht überschreiben kann? :gruebel:

Khabarakh 22. Okt 2006 19:16

Re: Mauskoordinaten (X,Y) in Grad umrechnen?
 
Seit wann schert sich Pascal schon um Namensgleichheit :stupid: ?
Delphi-Quellcode:
const
  Pi: Extended = 3;
begin
  Writeln(Format('Pi is exactly %f', [Pi]));
  Readln;
end.
Nun aber genug mit OT ;) .

mkinzler 22. Okt 2006 19:24

Re: Mauskoordinaten (X,Y) in Grad umrechnen?
 
Zitat:

Zitat von Khabarakh
Seit wann schert sich Pascal schon um Namensgleichheit :stupid: ?
Delphi-Quellcode:
const
  Pi: Extended = 3;
begin
  Writeln(Format('Pi is exactly %f', [Pi]));
  Readln;
end.
Nun aber genug mit OT ;) .

Das hat doch eher mit dem Scope zu tun.

Khabarakh 22. Okt 2006 19:28

Re: Mauskoordinaten (X,Y) in Grad umrechnen?
 
Natürlich, alle Definitionen und Redefinitionen sind schließlich scopeabhängig.

Jetzt aber BiTTe BTT :stupid: .


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 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 by Thomas Breitkreuz