Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Canvas.Arc Länge abfragen? (https://www.delphipraxis.net/138773-canvas-arc-laenge-abfragen.html)

AlexanderVieth 17. Aug 2009 13:11


Canvas.Arc Länge abfragen?
 
Hallo allezusammen.

Gibt es einen Weg, die ich die Länge des Canvas.Arc bogens abfragen/errechnen kann,
Sodass ich den Kreisumfang mit der Länge des gezeichneten Kreisbogens vergleichen kann?

himitsu 17. Aug 2009 13:45

Re: Canvas.Arc Länge abfragen?
 
Mathematik ... also einfach berechnen?

Umfang des Kreises, bzw. der Ellipse
und dann davon den Anteil, welcher gezeichnet wurde.
(den Winkel des Anfangs und Endes des Kreisausschnittes bekommt man ja über den Mitelpunkt und die 2 Endpunkte oder besser gesagt, über die Verbindungslinien zwischen Endpunkt und Mittelpunkt)

AlexanderVieth 17. Aug 2009 13:51

Re: Canvas.Arc Länge abfragen?
 
Mein Problem ist, dass ich bis jetzt alle Geraden in Vektoren ausgestellt habe.
Den Winkel zwischen zwei geraden berechne ich mit dem Skalarprodukt, kann so aber keine Winkel größer als 90 Grad berechnen.

jfheins 17. Aug 2009 14:00

Re: Canvas.Arc Länge abfragen?
 
Also du hast die Koordinaten des Anfangspunkts und die Koordinaten des Endpunkts, sowie die des Mittelpunkts und möchtest den Winkel zwischen den beiden Punkten?

Das sollte nicht allzuschwer sein ;)

Das mit dem Umfang geht für einen Kreis relativ einfach, falls es eine Ellipse ist: Ist das etwas schwieriger

AlexanderVieth 17. Aug 2009 14:16

Re: Canvas.Arc Länge abfragen?
 
Sorry, nach einer kleinen Pause fällt mir auf, dass ich das Problem sehr schlecht beschrieben habe, deswegen noch ein zweiter anlauf.

Ich habe ein Programm geschrieben, dass Punkte in einem Koordinatensystem verbindet.
Im abstand X vom Punkt B, in dem sich die zwei vektoren AB und BC treffen möchte ich die Ecke entfernen und durch eine Rundung ersetzen. Ich habe auch schon einen ganz guten Ansatz, der allerdings nur funktioniert, wenn ich, Ausgehend von A nach rechts abbiege. gehe ich nach Links, dann zeichnet mir das Prog den Falschen Teil der Ellipse.

Zusammengefasst, ich habe zwei Punkte, kann aber nicht definitiv und generell sagen, welcher der Anfangs und welcher der Endpunkt ist.

jfheins 17. Aug 2009 14:40

Re: Canvas.Arc Länge abfragen?
 
Okay, also hast du mehrere Punkte, die du durch Linen verbindest, und du möchtest die Ecken abrunden.

Dann hast du für jeden (Zwischen-)Punkt 2 Vektoren, die besagen, in welche Richtung die beiden Linienstücke abgehen.

Also wenn du die Punkte A, B, C, D hast und den Punkt B betrachtest brauchst du erstmal die Vektoren BA und BC.

Jetzt berechnest du 2 Winkel:
phi als der winkel dazwischen: Bei beiden Vektorn den Winkel ausrechnen (atan2) und subtrahieren.
theta als die Richtung des Kreismittelpunkts Beide Vektoren normieren, dann addieren, und math.atan2 benutzen. Falls beim addieren 0 rauskommt, kannste abbrechen (gerade Verbindung)

Damit hast du die Richtung in die du gehen musst. Jetzt brauchst du noch den Radius der Verrundung (z.B. 30px) um den Mittelpunkt des Kreises zu errechnen. Der Abstand zum Punkt B ergibt sich durch Z = R/cos(phi/2) der Kreismittelpunkt dann mit (X = Z*cos(theta) und Y = Z*sin(theta))
Am Ende nicht vergessen, den Punkt B draufzurechnen und du hast die Koordinaten des Kreismittelpunkts.

So ungefähr. Kann sein, dass das eine oder andere Vorzeichen noch falsch ist ;)

AlexanderVieth 17. Aug 2009 14:43

Re: Canvas.Arc Länge abfragen?
 
Das hat geklappt... dankeschön ^^


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