![]() |
N-Eck (Vieleck) zeichnen
Hi ich brauche ein bisschen Hilfe um ein N-Eck zu zeichnen.
Mit dem Mathematischen habe ich keine Probleme, ich zeichne n Ecken mit den Winkeln am Mittelpunkt von (360 / n). Aber wie verwende ich das Winkelmaß auf einem Canvas??? Hoffe die Frage war verständlich... |
Re: N-Eck (Vieleck) zeichnen
Mit Sinus und Cosinus ;) Du fängst bei (x,y) für deinen Mittelpunkt und d für den Durchmesser mit 0° an und zeichnest eine Linie von (x+d*cos(0°), y+d*sin(0°)) nach (x+d*cos(n°), y+d*sin(n°)) und so weiter..
|
Re: N-Eck (Vieleck) zeichnen
Okay verstanden ;) Vielen Dank!
|
Re: N-Eck (Vieleck) zeichnen
Leider stimmt da irgendwas nicht... Möchte ich ein Viereck, bekomme ich ein Dreieck, möchte ich ein Fünfeck, bekomm ich irgendwelchen Kappes...
Ich leide gerade unter einer heftigen Denkblockade und poste deswegen mal meinen Quellcode, vielleicht findet ihr den Fehler:
Delphi-Quellcode:
procedure TForm1.generate;
var i,x,y,d : Integer; myangle : Integer; newx, newy: Integer; begin img.Width := spinedit7.Value; img.Height := spinedit8.Value; img.Canvas.brush.Color := panel3.Color; img.Canvas.Rectangle(-1,-1,img.Width+1,img.Height+1); img.Canvas.Pen.Color := panel4.Color; x := (img.Width div 2); //x,y = Mittelpunkt y := (img.Height div 2); d := y - spinedit3.Value - spinedit4.Value; //Halber Durchmesser myangle := (360 div spinedit1.Value); (Spinedit1.value ist unser N (N-Eck) newx := x + (d*round(cos(myangle*0))); newy := y + (d*round(sin(myangle*0))); //Angular for i := 1 to spinedit1.Value do begin img.Canvas.MoveTo(newx,newy); newx := x + (d*round(cos(myangle*i))); newy := y + (d*round(sin(myangle*i))); img.Canvas.LineTo(newx,newy); end; end; |
Re: N-Eck (Vieleck) zeichnen
da ich mit dem mathemantischen nicht mithalten kann nur eine Vermutung. Du hast nicht beachtet das Delphi mit Bogenmaß arbeit. Du musst mit DegToRad deine Winkelangaben entsprechend erst umrechnen.
|
Re: N-Eck (Vieleck) zeichnen
Genau das ist der Grund. Du musst erst das ganze Zeug mit degToRad (deg2rad?) umwandeln.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:10 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