画正弦曲线的问题,如何控制画几个周期?(20分)

  • 主题发起人 主题发起人 lcl_003
  • 开始时间 开始时间
L

lcl_003

Unregistered / Unconfirmed
GUEST, unregistred user!
我用timer画正弦曲线,但是不知道如何控制画几个周期。比如我只想画两个周期?

procedure TForm1.Timer1Timer(Sender: TObject);
var
x,j:integer;
begin
for x:=0 to 10 do
begin
series1.AddXY(i,10*Sin(i/8-1)+30);
i:=I+0.5;
end;

if series1.Count>300 then
series1.Clear;
end;
 
正弦曲线:y=sinx
x每增加或减少1就是一个周期(不确定,最好翻翻书[8D])
 
i/8,改成i/2
 
zw84611, 不行,就要i/8
 
[:)]
procedure TForm1.Button1Click(Sender: TObject);
var i,j:integer;
x,y:real;
halfheight:integer;
begin
form1.Refresh;
halfheight:=form1.Height div 2;

for i:=1 to trunc(form1.Width) do
begin
x:=i*(4*PI/form1.Width);
y:=sin(x);
j:=trunc(y*100)+halfheight;
canvas.Pixels[i,j]:=clred;
end;

x:=3*form1.Width/4; //画竖线
i:=trunc(x);
with canvas do
begin
pen.Color:=clgreen;
moveto(i,0);
lineto(i,form1.Height);
end;
end;

procedure TForm1.FormPaint(Sender: TObject);
var i,j:integer; x,y:real; halfheight:integer;
begin
x:=form1.Width/4; //坐标系
i:=trunc(x);
y:=form1.Height/2;
j:=trunc(y);
with canvas do
begin
moveto(i,0);
lineto(i,form1.Height);
moveto(0,j);
lineto(form1.Width,j);
end;
end;
 
不对,曲线要慢慢画出来,不是一下就画出来。给点思路也行啊
 
能不能反过来控制?
因为SIN(X)的值在一个周期内除了1和-1外都会出现两次
10*Sin(i/8-1)+30也是一样,记录下起点的值,这是第0次出现,以后每次出现则加1,
当第四次出现时就是两个周期,其他依此类推。

还有就是可以计算出要循环的次数:
10*Sin(i/8-1)+30的周期是16PI……
 
多人接受答案了。
 
后退
顶部