• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

【Delphi】画出太极图

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

今天在网上看到有网友发出了C++的生成太极图算法,兴起之下用Delphi抄了下,效果还可以。

参考地址:http://www.cnblogs.com/WhyEngine/p/4051149.html

先上代码:

procedure TForm1.Button1Click(Sender: TObject);
var
  Cs: TCanvas;
  s: Double;
  i, j, aoffset, r: Cardinal;
begin
  cs := Canvas;
  cs.Brush.Color := clGray;
  cs.FillRect(cs.ClipRect);
  aoffset := 34;
  r := StrToIntDef(edit1.Text, 96);
  s := StrToFloatDef(edit2.Text, 0.2);
  for I := 0 to ClientWidth - aoffset * 2 do
    for j := 0 to ClientHeight - aoffset * 2 do
      CalculatePixel(Cs, i, j, aoffset, r, s)
end;

// r 为太极图的半径,s 为中间两个小圆的缩放比例
procedure TForm1.CalculatePixel(cs: TCanvas; x, y, offset: Cardinal; r, s: Extended);

  procedure SetColor(color: TColor);
  begin
    cs.Pixels[x+offset, y+offset] := color;
  end;

var
  r1, r2, rr: Extended;
  i, j, t, tt: Extended;
begin
  r1 := r;
  r2 := r1 * s;
  rr := r1 * r1;

  i := r - x;
  j := r - y;

  if (i * i + j * j) > rr then
    Exit;

  t := j + r1 * 0.5;
  tt := t * t + i * i;
  if tt < r2 * r2 then begin
    SetColor(clWhite);
    Exit;
  end else if tt < rr * 0.25 then begin
    SetColor(clBlack);
    Exit;
  end;

  t := j - r1 * 0.5;
  tt := t * t + i * i;
  if tt < r2 * r2 then begin
    SetColor(clBlack);
    Exit;
  end else if tt < rr * 0.25 then begin
    SetColor(clWhite);
    Exit;
  end;

  if i < 0.0 then
    SetColor(clWhite)
  else
    SetColor(clBlack);
end;

 

效果图如下:

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
DelphiTDatabase组件发布时间:2022-07-18
下一篇:
Delphi多线程编程中的技巧发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap