• 画出太极图


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

  • 相关阅读:
    反射
    定义类
    集合list,set,Map
    API util
    进程与多线程
    泛型
    API string
    JDBC存储过程
    预处理
    JDBC
  • 原文地址:https://www.cnblogs.com/findumars/p/5011853.html
Copyright © 2020-2023  润新知