AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Knob Value berrechnungs problem

Knob Value berrechnungs problem

Ein Thema von EWeiss · begonnen am 10. Apr 2018 · letzter Beitrag vom 13. Apr 2018
Antwort Antwort
Seite 1 von 2  1 2   
EWeiss
(Gast)

n/a Beiträge
 
#1

Knob Value berrechnungs problem

  Alt 10. Apr 2018, 02:47
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

Geändert von EWeiss (11. Jul 2019 um 16:50 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Knob Value berrechnungs problem

  Alt 10. Apr 2018, 07:40
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]
Angehängte Dateien
Dateityp: 7z DelphiArea_Knob.7z (23,3 KB, 13x aufgerufen)
Gruß vom KodeZwerg

Geändert von KodeZwerg (10. Apr 2018 um 08:14 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: Knob Value berrechnungs problem

  Alt 10. Apr 2018, 14:58
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

Geändert von EWeiss (10. Apr 2018 um 17:02 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Knob Value berrechnungs problem

  Alt 10. Apr 2018, 17:09
Hat ich noch gar nicht bemerkt, war nur in der Knob.pas gucken, na wenn's von Dir kommt muss es ja gefallen
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!
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: Knob Value berrechnungs problem

  Alt 10. Apr 2018, 17:17
Hat ich noch gar nicht bemerkt, war nur in der Knob.pas gucken, na wenn's von Dir kommt muss es ja gefallen
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.

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

Geändert von EWeiss (10. Apr 2018 um 17:39 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Knob Value berrechnungs problem

  Alt 10. Apr 2018, 17:25
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.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: Knob Value berrechnungs problem

  Alt 10. Apr 2018, 17:34
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

Geändert von EWeiss (10. Apr 2018 um 17:37 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Knob Value berrechnungs problem

  Alt 10. Apr 2018, 17:39
Erdbahn, das Mathe Prinzip müsste bei Dir anwendbar sein.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#9

AW: Knob Value berrechnungs problem

  Alt 10. Apr 2018, 19:28
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?

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.

gruss

Geändert von EWeiss (11. Apr 2018 um 06:32 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#10

AW: Knob Value berrechnungs problem

  Alt 10. Apr 2018, 22:29
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

Geändert von EWeiss (11. Jul 2019 um 16:50 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 09:30 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