Autor Beitrag
Petunia
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Sa 19.02.05 19:33 
Hi!
Beim folgendem wird ein Koordinatensystem erstellt, die Einteilung der x-Achse ist richtig, aber wie bekomme ich das mit der y-Achse hin?

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:
with image1.canvas do
begin
moveto(200,5);
lineto(200,395);

for e:=1 to 19 do
begin
moveto (e*195,390);
lineto(e*205,390);
textout(e*185,380,inttostr(e-10));
textout(180,3,'y');
end;

moveto(5,200);
lineto(395,200);

for e:=1 to 9 do
begin
moveto (e*40,195);
lineto(e*40,205);
textout(e*40-3,207,inttostr(e-5));
textout(398,205,'x');
end;


Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt.
OneOfTen
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 19.02.05 19:52 
kanns nicht testen, daher ist es schwierig zu sagen, was falsch ist.
ich schätze, die untere For-Schleife ist für die x-Achse und deren Einteilung zuständig und die obere für die y-Achse. Dann muss doch aber die y-Variable variabel sein, nicht so:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
for e:=1 to 19 do  
begin  
moveto (e*195,390);  
lineto(e*205,390);  
textout(e*185,380,inttostr(e-10));  
textout(180,3,'y');  
end;


sondern so:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
for e:=1 to 19 do  
begin  
moveto (195,e*390);  
lineto(205,e*390);  
textout(185,e*380,inttostr(e-10));  
textout(180,3,'y');  
end;


ich kann aber nicht sagen, wie die Zahlen in diesem Beispiel gesetzt werden müssen
Petunia Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Sa 19.02.05 20:57 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
 for e:=1 to 19 do    
begin    
moveto (195,e*390);    
lineto(205,e*390);    
textout(185,e*380,inttostr(e-10));    
textout(180,3,'y');    
end;

Das geht noch nicht ganz, denn es erscheint nur ein Strich auf der y-Achse.Wie bekomme ich mehrere Striche?

Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt.
Petunia Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: So 20.02.05 08:00 
Das mit den Einteilungsstrichen geht, aber wie bekomme ich es hin das die Beschriftung richtig ist, in diesem fall stehen da wo normalerweise die positiven Zahlen stehen, die negativen und umgekehrt.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
for e:=1 to 19 do
begin
moveto (195,e*20);
lineto(205,e*20);
textout(185,e*20,inttostr(e-10));
textout(180,3,'y');
end;


Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt.
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: So 20.02.05 09:57 
1. Ich würde dir raten, deinen Code besser darzustellen. Du solltest nach jedem Begin ein oder zwei Zeichen einrücken.
2. Definier Konstanten wie ZentrumX, ZentrumY, die "Range" und den Einheitsabstand in Pixel.

Achse in x-Richtung zeichnen:
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:
var
 I, W, H, ZentrumX, ZentrumY : Integer;
 S : String;
const
 EinheitX = 20;
 EinheitY = -20; // Koordinatensystem auf den Kopf stellen
 XMin = -5;
 XMax = 5;
 YMin = -5;
 YMax = 5;
 Markierung = 3;
begin
 with Image1 do
 begin
  ZentrumX := Width div 2;
  ZentrumY := Height div 2;
 end;
 with Image1.Canvas do
 begin
  MoveTo(ZentrumX+XMin*EinheitX, ZentrumY);
  LineTo(ZentrumX+XMax*EinheitX, ZentrumY);
  For I := XMin to XMax do
  begin
   MoveTo(ZentrumX+I*EinheitX, ZentrumY-Markierung);
   LineTo(ZentrumX+I*EinheitX, ZentrumY+Markierung);
   S := inttostr(I);
   W := Image1.Canvas.TextWidth(S);
   H := Image1.Canvas.TextHeight(S);
   TextOut(ZentrumX-W div 2+I*EinheitX, ZentrumY-H-Markierung, S);
  end;
 end;


Das ganze dann für Y umzuschreiben sollte dann keine Hexerei mehr sein. Du musst einfach die Argumente für X und Y bei allen Funktionen und richtig umbenennen vertauschen.