Thema: Delphi Winkelberechnung

Einzelnen Beitrag anzeigen

DualCoreCpu
(Gast)

n/a Beiträge
 
#7

AW: Winkelberechnung

  Alt 10. Nov 2015, 19:24
Danke auch @TiGÜ:

Ich habe halt in der DP gestöbert, weil meine Pie Funktion, die ich mal gerade wegen der diffizilen Winkelberechnung selber schreiben wollte und wohl auch werde. Wie soll ich sonst in Mathe wieder fit werden?. Kann nur lernen dabei, Andere schreiben ganze Spiele, wo mit Sicherheit ein ganzes Stück mehr Mathe Kenntnisse nötig sind. Hätte auch Lust auf ein selber programmiertes Computerspiel. Aber wenn ich noch nicht mal so ne besch*** Bogenfunktion hinkriege????

Hab übrigens zu meinem Strang die Skizzen hinzu gefügt und leider immer noch keine Idee, warum mein Bogen nicht gezeichnet wird. Nur ganze Ellipse geht. Daß aber auch der Bogen zu zeichenen gehen muss, zeigt Windows selber mit der Originalfunktion.

Ich komm nich drauf, warum mein Bogen nicht gezeichnet wird.

Da hab ich halt hier geguckt, ob da einer so ne Berechnung schon mal gemacht hat und da ist mir das Alter des Stranges komplett egal. Ich habe gegoogelt, ich habe dieses Forum hier durchstöbert weil ja heutzutage "alles im Internet sooo tolllll zu finden ist" Dabei hab ich diesen Strang hier gefunden. Und ich habe auch was zur Vektorrechnung und zu Polarkoordinaten gefunden.

Hab unter dem Suchbegriff Winkelberechnung übrigens auch das hier gefunden:

Delphi-Quellcode:
Winkel:=ArcTan((YPunkt2-YPunkt1)/(XPunkt2-XPunkt1)) *180/PI;

if ((YPunkt2 > YPunkt1) and (XPunkt2 < XPunkt1)) or ((YPunkt2 < YPunkt1) and (XPunkt2 < XPunkt1)) then
  Winkel := Winkel + 180
else if ((YPunkt2 < YPunkt1) and (XPunkt2 > XPunkt1)) then
  Winkel := Winkel +360;
und zwar hier:
http://www.delphipraxis.net/101500-w...erechnung.html

Nur wenn ich diese Funktion kopiere und so hier abwandle:

Delphi-Quellcode:
function QuadAngle(XPunkt1,YPunkt1,Xpunkt2,YPunkt2: Extended): Extended;
var
  Winkel: Extended;
begin
  //Wenn ich diese Funktion verwende, wird die ganze Ellipse gezeichnet
  Winkel:=ArcTan((YPunkt2-YPunkt1)/(XPunkt2-XPunkt1)) *180/PI;

  if ((YPunkt2 > YPunkt1) and (XPunkt2 < XPunkt1)) or ((YPunkt2 < YPunkt1) and (XPunkt2 < XPunkt1)) then
    Winkel := Winkel + 180
  else if ((YPunkt2 < YPunkt1) and (XPunkt2 > XPunkt1)) then
    Winkel := Winkel +360;

  Result := Round(Winkel) mod 360; //Für den Fall, das der Winkel mal größer als 360 Grad wird.
end;
wird die ganze Ellipse und nicht wie ich das eigentlich haben will der Bogen zwischen zwei Punkten gezeichnet, die nicht mit Anfangs und Endwinkel, sondern mit den jeweiligen x,y Koordinaten angegeben sind. Muss doch auch gehen, die Original-Windows API Funktion macht das doch so.

Aber wie macht die das?

In Assembler bin ich nicht fit genug, im Original Api gdi32.dll nachschauen bringt mir daher nix, sieht allerdings Onkel Bill auch nicht gerne, wenn ich es täte.

WO ist den nun der Fehler in meiner Funktion. In der ursprünglichen namens QuadrantAngle.

Die hier oben ist bloß von hier kopiert.

Geändert von DualCoreCpu (10. Nov 2015 um 19:45 Uhr)
  Mit Zitat antworten Zitat