Kreis zeichnen
spacer
Autor Nachricht
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 markieren
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
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Moderator
Beiträge: 8118
Erhaltene Danke: 251

Win XP, Win 7
D7 PE, RAD Studio 2009 Professional
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.

_________________
Oel ngati kameie.

Für diesen Beitrag haben gedankt: maxrus
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
maxrus Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Di 06.12.11 17:49 
danke, hat geklappt
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
ub60
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Beiträge: 452
Erhaltene Danke: 6



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

ausblenden Delphi-Quelltext markieren
1:
Arc(0, 0, 200, 200, 100, 0, 0, 100);

Den Rest zum Befehl findest Du in der Hilfe.

ub60
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
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 markieren
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 :(
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
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 markieren
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
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Holg_i
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75



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 markieren
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????
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
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 markieren
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
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Holg_i
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75



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.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
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?
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Holg_i
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75



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

Also Du tippst:

ausblenden Delphi-Quelltext markieren
1:
r:=99


Und weiter unten schreibst du

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


Richtig???

Warum sollte r nicht kleiner als 100 sein. Bzw wie sollte r <>99 sein.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
ub60
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Beiträge: 452
Erhaltene Danke: 6



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
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
home home