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