Hab mir erlaubt deinen Code mal etwas einzurücken, damit man ihn besser lesen kann.
Delphi-Quellcode:
procedure TForm1.BitBtn1Click(Sender: TObject);
var h,j,x,e1,e2,e3,e4:integer;
a,b,c,d,y:real;
begin
FOR j:=1 to 300 do
begin
form1.canvas.pixels[30,30+j]:=clblack;
if j<=20 then
begin
form1.Canvas.Pixels[30-j,30+j]:=clblack;
form1.Canvas.Pixels[50-j,50-j]:=clblack;
end;
end;
for h:=1 to 550 do
begin
form1.canvas.pixels[20+h,320]:=clblack;
if h<=20 then
begin
form1.canvas.pixels[570-h,320+h]:=clblack;
form1.canvas.pixels[570-h,320-h]:=clblack;
end;
end;
val(edit1.Text,a,e1);
val(edit2.Text,b,e2);
val(edit3.Text,c,e3);
val(edit4.Text,d,e4);
if (e1<>0) and (e2<>0) and (e3<>0) and (e4<>0) then
application.MessageBox('Falsche Eingabe','Fehler',MB_ok)
else
for x:=30 to 550 do
begin
y:=a*sin(b*x + c)+d;
form1.Canvas.Pixels[30+round(100*y),320]:=clblack;
end;
end;
Im Endeffekt geht es ja nur um diese Zeilen:
Delphi-Quellcode:
for x:=30 to 550 do
begin
y:=a*sin(b*x + c)+d;
form1.Canvas.Pixels[30+round(100*y),320]:=clblack;
end;
Wie Wolfgang und Namenlozer schon richtig geschrieben haben, muss du dir nur überlegen wie du
1) ein umgerechnetes x zum Einsetzten in die Formel kriegst
2) y skalieren muss damit das Ergebnis passt
3) hast du in Pixels [x,y] etwas stehen das ich nicht verstehe, das kann so nicht stimmen
Denkanstoss:
Delphi-Quellcode:
for x := 30 to 550 do
begin
x2 := x / faktor // (weil ich in die sinusformel nicht pixel sondern meinen normalen Wertebereich einsetze
y := sin(x2);
y := 100 - (y * streckfaktor); // damit die sinuskurve auch höher als 1 pixel wird
canvas.pixels [x,y] := clBlack;
end
Gibt immer noch eine pixelige Kurve aber sollte funzen. Wenn du cool bist dann kommst du auf den Faktor nicht durch probieren sondern durch nachdenken.
Weiters muss du aus y einen integer machen bevor du ihn in canvas.pixels verwendest. ZB so: canvas.pixels [x,round(y)] := clBlack;
Warum euer Lehrer euch nicht canvas.lineto verwenden lässt kann ich zwar nicht nachvollziehen, aber egal. Weiters könnte man noch andenken für x kleinere Schritte als 1 zu nehmen, dann würden auch entsprechend mehr Punkte erscheinen.