Autor |
Beitrag |
maxrus
Beiträge: 20
|
Verfasst: Di 06.12.11 17:26
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
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
Zuletzt bearbeitet von maxrus am Mi 07.12.11 15:05, insgesamt 1-mal bearbeitet
|
|
Gausi
Beiträge: 8538
Erhaltene Danke: 475
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: 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.
_________________ We are, we were and will not be.
Für diesen Beitrag haben gedankt: maxrus
|
|
maxrus
Beiträge: 20
|
Verfasst: Di 06.12.11 17:49
|
|
ub60
Beiträge: 762
Erhaltene Danke: 127
|
Verfasst: 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
Beiträge: 20
|
Verfasst: Mi 07.12.11 14:54
|
|
maxrus
Beiträge: 20
|
Verfasst: 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
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
Beiträge: 79
|
Verfasst: 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.
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
Beiträge: 20
|
Verfasst: 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
Beiträge: 79
|
Verfasst: 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
Beiträge: 20
|
Verfasst: 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
Beiträge: 79
|
Verfasst: Mi 07.12.11 20:00
Einwenig solltest Du echt mitdenken. Du willst doch etwas lernen oder???
Also Du tippst:
Delphi-Quelltext
Und weiter unten schreibst du
Delphi-Quelltext
Richtig???
Warum sollte r nicht kleiner als 100 sein. Bzw wie sollte r <>99 sein.
|
|
ub60
Beiträge: 762
Erhaltene Danke: 127
|
Verfasst: Mi 07.12.11 21:09
Ich hoffe, den Pythagoras kennst Du:
a²+b²=c²
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.
WIRKLICH!
ub60
|
|
|