我选修计算机图形学,马上交作业,那位高手帮帮忙

解决方案 »

  1.   

    procedure circle(x0,y0,x,y:integer);
     begin
      with form1.Canvas do begin
      pen.Color:=clred;
      brush.Color:=clred;
      brush.color:=clred;
        pixels[x0+x,y0+y]:=clred;
    pixels[x0+x,y0-y]:=clred;
    pixels[x0-x,y0-y]:=clred;
    pixels[x0-x,y0+y]:=clred;
      end;
      end;
    procedure TForm1.FormCreate(Sender: TObject);
    var
       x0,y0,x,y,a,b:integer;
       d1,d2:real;
    begin
       x0:=300;
       y0:=200;
       a:=200;   b:=100;   x:=0;   y:=b;
       d1:=b*b+a*a*(-b+0.25);
       circle(x0,y0,x,y);
       while(b*b*(x+1)<a*a*(y-0.5))do
        if(d1<0) then
        begin
        d1:=d1+b*b*(2*x+3);
        x:=x+1;
        circle(x0,y0,x,y);
        end
       else
        begin
        d1:=d1+b*b*(2*x+3)+a*a*(-2*y+2);
            x:=x+1;
            y:=y-1;
             circle(x0,y0,x,y);
        end;
          circle(x0,y0,x,y);
        d2:=sqr(b*(x+0.5))+sqr(a*(y-1))-sqr(a*b);
         circle(x0,y0,x,y);
        while (y>0)do
        if(d2<0)then
        begin
        d2:=d2+b*b*(2*x+2)+a*a*(-2*y+3);
         x:=x+1;
         y:=y-1;
         circle(x0,y0,x,y);
         end
       else
         begin
         d2:=d2+a*a*(-2*y+3);
         y:=y-1;
         circle(x0,y0,x,y);
        end;
        end;
      

  2.   

    procedure circle(x0,y0,x,y:integer);
     begin
      with form1.Canvas do begin
      pen.Color:=clred;
      brush.Color:=clred;
      brush.color:=clred;
        pixels[x0+x,y0+y]:=clred;
    pixels[x0+x,y0-y]:=clred;
    pixels[x0-x,y0-y]:=clred;
    pixels[x0-x,y0+y]:=clred;
      end;
      end;
    procedure TForm1.FormCreate(Sender: TObject);
    var
       x0,y0,x,y,a,b:integer;
       d1,d2:real;
    begin
       x0:=300;
       y0:=200;
       a:=200;   b:=100;   x:=0;   y:=b;
       d1:=b*b+a*a*(-b+0.25);
       circle(x0,y0,x,y);
       while(b*b*(x+1)<a*a*(y-0.5))do
        if(d1<0) then
        begin
        d1:=d1+b*b*(2*x+3);
        x:=x+1;
        circle(x0,y0,x,y);
        end
       else
        begin
        d1:=d1+b*b*(2*x+3)+a*a*(-2*y+2);
            x:=x+1;
            y:=y-1;
             circle(x0,y0,x,y);
        end;
          circle(x0,y0,x,y);
        d2:=sqr(b*(x+0.5))+sqr(a*(y-1))-sqr(a*b);
         circle(x0,y0,x,y);
        while (y>0)do
        if(d2<0)then
        begin
        d2:=d2+b*b*(2*x+2)+a*a*(-2*y+3);
         x:=x+1;
         y:=y-1;
         circle(x0,y0,x,y);
         end
       else
         begin
         d2:=d2+a*a*(-2*y+3);
         y:=y-1;
         circle(x0,y0,x,y);
        end;
        end;