Autor |
Beitrag |
maxrus
      
Beiträge: 20
|
Verfasst: So 07.11.10 20:41
Hallo,
habe folgendes Problem, ich will auf einem Quadratischen Imagefeld Kantenlänge 300 beim Programmstart schwarzen viertel Kreis mit dem Mittelpunkt (0,0) und dem Radius von 300 aus 100 Geradstücken zeichen.Habe versucht das irgendwie selber zu basteln, weiß aber nicht genau wie man mit for Schleife richtig umgeht. Würde mich freuen wenn jemand hier Ahnung hat und mir weiter helfen kann
PS: mein Quelltext:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| var Form1: TForm1;
implementation
{$R *.dfm} var r,anzahl_der_Balken,hoehe,breite:integer; procedure TForm1.Button1Click(Sender: TObject); begin r:=300; hoehe:=300; breite:=300; image1.Canvas.Ellipse(breite ,hoehe,-breite,-hoehe); anzahl_der_Balken:=100; image1.Canvas.MoveTo(0,0); for anzahl_der_Balken:=1 to 100 do begin image1.Canvas.LineTo(hoehe,0);
end; end;
end. |
Moderiert von Kha: Delphi-Tags hinzugefügt
|
|
jfheins
      
Beiträge: 918
Erhaltene Danke: 158
Win 10
VS 2013, VS2015
|
Verfasst: So 07.11.10 20:56
Von der herangehensweise: Du musst in jedem Durchlauf eine Linie zeichnen, und den endpunkt immer um ein delta weiterdrehen. Die kooradinaten des Endpunkts musst du mit sin() und cos() berechnen (Math-Unit einbinden !)
Um auch ein wenig Code zu liefern, so sollte das ungefähr aussehen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| image1.Canvas.Ellipse(breite ,hoehe,-breite,-hoehe);
delta = Pi/200;
for i:=1 to 100 do begin image1.Canvas.MoveTo(0,0); image1.Canvas.LineTo(r * Cos(delta * i),r * Sin(delta * i)); end; | Nein, das sollst du nicht einfach kopieren. Mir ist bewusst dass das nicht einfach so kompilieren wird 
Für diesen Beitrag haben gedankt: maxrus
|
|
maxrus 
      
Beiträge: 20
|
Verfasst: So 07.11.10 21:14
Okay kliengt erst mal logisch
Moderiert von Martok: Fullquote entfernt.
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: So 07.11.10 21:16
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| var r,anzahl_der_Balken,hoehe,breite:integer; procedure TForm1.Button1Click(Sender: TObject); var x,y:Integer; begin r:=300; hoehe:=300; breite:=300; image1.Canvas.Ellipse(breite ,hoehe,-breite,-hoehe); anzahl_der_Balken:=100; image1.Canvas.MoveTo(0,0); for anzahl_der_Balken:=0 to 100 do begin x := anzahl_der_Balken*3; y := Round(sqrt((r*r) - (x*x))); image1.Canvas.MoveTo(x,0); image1.Canvas.LineTo(x,y); end; end; |
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: So 07.11.10 21:31
oder meintest Du so??
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| var r,anzahl_der_Balken,hoehe,breite:integer; procedure TForm1.Button1Click(Sender: TObject); var x,y:Integer; Function GetGrad(G:Double):Double; begin Result := 2*PI * G; end; begin r:=300; hoehe:=300; breite:=300; image1.Canvas.Ellipse(breite ,hoehe,-breite,-hoehe); anzahl_der_Balken:=100; image1.Canvas.MoveTo(0,0); for anzahl_der_Balken:=0 to 100 do begin x := Round(COS(GetGrad(anzahl_der_Balken / 400)) * 300); y := Round(SIN(GetGrad(anzahl_der_Balken / 400)) * 300); image1.Canvas.MoveTo(0,0); image1.Canvas.LineTo(x,y); end; end; |
|
|
|