Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#1

Knob Value berrechnungs problem

  Alt 10. Apr 2018, 01: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 15:50 Uhr)
  Mit Zitat antworten Zitat