Autor Beitrag
maxrus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: 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:
ausblenden 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 user profile iconKha: Delphi-Tags hinzugefügt
jfheins
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 918
Erhaltene Danke: 158

Win 10
VS 2013, VS2015
BeitragVerfasst: 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:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: So 07.11.10 21:14 
Okay kliengt erst mal logisch

Moderiert von user profile iconMartok: Fullquote entfernt.
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: So 07.11.10 21:16 
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: So 07.11.10 21:31 
oder meintest Du so??
ausblenden 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;