![]() |
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; |
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. |
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