Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Ellipsenbogen zum Tortenstück ergänzen? (https://www.delphipraxis.net/217644-ellipsenbogen-zum-tortenstueck-ergaenzen.html)

delphifan2004 11. Aug 2025 18:21

Ellipsenbogen zum Tortenstück ergänzen?
 
Gemäß der Windows apo Funktion arc() habe ich diese Funktion gebaut:

arc(x1,y1,x2,y2, sx,sy, ex,ey);

wie kann ich nun sicher stellen dass

die vom Bogenradius-Mittelpunkt führenden Geraden genau am Bogenende aufhören?

Ich will eine eigene Ellipsenfunktion verwenden, wie in meinem Thread zum Thema "Ellipsenalgo aus Formelsammlung kreieren" https://www.delphipraxis.net/217478-...-kreieren.html

Möchte also diese Ellipse wieder verwnden, den Bogen zeichnen und die vom Bogenende zum Mittelpunkt führenden Begrenzungslinien. Gibt es dazu eine einfache Formel:

- um das Bogenende zu finden, könnte mit a * cos(alpha) := X; b* sin(alpha) := Y gehen?

- aus den sx,sy, ex,ey Koordinaten auf Start und Endwinkel zu kommen?

Redeemer 11. Aug 2025 23:36

AW: Ellipsenbogen zum Tortenstück ergänzen?
 
Zitat:

Zitat von delphifan2004 (Beitrag 1550895)
Geraden [...] aufhören

Für mich als studierter Mathematiker ist diese Formulierung unerträglich. Geraden sind per Definition unendlich lang.

Zitat:

Zitat von delphifan2004 (Beitrag 1550895)
Gemäß der Windows apo Funktion arc() habe ich diese Funktion gebaut:

arc(x1,y1,x2,y2, sx,sy, ex,ey);

wie kann ich nun sicher stellen dass

die vom Bogenradius-Mittelpunkt führenden Geraden genau am Bogenende aufhören?

Ich will eine eigene Ellipsenfunktion verwenden, wie in meinem Thread zum Thema "Ellipsenalgo aus Formelsammlung kreieren" https://www.delphipraxis.net/217478-...-kreieren.html

Möchte also diese Ellipse wieder verwnden, den Bogen zeichnen und die vom Bogenende zum Mittelpunkt führenden Begrenzungslinien. Gibt es dazu eine einfache Formel:

- um das Bogenende zu finden, könnte mit a * cos(alpha) := X; b* sin(alpha) := Y gehen?

- aus den sx,sy, ex,ey Koordinaten auf Start und Endwinkel zu kommen?

1. Du bildest den Mittelpunkt deines Rechtecks. Wir definieren mx=x1+rx, my=y1+ry mit rx=(x2-x1)/2 und ry=(y2-y1)/2.
2. Du bestimmst den Winkel des übergebenen Start- bzw. Endpunktes relativ zum besagten Mittelpunkt jeweils mit den allseits bekannten Formeln. Es liegt SWS mit W=Pi/2 vor, Arkustangens regelt also.
3. Wenn man die Google-KI fragt, wie man einen Punkt auf einer Ellipse in bestimmtem Winkel zum Mittelpunkt berechnet, spuckt sie totalen Blödsinn aus (die Berechnung des im folgenden Link grünen Punktes P zum irrelevanten und unbekannten Winkel Alfa, bei Google Winkel Thita genannt). Es wird zum Glück hier erklärt: Der gerade bestimmte Winkel heißt dort Winkel Fi und suchst die Koordinaten Xi und Ita (die du zum Mittelpunkt der Ellipse/des Rechtecks addieren musst) des Punktes P. Für SWW (W1=Fi und W2=Pi/2) und somit die Anwendbarkeit der Standardformeln für Sinus und Kosinus fehlt dir die Länge der Seite p. Die wird berechnet mit:
p = sqrt(ry² / (1 - (sqrt(rx²-ry²) / rx)² * (cos(Fi))² )))
OT: Wer auch immer sich überlegt hat, den Exponenten vor die Klammer zu schreiben, wenn man das Ergebnis einer trigonometrischen Funktion potenziert: Ich hasse dich! Du bist eine Schande für die Mathematik! Es ist beim obigen Link so geschrieben und ich habe es in der Zeile hierüber korrigiert.
4. Jetzt befindet sich dein Punkt bei
X = mx+Xi = mx+p*cos(Fi)
Y = my+Ita = my+p*sin(Fi))

himitsu 12. Aug 2025 00:50

AW: Ellipsenbogen zum Tortenstück ergänzen?
 
Der "Endpunkt" der Gerade kann auf dem Bogen liegen, aber muß nicht.
Er kann, auf dem Bogen liegen oder innerhalb oder außerhalb des Kreises/Ellipse ... drauf oder außerhalb ist besser, weil dann das Ergebnis des ergebenden Winkels genauer ist (je näher innerhalb am Mittelpunkt, umso ungenauer wird es, da wir ja nur mit ganzen Zahlen/Pixeln rechnen und somit gerundet wird)

Die "Gerade" geht durch die zwei Punkte Mittelpunkt und der andere Endpunkt Punkt und noch viel weiter (unendlich)
und da, wo die Gerade den Bogen schneidet, dort stoppt der Bogen.
Es ist also garnicht nötig den Bogen genau zu treffen.



Du berechnest dir über Winkelfunktionen den Endpunkt,
die Zeichenfunktion berechnet sich daraus wieder einen Winkel, mit dem sie dann das Zeichnen berechnet.
Ich weiß, ist bissl pervers, da es schöner wäre, man könnte hier direkt den Winkel in die API geben, aber so isses halt nunmal. :freak:


Treffen sich zwei Parallelen. :lol:

TomyN 12. Aug 2025 06:19

AW: Ellipsenbogen zum Tortenstück ergänzen?
 
Irgendwie verstehe ich die Frage nicht. Der Grafikcursor (PenPos) steht doch nach dem Zeichnen genau am Ende des Bogens, wenn ich dann einfach zum Mittelpunkt weiterzeichne, dann schließe ich doch exakt an....

Redeemer 12. Aug 2025 08:41

AW: Ellipsenbogen zum Tortenstück ergänzen?
 
Die Frage versteht man erst, wenn man sich wingdi.arc() durchgelesen hat (wingdi nicht mit wuppdi verwechseln!), weil er ja nur schriebt "ich habe eine Prozedur mit acht Integers als Argument", ohne selbst zu sagen, was das für Argumente sind und was die Prozedur tun soll. Hat bei mir auch entsprechend lange gedauert.

Uwe Raabe 12. Aug 2025 08:45

AW: Ellipsenbogen zum Tortenstück ergänzen?
 
Die Arc-Methode von TCanvas arbeitet in der Tat nicht exakt und es entstehen manchmal pixelgroße Lücken zu angrenzenden Elementen. Daher verwende ich in meinen Draw-Routinen statt Arc immer eine Facettendarstellung mit LineTo-Befehlen. Die passen dann immer.

himitsu 12. Aug 2025 08:58

AW: Ellipsenbogen zum Tortenstück ergänzen?
 
Mehrere Methoden malen das letzte Pixel nicht, so z.B. auch LineTo,
und bei Anderen ist das untere-rechte die zweite/letzte Koordinate nicht inklusive.

Redeemer 12. Aug 2025 09:11

AW: Ellipsenbogen zum Tortenstück ergänzen?
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1550906)
Die Arc-Methode von TCanvas arbeitet in der Tat nicht exakt und es entstehen manchmal pixelgroße Lücken zu angrenzenden Elementen. Daher verwende ich in meinen Draw-Routinen statt Arc immer eine Facettendarstellung mit LineTo-Befehlen. Die passen dann immer.

Die "korrekte" Lösung dürfte die hier sein - bewegt den Cursor (macht somit einen zusammenhängen Pfad) und nutzt die optimale Annäherung durch Bézier-Kurven.
Delphi-Quellcode:
Angle
ist die Achsneigung, was die Windows-Funktion nicht unterstützt und auch bei SVG kaum genutzt wird.
Die SVG-Funktion mal allerdings etwas anders als die Windows-Funktion, da die Ellipse nicht innerhalb eines vorgegebenen Rechtecks ist sondern völlig anders konstruiert wird.

TomyN 12. Aug 2025 10:51

AW: Ellipsenbogen zum Tortenstück ergänzen?
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1550906)
Die Arc-Methode von TCanvas arbeitet in der Tat nicht exakt und es entstehen manchmal pixelgroße Lücken zu angrenzenden Elementen. Daher verwende ich in meinen Draw-Routinen statt Arc immer eine Facettendarstellung mit LineTo-Befehlen. Die passen dann immer.

Oh, das wusste ich nicht. Und da ich (fast) nur noch mit graphics32 arbeite ist es mir auch noch nie aufgefallen.

Jens01 13. Aug 2025 12:42

AW: Ellipsenbogen zum Tortenstück ergänzen?
 
Zitat:

Die Arc-Methode von TCanvas arbeitet in der Tat nicht exakt
Sowas hatte ich auch mal mit GR32. Da wurde ein Kreis nicht richtig geschlossen.
Ich glaube, das lag darin, dass die Winkelfunktionen (Sin, Cos, SinCos) in Single nicht genau genug waren, um den Endpunkt richtig zu treffen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz