Entwickler-Ecke
Multimedia / Grafik - Kreis zeichnen
maxrus - Di 06.12.11 17:26
Titel: Kreis zeichnen
Hallo,
jetzt will ich im Programm einpaar zusätzliche Änderungen vornehmen, und zwar innerhalb des Viertekreises will ich rote Pixel rein regnen lassen und ausserhalb blaue. Irgendwie geht es wieder nicht?!!!!
Kann mir jemand sagen warum?
Das ist mein Programm
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: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39:
| procedure TForm1.Button1Click(Sender: TObject); var x2,y2,j,xm,ym,x,y,x1,y1,r,anzahl_der_ecken,i:integer; winkel:double; begin x:=image1.Width; y:=image1.Height; image1.Canvas.Brush.Color:=clwhite; image1.Canvas.FillRect(0,0,x,y); r:=99; anzahl_der_ecken:=1360; winkel:=(2*pi)/anzahl_der_ecken;
for i:=0 to 360 do begin x1:=round(r*cos(winkel*i)); y1:=round(r*sin(winkel*i));
image1.Canvas.Pen.Color:=clgreen; image1.Canvas.LineTo(x1,y1); if r<100 then begin application.ProcessMessages; x2:=random(300); y2:=random(300); image1.Canvas.Pixels[x2,y2]:=clred; end; end; end;
procedure TForm1.Button2Click(Sender: TObject); begin close; end;
end. |
Moderiert von Gausi: Delphi-Tags hinzugefügt
Gausi - Di 06.12.11 17:31
Das sollte gehen, indem du das MoveTo aus der Schleife rausnimmst. Dadurch gehst du mit dem Zeichenstift ja immer wieder zurück zum Mittelpunkt des Kreises, wenn ich das richtig sehe.
maxrus - Di 06.12.11 17:49
danke, hat geklappt
ub60 - Di 06.12.11 19:09
Übrigens gibt es dafür auch einen Befehl. Probiere doch mal
Delphi-Quelltext
1:
| Arc(0, 0, 200, 200, 100, 0, 0, 100); |
Den Rest zum Befehl findest Du in der Hilfe.
ub60
maxrus - Mi 07.12.11 14:54
ub60 hat folgendes geschrieben : |
Übrigens gibt es dafür auch einen Befehl. Probiere doch mal
Delphi-Quelltext 1:
| Arc(0, 0, 200, 200, 100, 0, 0, 100); |
Den Rest zum Befehl findest Du in der Hilfe.
ub60 |
wir dürfen leider solche Befehle nicht benutzen :(
maxrus - Mi 07.12.11 17:29
Hallo,
jetzt will ich im Programm einpaar zusätzliche Änderungen vornehmen, und zwar innerhalb des Viertekreises will ich rote Pixel rein regnen lassen und ausserhalb blaue. Irgendwie geht es wieder nicht?!!!!
Kann mir jemand sagen warum?
PS: ein Teil der Aufgabe hab ich aus versehen gelöscht: das war ein viertelkreis im imagefeld zeichnen
---------------------------------------------------------------------
Das ist mein Programm
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: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44:
| procedure TForm1.Button1Click(Sender: TObject); var x2,y2,j,xm,ym,x,y,x1,y1,r,anzahl_der_ecken,i:integer; winkel:double; begin x:=image1.Width; y:=image1.Height; image1.Canvas.Brush.Color:=clwhite; image1.Canvas.FillRect(0,0,x,y); r:=99; anzahl_der_ecken:=1360; winkel:=(2*pi)/anzahl_der_ecken;
for i:=0 to 360 do begin x1:=round(r*cos(winkel*i)); y1:=round(r*sin(winkel*i));
image1.Canvas.Pen.Color:=clgreen; image1.Canvas.LineTo(x1,y1); -----------------------------------------Ab hier gehts los mit Pixeln if r<100 then begin application.ProcessMessages; x2:=random(300); y2:=random(300); image1.Canvas.Pixels[x2,y2]:=clred; end; end;
end;
procedure TForm1.Button2Click(Sender: TObject); begin close; end;
end. |
Moderiert von Martok: Quote- durch Delphi-Tags ersetzt
Holg_i - Mi 07.12.11 18:04
Da ich schon mal hier bin und verzweifelt nachschaue ob sich einer mein Problem annimt, möchte ich mal versuchen Dir zu helfen.
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: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40:
| procedure TForm1.Button1Click(Sender: TObject); var x2,y2,j,xm,ym,x,y,x1,y1,r,anzahl_der_ecken,i:integer; winkel:double;
begin x:=image1.Width; y:=image1.Height; image1.Canvas.Brush.Color:=clwhite; image1.Canvas.FillRect(0,0,x,y); r:=99; anzahl_der_ecken:=1360; winkel:=(2*pi)/anzahl_der_ecken;
for i:=0 to 360 do begin x1:=round(r*cos(winkel*i)); y1:=round(r*sin(winkel*i));
image1.Canvas.Pen.Color:=clgreen; image1.Canvas.LineTo(x1,y1);
if r<100 then begin application.ProcessMessages; x2:=random(300); y2:=random(300); image1.Canvas.Pixels[x2,y2]:=clred; end; end; end;
procedure TForm1.Button2Click(Sender: TObject); begin close; end;
end. |
Also zum einen Formatiere Deinen Code sauber so kann man es besser lesen und man behält den Überblick.
Zum anderen, ohne genau gelesen zu haben und Dir nur auf die Sprünge zu helfen. Was passiert mit deinem r????
maxrus - Mi 07.12.11 18:34
joa meine Code ist unsauber weil ich die ganze zeit was ausprobiere, da was löschen hier was einfügen usw.....
also zu r: ich habe mir das so gedacht wenn r<100 ist, dann setzt er mir rote pixel rein also im innenkreis, ansonsten blaue pixel also ausserhalb des kreises.
ich habe eine ähnliche aufgabe mit lösung gefunden, habe jetzt auch geschaft paar punkte zu setzen, aber ich verstehe die formel nicht.... das ist sowas wie phytagoras (aber ohne wurzel) : siehe kommentare
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| for i:=0 to 360 do begin x1:=round(r*cos(winkel*i)); y1:=round(r*sin(winkel*i)); image1.Canvas.Pen.Color:=clgreen; image1.Canvas.LineTo(x1,y1); x2:=random(300);--------------> y2:=random(300); pyt:=(x2*x2)+(y2*y2);----------------> if pyt<=90000 then--------------------> begin application.ProcessMessages; image1.Canvas.Pixels[x2,y2]:=clred; label1.caption:=inttostr(image1.Canvas.Pixels[x2,y2]); ----> end else image1.Canvas.Pixels[x2,y2]:=clblue;
label2.caption:=inttostr(image1.Canvas.Pixels[x2,y2]); end; |
Moderiert von Martok: Delphi-Tags hinzugefügt
Holg_i - Mi 07.12.11 18:53
Noch einmal meine Frage... was machst Du mit r in deinem Code?????
Schau Dir Dein Programm an nicht andere.
maxrus - Mi 07.12.11 19:21
Holg_i hat folgendes geschrieben : |
Noch einmal meine Frage... was machst Du mit r in deinem Code?????
Schau Dir Dein Programm an nicht andere. |
das ist der radius von meinem Kreis, oder was meinst du?
Holg_i - Mi 07.12.11 20:00
Einwenig solltest Du echt mitdenken. Du willst doch etwas lernen oder???
Also Du tippst:
Und weiter unten schreibst du
Richtig???
Warum sollte r nicht kleiner als 100 sein. Bzw wie sollte r <>99 sein.
ub60 - Mi 07.12.11 21:09
Ich hoffe, den Pythagoras kennst Du:
a²+b²=c² :D
In Deinem Beispielquelltext ist der Radius mit maximal 300 angegeben (siehe Random), und 300²=90000.
Bei Deinem eigenen Programm muss hier natürlich wegen r=100 der Wert 10000 stehen. In den ersten Programmen fehlt die Berechnung von r komplett.
>joa meine Code ist unsauber weil ich die ganze zeit was ausprobiere
Gewöhne Dir doch einfach an, auch beim Probieren sauberen Code zu schreiben, dann verstehst Du es auch beim Probieren besser. :lol:
WIRKLICH! :roll:
ub60
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!