![]() |
Stern zeichnen mit line to und move to
Liste der Anhänge anzeigen (Anzahl: 1)
guten tag,
ich studiere aktuell im dritten semester, und muss nun ein praktikum machen, wo ein stern vieleck gezeichnet weden soll. ich hab mir auch bereits gedanken gemacht und das programm geschrieben, aber leider kommt da kein stern bei raus, sondern nur eine linie. Da mir hinten und vorne nicht klar ist, woran das liegt, bitte ich euch einfach mal um hilfe. ich hänge mal den bereits vorhandenen quelltext an...
Delphi-Quellcode:
[edit=mkinzler]Code-Tag durch Delphi-Tag ersetzt Mfg, mkinzler[/edit]
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Spin, ExtCtrls; type TForm1 = class(TForm) Image1: TImage; SpinEdit1: TSpinEdit; SpinEdit2: TSpinEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; SpinEdit3: TSpinEdit; Button1: TButton; Button2: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; xm, ym, Anzahl_Punkte, ri, ra: integer; Winkelstueck: double; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin xm:=image1.Width div 2; ym:=image1.height div 2; Anzahl_Punkte:=2*spinedit1.value; ri:= SpinEdit2.value; //spinedit.value ist sofort ra:= SpinEdit3.value; //ein integer wert... xm:=xm+ri; winkelstueck:=(2*pi)/Anzahl_Punkte; end; procedure TForm1.Button1Click(Sender: TObject); var index,x,xi,yi: integer; begin image1.Canvas.moveto(xm,ym); x:=Anzahl_Punkte mod 2; for index:=1 to Anzahl_Punkte do if x=0 then begin xi:=trunc (ri*cos(index*winkelstueck)); yi:=trunc (ri*sin(index*winkelstueck)); image1.Canvas.LineTo(xi,yi) end else begin xi:=trunc (ra*cos(winkelstueck)); yi:=trunc (ra*sin(winkelstueck)); image1.Canvas.lineto(xi,yi); end; end; procedure TForm1.Button2Click(Sender: TObject); begin image1.picture:= nil end; end. |
Re: Stern zeichnen mit line to und move to
Seit ihr
![]() |
Re: Stern zeichnen mit line to und move to
jo, möglich ist das, weiß zwar gerade nicht wer genau sich da noch mit dem selben thema rumschlägt, dafür sind wir dann doch noch zuviele im studiengang
|
Re: Stern zeichnen mit line to und move to
Der Ansatz ist nicht schlecht, du musst aber bei dem Zeichnen vom Mittelpunkt ausgehen.
Delphi-Quellcode:
for i :=1 to Anzahl_Punkte do
begin if x=0 then begin xi:=trunc (xm + ri*cos(i*winkelstueck)); // <--<< yi:=trunc (ym + ri*sin(i*winkelstueck)); // <--<< Image1.Canvas.LineTo(xi, yi) end else begin xi:=trunc (xm + ra*cos(winkelstueck)); // <--<< yi:=trunc (ym + ra*sin(winkelstueck)); // <--<< image1.Canvas.lineto(xi, yi); end; end; |
Re: Stern zeichnen mit line to und move to
ok, da haste natürlich recht, da hab ich den wald vor lauter bäumen nicht gesehen...
so, jetzt kommt auf klick zwar das imagefeld, aber das ist leer?... komisch... |
Re: Stern zeichnen mit line to und move to
Ich habe hier was Schönes gefunden:
Es zeichnet eine EU-Flagge mit 12 (!) Sternen:
Delphi-Quellcode:
procedure drawstar( xc, yc: integer; radius:double);
var data : array[1..10] of Tpoint; j : integer; a: double; begin for j := 0 to 4 do begin with data[2*j+1] do begin a := 2*pi*j/5; x := xc + round(radius*sin(a)); y := yc - round(radius*cos(a)); end; with data[2*j+2] do begin a := 2*pi*(j+0.5)/5; x := xc + round(0.4*radius*sin(a)); y := yc - round(0.4*radius*cos(a)); end; end; Form1.canvas.polygon(data); end; procedure TForm1.FormPaint(Sender: TObject); var j, h,w, r, n: integer; a: double; begin with canvas do begin h := Form1.clientheight; w := Form1.clientwidth; brush.color := clblue; rectangle(0,0,w,h); r := (2*h) div 6; n := 12; {15 EU countries - 1999, but flag fixed at 12 data from EU publicity map 1999} brush.color := clyellow; for j := 0 to n do begin a := 2*pi*j/n; drawstar( w div 2 + round( r * sin(a)), h div 2 + round( r * cos(a)), (4*h) div 100); end;{for} end; {with} end; procedure TForm1.Button1Click(Sender: TObject); begin FormPaint(Self); end; procedure TForm1.Button2Click(Sender: TObject); begin // 1 Stern mit 5 Zacken drawstar(150,150,150); end; |
Re: Stern zeichnen mit line to und move to
@hathor: Es ist nicht Sinnvoll, einfach eine Lösung in den Raum reinzuwerfen wenn es darum geht, dass er es auch verstehen muss.
Naja wie dem auch sei. Du hast da wohl einen kleinen Fehler in deiner Schleife Bisher hast du ja das hier
Delphi-Quellcode:
Nur bleibt für jeden Zacken X = const. D.h. Du hast immer nur gleich lange "Spitzen"
var
index,x,xi,yi: integer; begin image1.Canvas.moveto(xm,ym); x:=Anzahl_Punkte mod 2; for index:=1 to Anzahl_Punkte do if x=0 then begin xi:=trunc (ri*cos(index*winkelstueck)); yi:=trunc (ri*sin(index*winkelstueck)); image1.Canvas.LineTo(xi,yi) end else begin xi:=trunc (ra*cos(winkelstueck)); yi:=trunc (ra*sin(winkelstueck)); image1.Canvas.lineto(xi,yi); end; end; Vllt. solltest du es mit so etwas versuchen
Delphi-Quellcode:
Beachte das die Berechnung noch nicht korrigiert ist das musst du noch machen (Mittelpunk mit einbeziehen).
var
i,xi,yi: integer; begin xi := trunc (ra*cos(0)); yi := trunc (ra*sin(0)); image1.Canvas.moveto(xi,yi); winkelstueck := 1/Anzahl_Spitzen * ???; for i := 0 to Anzahl_Spitzen-1 do begin // Spitze zeichnen xi := trunc (ra*cos(i*winkelstueck)); //Noch falsch yi := trunc (ra*sin(i*winkelstueck)); //Noch falsch image1.Canvas.LineTo(xi,yi); // Gegenstück zur Spitze zeichnen (das ding da was näher am Mittelpunkt liegt xD) xi := trunc (ri*cos((i+0.5)*winkelstueck)); //Noch falsch yi := trunc (ri*sin((i+0.5)*winkelstueck)); //Noch falsch image1.Canvas.lineto(xi,yi); end; end; EDIT: Im zweiten code bei der Nicht-Spitze wurde auch noch mit Index multipliziert, was bei dir im unteren Teil deines Codes noch gefehlt hat. MFG |
Re: Stern zeichnen mit line to und move to
Zitat:
Du und alle anderen können sich in Zukunft solche Bemerkungen sparen. |
Re: Stern zeichnen mit line to und move to
[OT]
Bis jmd. nach so etwas sucht, wird sich hier sicherlich eine Lösung gefunden haben. Und der Thread-Ersteller wird seine Lösung dann sicherlich posten. [/OT] MFG |
Re: Stern zeichnen mit line to und move to
Zitat:
![]() Zur Konstruktion: Für einen Stern mit n Zacken einfach 2n Punkte nehmen und sie gleichmäßig um einen gewählten Mittelpunkt verteilen, mit abwechselnd hohem und niedrigem Abstand. -> Sinus, Cosinus, ... (hat also gewissermaßen Ähnlichkeiten mit der polaren Darstellung von r=f(t)=sin(n*t)/a+b+1/a) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:16 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 by Thomas Breitkreuz