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



BeitragVerfasst: 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

ausblenden volle Höhe 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;
  //xm:=x div 2;
  //ym:=y div 2;
  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.MoveTo(0,0);
  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 user profile iconGausi: Delphi-Tags hinzugefügt


Zuletzt bearbeitet von maxrus am Mi 07.12.11 15:05, insgesamt 1-mal bearbeitet
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8535
Erhaltene Danke: 473

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Di 06.12.11 17:49 
danke, hat geklappt
ub60
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 762
Erhaltene Danke: 127



BeitragVerfasst: Di 06.12.11 19:09 
Übrigens gibt es dafür auch einen Befehl. Probiere doch mal

ausblenden Delphi-Quelltext
1:
Arc(0020020010000100);					

Den Rest zum Befehl findest Du in der Hilfe.

ub60
maxrus Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Mi 07.12.11 14:54 
user profile iconub60 hat folgendes geschrieben Zum zitierten Posting springen:
Übrigens gibt es dafür auch einen Befehl. Probiere doch mal

ausblenden Delphi-Quelltext
1:
Arc(0020020010000100);					

Den Rest zum Befehl findest Du in der Hilfe.

ub60






wir dürfen leider solche Befehle nicht benutzen :(
maxrus Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: 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


ausblenden volle Höhe 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;
  //xm:=x div 2;
  //ym:=y div 2;
  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.MoveTo(0,0);
  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 user profile iconMartok: Quote- durch Delphi-Tags ersetzt
Holg_i
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 79



BeitragVerfasst: 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.

ausblenden volle Höhe 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); 

          {**  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.


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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: 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


ausblenden 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);-------------->//wenn ich random größere oder kleinere zahl eintippe, dann zeichnet er mir auch nichts
   y2:=random(300);
   pyt:=(x2*x2)+(y2*y2);---------------->//Die zwei schritte verstehe ich nicht
  if pyt<=90000 then-------------------->// warum 90000?? wenn ich was anderes eintippe,zeichnet er mir nichts mehr
  begin
   application.ProcessMessages;
   image1.Canvas.Pixels[x2,y2]:=clred;
   label1.caption:=inttostr(image1.Canvas.Pixels[x2,y2]); ---->// Hier wollte ich anzahl pixel auslesen,klappt auch nicht
  end
  else
   image1.Canvas.Pixels[x2,y2]:=clblue;

   label2.caption:=inttostr(image1.Canvas.Pixels[x2,y2]);
  end;


Moderiert von user profile iconMartok: Delphi-Tags hinzugefügt
Holg_i
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 79



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Mi 07.12.11 19:21 
user profile iconHolg_i hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 79



BeitragVerfasst: Mi 07.12.11 20:00 
Einwenig solltest Du echt mitdenken. Du willst doch etwas lernen oder???

Also Du tippst:

ausblenden Delphi-Quelltext
1:
r:=99					


Und weiter unten schreibst du

ausblenden Delphi-Quelltext
1:
2:
 if r<100 then  
 begin


Richtig???

Warum sollte r nicht kleiner als 100 sein. Bzw wie sollte r <>99 sein.
ub60
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 762
Erhaltene Danke: 127



BeitragVerfasst: 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