Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Knob Value berrechnungs problem (https://www.delphipraxis.net/195942-knob-value-berrechnungs-problem.html)

EWeiss 10. Apr 2018 01:47


Knob Value berrechnungs problem
 
Meine Funktion

Delphi-Quellcode:
function TSkinSpriteContainer.XXX(ObjID, X, Y: Integer): Integer;
var
  Item: Integer;
  Angle: Single;
  Value: single;
  Width, Height: Integer;
  Frames: Integer;

function ValueFromAngle(Angle: single): single;
var
  RelativeAngle: single;
begin

  RelativeAngle := Angle - KNOB_OFFSET_ANGLE;
  if RelativeAngle < 0 then
    RelativeAngle := RelativeAngle + 2 * pi;

  Result := (RelativeAngle) / KNOB_ANGLE_RANGE;
  if Result > 1.0 then
  begin
    if RelativeAngle < 0.5 * KNOB_ANGLE_RANGE + pi then
      Result := 1
    else
    Result := 0;
  end;
end;

begin

  Result := 0;

  Item := gItemFromID(ObjID);
  if (Item > -1) then
  begin
    Frames := g_Obj[Item].x2 div g_Obj[Item].y2;

    Height := g_Obj[Item].y2;
    Width := g_Obj[Item].x2 div Frames;

    X := x - g_Obj[Item].x1;
    Y := Y - g_Obj[Item].y1;

    Angle := arctan2(Y - (Height div 2), X - (Width div 2));

    Value := ValueFromAngle(Angle) * 360;
    Result := round(Value);

    OutputDebugStringW(PWideChar(IntToStr(Result)));
  end;
end;
Mein Problem ist dies, wenn ich in die untere Hälfte des Knob klicke ist die Value 0
klicke ich in die obere hälfte ist sie 180.

Was ich aber erreichen möchte ist das sie oben bei 0 anfängt egal wo ich im Knob klicke.

Wenn ich nach rechts drehe soll sie inkrementieren und nach links von 360 ab dekrementieren.

Bekomme das im Moment nicht gebacken was läuft bei meiner Berechnung falsch?
Delphi-Quellcode:
  KNOB_GAP = 45 * pi / 180;
  KNOB_ANGLE_RANGE = 2 * pi - KNOB_GAP;
  KNOB_OFFSET_ANGLE = 0.5 * pi + 0.5 * KNOB_GAP;
gruss

KodeZwerg 10. Apr 2018 06:40

AW: Knob Value berrechnungs problem
 
Liste der Anhänge anzeigen (Anzahl: 1)
Im Anhang ein Knob von Delphi Area, ich mag ihn.
[Edit]
Ich weiß das Dir das so nicht weiterhilft weil der VCL ist und so, aber als Grundlage für eine Portierung nach deinem Style wäre der Hilfreich da bereits sehr komplex ausgebaut.
[/Edit]

EWeiss 10. Apr 2018 13:58

AW: Knob Value berrechnungs problem
 
Zitat:

Zitat von KodeZwerg (Beitrag 1398599)
Im Anhang ein Knob von Delphi Area, ich mag ihn.
[Edit]
Ich weiß das Dir das so nicht weiterhilft weil der VCL ist und so, aber als Grundlage für eine Portierung nach deinem Style wäre der Hilfreich da bereits sehr komplex ausgebaut.
[/Edit]

Das teil ist von mir und Silhwan wir haben es zusammen Entwickelt.
Aber das hilf mir nicht bei meinem Problem.

Zitat:

// uAARotate_Fast v1.2
//
// This unit is based on the VB code written by Lefteris Eleftheriades.
// Please visit "http://www2.cs.ucy.ac.cy/~cs06ee1/", if you want to know more
// about the background of this unit.

// v1.24 : 31 Dez 2017
// Fixed cpu last after change sec to next Min (was allways 6% now 0%)
// Changed FastAARotatedBitmap from TBitmap to HBitmap
// v1.23 : 3 Apr 2009
// Fixed floating point exception (occured at Transparent = true) (ver 1.20)
// Added a parameter : Scale (ver 1.20)
// Added a parameter : ApplySrcAlpha (ver 1.21)
// Fixed bug at caculating transparency (ver 1.22)
// Fixed bug at caculating color with alpha (ver 1.23)
//
// v1.1 : 23 Mar 2009
// Added a parameter : Transparent
//
// v1.0 : 17 Mar 2009
// Initial release
//
// written by Silhwan Hyun (hyunsh@hanafos.com)
// Co-worker(s) Emil Weiss

unit uAARotateFast;

gruss

KodeZwerg 10. Apr 2018 16:09

AW: Knob Value berrechnungs problem
 
Hat ich noch gar nicht bemerkt, war nur in der Knob.pas gucken, na wenn's von Dir kommt muss es ja gefallen :thumb:
Aber mal im Ernst, wenn ich 'nen Knob brauchte hab ich immer das verwendet weil's einfach nur gut ist.
Und Schade das es Dir selbst nicht hilft!

EWeiss 10. Apr 2018 16:17

AW: Knob Value berrechnungs problem
 
Zitat:

Zitat von KodeZwerg (Beitrag 1398652)
Hat ich noch gar nicht bemerkt, war nur in der Knob.pas gucken, na wenn's von Dir kommt muss es ja gefallen :thumb:
Aber mal im Ernst, wenn ich 'nen Knob brauchte hab ich immer das verwendet weil's einfach nur gut ist.
Und Schade das es Dir selbst nicht hilft!

Diese Komponente arbeitet auf einer ganz anderen weise das kann man nicht mit dieser hier vergleichen.
Und die AARotateFast hat nichts mit der Value sondern mit dem Drehen von Objekten zu tun.. nur das hat nichts mit meinen Problem zu tun!

Mein Problem ist nicht das zeichnen sondern die Berechnung der value.

Ich werte es jetzt in meiner Anwendung so aus.

Delphi-Quellcode:
Percent := round(((ptNMHDR.code + 180) mod 360) / 360) * 100;

es funktioniert jetzt egal wo sich die Maus befindet
das Problem ist nur ich komme nicht über 180 grad hinaus.

Irgendwas stimmt noch nicht.
Man wird Alt und viele Fähigkeiten gehen verloren. LOL

gruss

KodeZwerg 10. Apr 2018 16:25

AW: Knob Value berrechnungs problem
 
Ohne das ich mich je selbst an so etwas rangewagt habe, ich würde mir wahrscheinlich sowas wie eine unsichtbare Trackbar auf ein Shape legen, und anhand dessen Position einen Wert zwischen 0-360 geben lassen um mit dem Wert ein Shape rotieren zu lassen, je nach Trackbar Style halt mit Maus links/rechts oder hoch/runter, aber ich geh da bestimmt völlig falsch ran.

EWeiss 10. Apr 2018 16:34

AW: Knob Value berrechnungs problem
 
Zitat:

Zitat von KodeZwerg (Beitrag 1398654)
Ohne das ich mich je selbst an so etwas rangewagt habe, ich würde mir wahrscheinlich sowas wie eine unsichtbare Trackbar auf ein Shape legen, und anhand dessen Position einen Wert zwischen 0-360 geben lassen um mit dem Wert ein Shape rotieren zu lassen, je nach Trackbar Style halt mit Maus links/rechts oder hoch/runter, aber ich geh da bestimmt völlig falsch ran.

Sorry auch wenn du helfen möchtest aber die Informationen sind nicht sonderlich hilfreich.
Die Mathematik hat bei mir nachgelassen ;)

Na egal muss mich da irgendwie durchbeißen.

gruss

KodeZwerg 10. Apr 2018 16:39

AW: Knob Value berrechnungs problem
 
Erdbahn, das Mathe Prinzip müsste bei Dir anwendbar sein.

EWeiss 10. Apr 2018 18:28

AW: Knob Value berrechnungs problem
 
Zitat:

Zitat von KodeZwerg (Beitrag 1398656)
Erdbahn, das Mathe Prinzip müsste bei Dir anwendbar sein.

Hmmm...
Die Gradzahl stimmt jetzt.

Delphi-Quellcode:
    Value := ValueFromAngle(Angle) * 360;
    Result := (round(Value) mod 360;
Wenn der Zeiger oben dann 359°
Wenn der Zeiger unten dann 180°

Wie muss ich jetzt auf Prozent umrechnen damit ich bei 359° = 50% bekomme?

Delphi-Quellcode:
Percent := round(((ptNMHDR.code + 180) mod 360) / 360) * 100;

Dachte so, funktioniert aber nicht richtig.
ptNMHDR.code := GradZahl

Scheiße wenn man so viel vergisst. ;) :duck:

gruss

EWeiss 10. Apr 2018 21:29

AW: Knob Value berrechnungs problem
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ok geht jetzt. :)
Berechnung war schon richtig nur mein Daten Typ nicht.
Erst Single anschließend zu Integer sonst wird das nix.

Delphi-Quellcode:
sPercent := (((ptNMHDR.code + 180) mod 360) / 360) * 100;
Percent := round(sPercent);
Hab noch ein paar Zahlen zur besseren Kontrolle addiert.
Und die ZOrder stimmt immer noch nicht kommt aber noch, ärgerlich wenn man selbst einen Fehler produziert hat und findet ihn nicht.. Lustig!

Selbst ist der Mann.

gruss

KodeZwerg 13. Apr 2018 00:16

AW: Knob Value berrechnungs problem
 
Das freut mich das es geklappt hat, schaut auch verdammt cool aus, das um den Regler noch bissi Grafik passiert find ich Klasse, im ersten Post hat's mir pers. besser gefallen (nicht Solid sondern mit Unterbrechung/Blockweise, also die GFX aussen rum)
Du muss ich mal nachfragen weil ich den Effekt echt mag, gehört das aussen rum zur Grafik des Reglers oder wird da in Echtzeit was gemalt?

EWeiss 13. Apr 2018 00:20

AW: Knob Value berrechnungs problem
 
Zitat:

Zitat von KodeZwerg (Beitrag 1399031)
Das freut mich das es geklappt hat, schaut auch verdammt cool aus, das um den Regler noch bissi Grafik passiert find ich Klasse, im ersten Post hat's mir pers. besser gefallen (nicht Solid sondern mit Unterbrechung/Blockweise, also die GFX aussen rum)
Du muss ich mal nachfragen weil ich den Effekt echt mag, gehört das aussen rum zur Grafik des Reglers oder wird da in Echtzeit was gemalt?

Der Regler ist Abhängig vom Bitmap so wie das gemalt wird, wird es wiedergegeben.
Eigentlich sieht das noch besser aus (wie im ersten Bild im Thread) habe aber Probleme mit der ZOrder.
So wie du sehen kannst ist das erste, siebte und letzte Knob in der ZOrder falsch.

Öffne das Bild in einer neuen Registerkarte dann sieht es besser aus.
Muss das mit der ZOrder wahrscheinlich komplett neu überarbeiten. (was soll's) sind nur samples ohne Funktion.

EDIT:
Hmmm.. sieht aus als hätte ich es behoben.
Auch mein Karussell funktioniert nun korrekt. ;)

gruss

KodeZwerg 13. Apr 2018 09:57

AW: Knob Value berrechnungs problem
 
Boah, schaut Hammer aus! Da werd ich total neidisch, ich will's nimma seh'n :stupid:
Vor allem wenn man es wie Du vorgeschlagen hattest es in einem neuen Fenster öffnet, gigantisch.
Unten links, die, hmmmm, wie nennt man sowas, Trackbar(?) haben die bläulichen Dinger mehr als einen Regler oder ist das sowas wie eine Range-Kontrolle? Ach egal, ich find es sieht mega aus, die Geissen Trulla würde sagen "Iss voll der Burner, ey!" :thumb::thumb:


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