AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Ellipsenalgo aus Formelsammlung kreieren

Ellipsenalgo aus Formelsammlung kreieren

Ein Thema von delphifan2004 · begonnen am 8. Jul 2025 · letzter Beitrag vom 12. Jul 2025
Antwort Antwort
Seite 1 von 2  1 2   
Delphi.Narium

Registriert seit: 27. Nov 2017
2.599 Beiträge
 
Delphi 7 Professional
 
#1

AW: Ellipsenalgo aus Formelsammlung kreieren

  Alt 8. Jul 2025, 11:49
Wenn zu Beginn diese Bedingung while angle < endangle do erfüllt ist, müsstest Du in eine Endlosschleife laufen, da angle in der Schleife nicht verändert wird und von daher die Abbruchbedingung der Schleife nie erfüllt sein wird.

Eine Zuweisung auf x erfolgt nur vor der Schleife: x := xm; . Danach wird x nicht mehr verändert, von daher muss x immer gleich bleiben.

Gibt der Kompiler irgendwelche Warnungen aus, z. B. dass der auf eine Variabel zugewiesene Wert nie benutzt wird? Das sollte (mindestens) bei angel, a, b und py eigentlich der Fall sein.

Bist Du sicher, dass die Formelauflösung nach y korrekt ist?

y = ±b * sqrt(1 - sqr(x) / sqr(a))
  Mit Zitat antworten Zitat
Renate Schaaf

Registriert seit: 25. Jun 2020
Ort: Lippe
135 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Ellipsenalgo aus Formelsammlung kreieren

  Alt 8. Jul 2025, 12:57
Der code muss sowieso neu geschrieben werden. Hier ist ein Beispiel (ungetestet)

Delphi-Quellcode:
//Zeichne Ellispe zwischen stangle und endangle mit Winkelschrittweite AngleStep
procedure DrawEllipse(xm,ym,xR,yR,stangle,endangle,AngleStep: Extended);
var
  angle: extended;
  a,b,x,y,r: extended;
begin
  angle := stangle;
  a := xR; b := yR; //a und b --- x- und y Readien der Ellipse
  while angle < endangle do
  begin
    r := a*b/sqrt(sqr(b*cos(angle))+sqr(a*sin(angle)));
    x := xm + r*cos(angle);
    y := ym + r*sin(angle);
    DrawPixel(round(x), round(y)); //was auch immer das ist :)
    angle:=angle+AngleStep;
  end;
end;
extended ist meiner Meinung nach übertrieben genau.
Achtung: angle muss in radians angegeben werden, also 360° = 2*Pi
Statt sin, cos kann man auch SinCos aus der math-unit verwenden.

Renate
Renate

Geändert von Renate Schaaf ( 8. Jul 2025 um 13:04 Uhr)
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.240 Beiträge
 
Delphi 12 Athens
 
#3

AW: Ellipsenalgo aus Formelsammlung kreieren

  Alt 8. Jul 2025, 13:07
Vielleicht ist es besser, die Laufvariable parametrisch zu Normieren und nicht als Winkel zu übernehmen.
Dann kann man das Rendering etwass besser steuern.

So ungefähr meine ich, ungetestet:

Delphi-Quellcode:
// Zeichnet eine Ellipse mit Mittelpunkt (xm, ym), Radien xR, yR,
// zwischen Startwinkel stangle und Endwinkel endangle (in Grad),
// mit numSteps Schritten für gleichmäßigere Punktverteilung
procedure DrawEllipse(xm, ym, xR, yR, stangle, endangle: Extended; numSteps: Integer);
var
  t, tStart, tEnd, tStep: Extended;
  i: Integer;
  x, y: Extended;
begin
  if numSteps < 1 then Exit; // Sicherheitsprüfung

  // Winkel in Radiant umrechnen
  tStart := DegToRad(stangle);
  tEnd := DegToRad(endangle);
  
  // Normierter Parameter t von tStart bis tEnd
  tStep := (tEnd - tStart) / numSteps;

  // Zeichne Punkte entlang der Ellipse
  for i := 0 to numSteps do
  begin
    t := tStart + i * tStep;
    // Parametrische Darstellung der Ellipse
    x := xm + xR * Cos(t);
    y := ym + yR * Sin(t);
    DrawPixel(Round(x), Round(y)); // Zeichne Pixel
  end;
end;

Geändert von Rollo62 ( 8. Jul 2025 um 13:37 Uhr)
  Mit Zitat antworten Zitat
Renate Schaaf

Registriert seit: 25. Jun 2020
Ort: Lippe
135 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Ellipsenalgo aus Formelsammlung kreieren

  Alt 8. Jul 2025, 15:44
Zitat:
Vielleicht ist es besser, die Laufvariable parametrisch zu Normieren und nicht als Winkel zu übernehmen.
Dann kann man das Rendering etwass besser steuern.

Delphi-Quellcode:

    x := xm + xR * Cos(t);
    y := ym + yR * Sin(t);


Das hatte ich glatt vergessen ... Ja, die Schritte eingeben ist immer besser.
Renate
  Mit Zitat antworten Zitat
delphifan2004

Registriert seit: 26. Nov 2004
Ort: Dresden
283 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Ellipsenalgo aus Formelsammlung kreieren

  Alt 8. Jul 2025, 20:09
Danke an Euch alle! So wird meine Ellipse gezeichnet. Mit 4096 Schritten passiert das lückenlos.

Wenn ich dieStart und Endwinkel direkt eingebe wird erst der untere Ellipsenbogen gezeichnet, dann der obere. Wenn ich zuerst den oberen Ellipsenbogen oder Teile davon gezeichnet haben will, muss ich die Einkelangaben noch mit (-1) multiplizieren.

@himitsu: Ja, Delphi kann das auch aber ich wollte ja gerade wissen wie das Delphi intern macht und dazu ist die Ellipsengleiching notwendig. Dennoch Danke, wie auch an alle Anderen hier die mir geholfen haben. Ich habe jetzt @Renate Schaaf's Entwurf ergänzt um @Rolle72's NumStep im Test.

Danke wie verrückt. Morgen guck ich mir die nach x und y aufgelösten Gleichungen an und gehe das noch mal auf dem Papier durch.
  Mit Zitat antworten Zitat
Renate Schaaf

Registriert seit: 25. Jun 2020
Ort: Lippe
135 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Ellipsenalgo aus Formelsammlung kreieren

  Alt 8. Jul 2025, 20:24
Danke an Euch alle! So wird meine Ellipse gezeichnet. Mit 4096 Schritten passiert das lückenlos.

Wenn ich dieStart und Endwinkel direkt eingebe wird erst der untere Ellipsenbogen gezeichnet, dann der obere. Wenn ich zuerst den oberen Ellipsenbogen oder Teile davon gezeichnet haben will, muss ich die Einkelangaben noch mit (-1) multiplizieren.

@himitsu: Ja, Delphi kann das auch aber ich wollte ja gerade wissen wie das Delphi intern macht und dazu ist die Ellipsengleiching notwendig. Dennoch Danke, wie auch an alle Anderen hier die mir geholfen haben. Ich habe jetzt @Renate Schaaf's Entwurf ergänzt um @Rolle72's NumStep im Test.

Danke wie verrückt. Morgen guck ich mir die nach x und y aufgelösten Gleichungen an und gehe das noch mal auf dem Papier durch.
Nimm alles von Rollo! Meine Formel kommt auch zum Ziel, aber spiralförmig statt geradezu.

Natürlich! Canvas-y geht ja von oben nach unten. Also angle für wie die Uhr geht, und -angle andersrum.
Renate
  Mit Zitat antworten Zitat
Baird

Registriert seit: 24. Dez 2024
2 Beiträge
 
#7

AW: Ellipsenalgo aus Formelsammlung kreieren

  Alt 10. Jul 2025, 07:10
Vielen Dank für das Teilen und den Rat. Die Diskussion zu diesem Thema ist sehr bedeutsam und hilft mir sehr.
Gute Gesellschaft ist unterwegs der kürzeste Weg.
motores paso a paso nema 16
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.240 Beiträge
 
Delphi 12 Athens
 
#8

AW: Ellipsenalgo aus Formelsammlung kreieren

  Alt 9. Jul 2025, 08:39
Danke an Euch alle! So wird meine Ellipse gezeichnet. Mit 4096 Schritten passiert das lückenlos.
Genau, das ist generell die Problematik bei diesen parametriesierten Methoden.
Man will die Schrittlänge, oder "Punktdichte" ja nicht jedes Mal von Hand optimieren und vorgeben.
Bei kleinen Ellipsen sind 4096 vielleicht totaler Overhead, bei großen Ellipsen kommt es vielleicht gerade mal so hin.

Die Frage wäre deshalb, wie berechne ich die Schritte immer optimal, z.B. anhand einer gewünschten "Punktdichte" für alle Zeichenelemente auf dem Canvas ?

Dazu fallen mir mindestens 3 Alternativen ein, die aber alle nicht ideal sind, weil sie sqrt und trigonometrische Funktionen nutzen können.

Grundsätzlich denke ich, gibt es:
A.) Entweder vor dem eigentlichen Zeichen berechen/abschätzen

Delphi-Quellcode:

    function CalcNumSteps(a, b, stAngleDeg, endAngleDeg: Extended; dMax: Integer): Integer;
Das kann spitze Enden aber womöglich nicht dicht genug abbilden.

oder

B.) iterativ innerhalb der Zeichenschleife anhand der Teilstücke berechnen.
Damit könnte zumindest die "Punktdichte" auch variieren, z.B. bei extrem unsymmetrischen Ellipsen.

Vielleicht gibt es dafür ja auch eine möglichst effiziente Methode, die ich nicht kenne?
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.518 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Ellipsenalgo aus Formelsammlung kreieren

  Alt 9. Jul 2025, 09:56
@himitsu: Ja, Delphi kann das auch aber ich wollte ja gerade wissen wie das Delphi intern macht und dazu ist die Ellipsengleiching notwendig.
Delphi macht das intern sicher anders. Dazu müsste man in dessen Code schauen.
  Mit Zitat antworten Zitat
Kas Ob.
Online

Registriert seit: 3. Sep 2023
458 Beiträge
 
#10

AW: Ellipsenalgo aus Formelsammlung kreieren

  Alt 9. Jul 2025, 10:08
the Step should be calculated from the drawing function not to be supplied with a, b, startangle and endangle, unless you want to draw points instead of continuous line, and it should be calculated from the radius, the radius here is Sqrt(a^2+b^2)

Step = 1/Sqrt(a^2+b^2)

and that it is for continuous line, if you want a dotted draw then make the passed parameter with coefficient as factor to the step so it will be

Step = StepMultiplier/Sqrt(a^2+b^2)
Kas
  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 17:43 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