スケッチグラフ

2164 ワード

たまたま
http://blog.csdn.net/hero82748274/archive/2010/02/10/5304386.aspx秀曲線図を見て、GDIで真似しました.GDI+で描くと、図形が細かくなります.
学绘秀曲线图


procedure TForm1.FormPaint(Sender: TObject);

var

  i,j,num,X,Y: Integer;

begin

  num := 60;

  X := 300;

  Y := 300;

  ClientWidth := 2 * X;

  ClientHeight := 2 * Y;



  Canvas.Pen.Width := 1;

  Canvas.Pen.Color := clWhite;

  Canvas.Brush.Color := clNavy;

  Canvas.FillRect(ClientRect);



  for i := 0 to num do for j := 0 to 1 do

  begin

    Canvas.MoveTo(X, i*10);

    if i < 30 then

      if j = 0 then Canvas.LineTo(X-i*10, Y) else Canvas.LineTo(X+i*10, Y)

    else

      if j = 0 then Canvas.LineTo(X-(num-1-i)*10, Y) else Canvas.LineTo(X+(num-1-i)*10, Y);

  end;

end;


 
   

学绘秀曲线图


procedure TForm1.FormPaint(Sender: TObject);

var

  i,j,num,n,X,Y: Integer;

  angle: Single;

  pts: array of array of TPoint;

begin

  num := 20;

  n := 6; {    n := 11           }

  angle := -2 * PI / n;

  X := 210;

  Y := 210;

  ClientWidth := 2*X;

  ClientHeight := 2*Y;



  Canvas.Pen.Width := 1;

  Canvas.Pen.Color := clWhite;

  Canvas.Brush.Color := clNavy;

  Canvas.FillRect(ClientRect);



  SetLength(pts, n+1, num);

  for i := 0 to n do

  begin

    for j := 0 to num-1 do

    begin

      pts[i,j] := Point(Trunc(j*10*Cos(angle*i)+X), Trunc(j*10*Sin(angle*i)+Y));

      Canvas.MoveTo(pts[i,j].X, pts[i,j].Y);

      if i = 0 then

        Canvas.LineTo((num-j)*10+X, Y)

      else

        Canvas.LineTo(pts[i-1, num-1-j].X, pts[i-1, num-1-j].Y);

    end;

  end;

end;


 
   

学绘秀曲线图