画出太极图

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

效果图如下:

http://www.cnblogs.com/yangyxd/articles/4056603.html

时间: 2024-10-27 14:18:08

画出太极图的相关文章

Python3 Tkinter基础 Canvas bind 绑定左键 鼠标左键点击时,在当前位置画出一个椭圆形

镇场诗: 清心感悟智慧语,不着世间名与利.学水处下纳百川,舍尽贡高我慢意. 学有小成返哺根,愿铸一良心博客.诚心于此写经验,愿见文者得启发.------------------------------------------ code: from tkinter import * root=Tk() w=Canvas(root,width=200,height=200,background='white') w.pack() def paint(event): #event.x 鼠标左键的横坐标

在资源里面画出你的界面

在资源里面画出你的界面.在添加类.然后在视图里定义这个类的指针,DIALOG的指针,还有就是区域对象, 如下Cwindows *tw;  CRect m_cle;CDialogEx *ph;在CPP文件构造函数里初始化ZeroMemory(&m_cle,sizeof(m_cle));tw = new Cwindows(this);:在重写OnCreate(LPCREATESTRUCT lpCreateStruct)函数在里面加上 { if (CView::OnCreate(lpCreateStr

全面总结:MATLAB如何画出漂亮的图

在绘图命令中应该如何确定横坐标和纵坐标的标度尺寸(自己定范围) 如何在一个坐标中绘制多条曲线,并用不同的颜色区别. 希望得到答案,谢谢!!!!!!!!!!! help plot help axis axis ('xlabel','ylabel') a1=plot(); hlod on a2=plot(); legend([a1 a2],'图1名',‘图2名') hold off 还可以更多 x1=-pi:pi/12:pi; x2=-pi:pi/12:pi; y1=sin(x1); y2=cos(

python—networkx:在一张图中画出多个子图

通过plt.subplot能够在一张图中画出多个子图 #coding: utf-8 #!/usr/bin/env python """ Draw a graph with matplotlib. You must have matplotlib for this to work. """ __author__ = """Aric Hagberg ([email protected])"""

achartengine画出动态折线图

achartengine画出动态折线图的效果最近有个项目需要用到实时曲线图,我也上网搜索了一下,最后还是选择使用achartengine这个现成的东西,毕竟自己再canvas一下实在是太麻烦,而且项目时间上也不允许,虽然这个画图引擎比较简单,不过勉强够用了. 下一步问题就来了,我仓促上手,只会画静态图,就是事先定义好几个坐标,然后activity载入的时候折线就已经画好了,可是我的项目要求我每隔一秒种都要把新搜集到的数据添加到图表中去,类似于windows中那个任务管理器里的性能统计图,网上搜来

在Google Map中显示多个Marker并画出Polygon

有时需要在地图显示多个位置并画出多段线 实现后截图: HTML: <!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> <title>Google Maps Multiple Markers</title> <script src="h

二叉树——根据遍历结果,画出对应的二叉树 转载至:http://canlynet.blog.163.com/blog/static/255013652009112602449178/

这道题目很经典,具体如下: 已知遍历结果如下,试画出对应的二叉树: 前序:A B C E H F I J D G K 中序:A H E C I F J B D K G 解题要点: 1.前序.中序.后序——都针对中间那个节点而言(根节点也是中间的节点). 前序,指先遍历中间节点,然后左,然后右. 中序,指左——中——右. 后序,指右——中——左. 2.根据两种不同序列的遍历方法,便可画出二叉树. 解题答案如下:(对照着看会好理解这道题目一些的) 解题思路: 1.前序中序都首先找出A,推断出:A没有

如何用css画出三角形

看到有面试题里会有问到如何用css画出三角形 众所周知好多图形都可以拆分成三角形,所以说会了画三角形就可以画出很多有意思的形状 画出三角形的原理是调整border(边框)的四个方向的宽度,线条样式以及颜色. 如果你将宽度调的足够大,改变不同方向的颜色,你就可以发现盒模型的border是四个梯形一样的线条. 这个时候如果将盒模型内部的height,width调为0px,则三角形就形成了. 1 border:100px solid transparent //边框100px,实线,透明颜色,下面三行

教你分分钟画出越南全境的主干路由拓扑

标题党了一次,用一个高大上的的题目先吸引各位看官点进来. 其实原理很简单,我们要做的工作只是做一些数据处理并最终生成kml脚本呈现在Google Earth上. 进入正题: 首先数据来源http://www.caida.org .这是一个英特网数据分析的合作组织,数据比较权威,全球很多网络方面的科研数据都来源于此. 而对本文有用的信息在这里:http://www.caida.org/data/internet-topology-data-kit/  这里面是一些英特网的拓扑信息数据,而且每半年左