您现在的位置: 天下网吧 >> 网吧天地 >> 天下码农 >> 后端开发 >> PHP >> 正文

用Delphi编写圆周率模拟器[2]

2008-11-7网络佚名

  程序首先在Image1控件区域内画一个边长为200的正方形作为程序的演示窗口,故FormCreate事件如下:

  procedure TForm1.FormCreate(Sender: TObject);
  begin
  // 画亮绿色的正方形演示框
  Image1.Canvas.Brush.Color:=clBlack;
  Image1.Canvas.FillRect(Rect(0,0,199,199));
  Image1.Canvas.Pen.Color:=cllime;
  Image1.Canvas.Rectangle(0,0,199,199);
  DoubleBuffered := True;
  end;

  接着放入一个Timer实现点的绘制以及π的计算:

  procedure TForm1.Timer1Timer(Sender: TObject);
  var
  a,b,i,ii:longint;
  pi,piok:single;
  begin
  // 随机产生坐标点
  i:=random(200);
  ii:=random(200);

  if (i*i+ii*ii<40000) then
  begin
  // 以200为半径的圆内的点设为蓝色
  Image1.canvas.Pen.Color:=claqua;
  a:=StrToInt(Label1.Caption);
  Label1.Caption:=IntToStr(a+1);
  //显示当前点的坐标
  Label6.Caption:=IntToStr(Image1.Canvas.PenPos.X);
  Label7.Caption:=IntToStr(Image1.Canvas.PenPos.Y);
  end
  else
  begin
  // 超出这个区域的点都在圆外设为黄色
  Image1.Canvas.Pen.Color:=clyellow;
  b:=StrToInt(Label2.Caption);
  Label2.Caption:=IntToStr(b+1);
  end;

  // 画点(长为1像素的直线)
  Image1.Canvas.MoveTo(i,ii);
  Image1.Canvas.LineTo(i,ii+1);

  // 计算pi的值
  pi:=(4*(StrToInt(Label1.Caption))/(StrToInt(Label1.Caption)+StrToInt(Label2.Caption)));
  Label3.Caption:=FloatToStr(pi);
  // Label4显示的是最接近真实pi的值。
  piok:=StrToFloat(Label4.Caption);
  //得出最接近的圆周率值 piok
  if (abs(pi-3.141592653589))<(abs(piok-3.141592653589)) then
  Label4.Caption:=FloatToStr(pi);
  end;

  最后加入两个SpeedButton作为开始和暂停按钮,代码分别是Timer1.Enabled:=true;和Timer1.Enabled:=false;。好了,程序这样就完成了,赶快按下F9亲自模拟一下π的计算吧!

  三、小结

  虽然程序并没有采用圆周率的算法,但能通过随机数对π进行逼近,而由无数点描成的美妙圆弧让我们叹为观止。其实,这样的思想可以用于许多场合,比如对某个数学定理或者自然规律(彩票?)进行模拟,希望这样的思路对您有所启发。

欢迎访问最专业的网吧论坛,无盘论坛,网吧经营,网咖管理,网吧专业论坛 https://bbs.txwb.com

关注天下网吧微信/下载天下网吧APP/天下网吧小程序,一起来超精彩

本文来源:网络 作者:佚名

声明
声明:本站所发表的文章、评论及图片仅代表作者本人观点,与本站立场无关。若文章侵犯了您的相关权益,请及时与我们联系,我们会及时处理,感谢您对本站的支持!联系邮箱:support@txwb.com,系统开号,技术支持,服务联系QQ:1175525021本站所有有注明来源为天下网吧或天下网吧论坛的原创作品,各位转载时请注明来源链接!
天下网吧 网吧天下