![]() |
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 :) |
Re: winkel berechnung
Wenn x dein Eingabewert ist:
256 - ((x mod 6) * 128 / 3) Das dürfte gehen. |
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? |
Re: winkel berechnung
Richtig.
Das mod ist vermutlich unnötig, du kannst es auch weglassen, da DrawRotate das übernimmt. |
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:
Du aber verzichtest auf den Sprung und kehrst statt dessen die Zählrichtung um.
function Arc6To256(x: Extended): Byte;
begin Result := Round((x + 1.5) / 6 * 256); // mod 256 geschieht implizit end; Freundliche Grüße vom marabu |
Re: winkel berechnung
Stimmt - ich habe statt "gegen den Uhrzeigersinn" so etwas wie "andere Richtung" verstanden und daher die Zählrichtung umgekehrt.
|
Re: winkel berechnung
Zitat:
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:
(die 1.5 sind nur abgeschrieben, hab grad nicht die Nerven, um an Himmelsrichtungen zu denken ._.)
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); |
Re: winkel berechnung
funzt soweit so gut, danke an alle! :)
|
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