Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi N-Eck (Vieleck) zeichnen (https://www.delphipraxis.net/100112-n-eck-vieleck-zeichnen.html)

MisterNiceGuy 22. Sep 2007 13:18


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...

Dax 22. Sep 2007 13:32

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..

MisterNiceGuy 22. Sep 2007 13:45

Re: N-Eck (Vieleck) zeichnen
 
Okay verstanden ;) Vielen Dank!

MisterNiceGuy 22. Sep 2007 17:53

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;

SirThornberry 22. Sep 2007 17:56

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.

Dax 22. Sep 2007 18:02

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