Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Ellipsenalgo aus Formelsammlung kreieren (https://www.delphipraxis.net/217478-ellipsenalgo-aus-formelsammlung-kreieren.html)

Renate Schaaf 10. Jul 2025 09:27

AW: Ellipsenalgo aus Formelsammlung kreieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also, Ihr wollt z.B. eine Ellipse aus Smileys zeichnen, und dabei sollen die immer den gleichen Abstand haben?
Dazu braucht man eine variable Schrittweite. So ganz krieg ichs nicht hin für die Extremfälle, da brauchts eine bessere Schrittweitensteuerung, und das Schließen der Ellipse ist auch ein Problem. Sh. Anhang.

Für die Schrittweite braucht man die Formel für die Länge einer Kurve, nicht die explizite Formel, man muss nur wissen, wie die in Abhängigkeit vom Parameter t wächst:

(x(t),y(t)) : Kurve l(t): Länge der Kurve.

dl/dt = sqrt((x'(t))² + (y'(t))²) (Ableitungen)

Wenn man jetzt so tut, als wäre dl kein Differential sondern ein Abstand, und dt ein t-Schritt, dann möchte man dl konstant haben. Die Konstante nenne ich mal dist, wie Distanz. Das gibt

dt = dist/sqrt((x'(t))² + (y'(t))²)

Für die Ellipse: x(t) = xm + a*cos(t) y(t) = ym + b*sin(t) x'(t) = -a*sin(t) = -a/b*(y-ym) y(t) = b*cos(t) = b/a*(x-xm)
(Achtung: t ist hier in radian, sonst stimmen die Ableitungen nicht)

dt = dist/sqrt(sqr(a/b*(y-ym))+sqr(b/a*(x-xm))

Hier ist der Code für mein Testprogramm:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var xm,ym,x,y,t,dt,a,b, dist: double;
    xp,yp: integer;
begin
  Image1.Picture.Bitmap.SetSize(image1.width,image1.height);
  Image1.Picture.bitmap.Canvas.Brush.Color:=clblack;
  Image1.picture.bitmap.canvas.FillRect(Image1.clientrect);
  xm:=image1.Width/2; ym:=image1.Height/2;
  a:=Spinedit1.Value; b:=Spinedit2.Value;
  dist:=Spinedit3.Value;
  t:=0;
  while t<2*Pi do
  begin
    x:=a*cos(-t);
    y:=b*sin(-t);
    xp:=round(xm+x);
    yp:=round(ym+y);
    image1.Picture.Bitmap.Canvas.Draw(xp-8,yp-8,image2.Picture.Graphic);
    dt:=dist/sqrt(sqr(a/b*y)+sqr(b/a*x));
    t:=t+dt;
  end;
end;

Rollo62 10. Jul 2025 09:47

AW: Ellipsenalgo aus Formelsammlung kreieren
 
:thumb::-D
Endlich mal ein richtiger Use-Case für so eine Funktion


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:29 Uhr.
Seite 3 von 3     123   

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