当前位置: 首页 > news >正文

【Delphi】画出太极图

今天在网上看到有网友发出了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;

 

效果图如下:

 

转载于:https://www.cnblogs.com/yangyxd/articles/4056603.html

相关文章:

  • jsp页面传值给另一个jsp页面
  • eclipse 2014-10-30
  • 很好的飞信!
  • os
  • [NHibernate]一对多关系(关联查询)
  • this web application instance has been stopped already. Could not load java.net.BindException
  • L3 MPLS ××× InterAS Option B: MP-eBGP between ASBRs
  • SVN完全备份svnadmin hotcopy
  • 几条关于异常处理的备忘
  • BASE64转换,内含:IOS自带DES加解密
  • 理解javascript 回调函数
  • Linux下oracle11g 导入导出操作详细
  • linux 文件操作
  • unity 2d 和 NGUI layer
  • 抽象类 接口
  • Apache Pulsar 2.1 重磅发布
  • Git同步原始仓库到Fork仓库中
  • golang中接口赋值与方法集
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • Kibana配置logstash,报表一体化
  • PermissionScope Swift4 兼容问题
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 双管齐下,VMware的容器新战略
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • ​业务双活的数据切换思路设计(下)
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • ###STL(标准模板库)
  • #if 1...#endif
  • (3)nginx 配置(nginx.conf)
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (二)Eureka服务搭建,服务注册,服务发现
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (一)u-boot-nand.bin的下载
  • (转)setTimeout 和 setInterval 的区别
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .net经典笔试题
  • .net图片验证码生成、点击刷新及验证输入是否正确
  • .Net小白的大学四年,内含面经
  • @Documented注解的作用
  • []利用定点式具实现:文件读取,完成不同进制之间的
  • [2021ICPC济南 L] Strange Series (Bell 数 多项式exp)
  • [ABP实战开源项目]---ABP实时服务-通知系统.发布模式
  • [BROADCASTING]tensor的扩散机制
  • [C#]使用PaddleInference图片旋转四种角度检测
  • [ccc3.0][数字钥匙] UWB配置和使用(二)
  • [dfs] 图案计数
  • [Docker]三.Docker 部署nginx,以及映射端口,挂载数据卷
  • [Docker]十二.Docker consul集群搭建、微服务部署,Consul集群+Swarm集群部署微服务实战
  • [echarts] y轴不显示0
  • [HackMyVM]靶场 Quick3
  • [Hive] CTE 通用表达式 WITH关键字