Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi winkel berechnung (https://www.delphipraxis.net/74128-winkel-berechnung.html)

smc 28. Jul 2006 14:53


winkel berechnung
 
Hallo,

habe da ein kleines Problem mit der Angle berechnung von DrawRotate.

Die Drawrotate Angle definiert man von 0 bis 255 wo 256 dann wieder 0 ist.

Mein eingabewert ist allerdings ein 'wenig' anders:

0 ist hier norden
4,5 ist Osten
1,5 ist Westen
3 ist Süden

(demnach gegen den Uhrzeigersinn)

das ganze geht bis 6~ was dann wieder norden ist.

Ich will nun beide werte zusammen verwenden können, deshalb denke ich mir beide am besten in grad umrechne.

Das Problem ist nur wie? Hätte wohl in Mathe bisschen besser aufpassen sollen :)

3_of_8 28. Jul 2006 14:56

Re: winkel berechnung
 
Wenn x dein Eingabewert ist:

256 - ((x mod 6) * 128 / 3)

Das dürfte gehen.

smc 28. Jul 2006 15:08

Re: winkel berechnung
 
wow danke für die schnelle antwort, werde es heute abend testen :)

mod ist ein befehl der den rest einer division ausgibt oder?
7 : 2 = 3 rest 1

1 wäre dann das ergebnis von mod?

3_of_8 28. Jul 2006 15:28

Re: winkel berechnung
 
Richtig.

Das mod ist vermutlich unnötig, du kannst es auch weglassen, da DrawRotate das übernimmt.

marabu 28. Jul 2006 16:18

Re: winkel berechnung
 
Hallo Manuel,

kein Wunder, wenn die Borg immer an unerwarteten Stellen auftauchen - bei solchen Navigationskünsten!

Zur Lösung wird Dreisatz und ein Quadrantensprung benötigt:

Delphi-Quellcode:
function Arc6To256(x: Extended): Byte;
begin
  Result := Round((x + 1.5) / 6 * 256); //  mod 256 geschieht implizit
end;
Du aber verzichtest auf den Sprung und kehrst statt dessen die Zählrichtung um.

Freundliche Grüße vom marabu

3_of_8 28. Jul 2006 16:28

Re: winkel berechnung
 
Stimmt - ich habe statt "gegen den Uhrzeigersinn" so etwas wie "andere Richtung" verstanden und daher die Zählrichtung umgekehrt.

himitsu 28. Jul 2006 16:33

Re: winkel berechnung
 
Zitat:

Zitat von 3_of_8
Das mod ist vermutlich unnötig, du kannst es auch weglassen, da DrawRotate das übernimmt.

nicht nur das ... MOD kannst du nicht auf reelle Zahlen anwenden :warn:

rein mathematisch hätteste das doch auch selber lösen können?
(6 - x) / 6 * 256 +/- offset
oder
(6 - x +/- offset) / 6 * 256


6 - x = Richtung umkehren
... / 6 * 256 = Scalierung ändern
... + offset = halt wenn die Ausrichtung anders ist

Zum Schluß könnte man noch die Grenzen auf verschiedenste Weisen anpassen.
(also wenn das Ergebnis durch das Offset unter 0, oder über 255 hinausgeht)

Delphi-Quellcode:
x256 := Round(6 - x6 + 1.5) / 6 * 256)

// oder halt
x256 := Round(6 - x6 + 1.5) / 6 * 256) mod 256;
If x256 < 0 Then Inc(x256, 256);
(die 1.5 sind nur abgeschrieben, hab grad nicht die Nerven, um an Himmelsrichtungen zu denken ._.)

smc 2. Aug 2006 11:23

Re: winkel berechnung
 
funzt soweit so gut, danke an alle! :)

Flare 2. Aug 2006 11:56

Re: winkel berechnung
 
Nur mal so als Frage:
Ist bei dir Westen wirklich bei genau 1,5 oder doch Pi/2?
Denn 360° mit 2*Pi und eben rund 6 fände ich für einen Kreis logischer...


Flare


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:21 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