各位帮帮忙。急用!我自己也改了的,但是指针在那里总是弄不好,请高手哥哥们帮帮忙呀!
c代码如下:
void TForm1::paowuxian(int * x, int * y, int n, unsigned int k)
{
  unsigned int i,j;
  float t1,t2,t3,t,a,b,c,d,tx,ty;
  *x=*(x+1);*(y)=*(y+1);
  *(x+n+1)=*(x+n);*(y+n+1)=*(y+n);
  t=0.5/k;
  //setcolor(10);
  Canvas->MoveTo(*(x+1),*(y+1));
  for(i=0;i<n-1;i++)
    {
    for(j=1;j<k;j++)
      {
      t1=j*t;
      t2=t1*t1;
      t3=t2*t1;
      a=4*t2-t1-4*t3;
      b=1-10*t2+12*t3;
      c=t1+8*t2-12*t3;
      d=4*t3-2*t2;
      tx=a*(*(x+i))+b*(*(x+i+1))+c*(*(x+i+2))+d*(*(x+i+3));
      ty=a*(*(y+i))+b*(*(y+i+1))+c*(*(y+i+2))+d*(*(y+i+3));
      Canvas->LineTo(tx,ty);
      }
    }
    Canvas->LineTo(*(x+i+2),*(y+i+2));}
void __fastcall TForm1::btn1Click(TObject *Sender)
{
   int x[10];
   int y[10];
   x[0] = 0;
   y[0] = 400;
   x[1] = 60;
   y[1] = 40;
   x[2] = 120;
   y[2] = 120;
   x[3] = 180;
   y[3] = 100;
   x[4] = 240;
   y[4] = 160;
   x[5] = 300;
   y[5] = 200;
   x[6] = 360;
   y[6] = 360;
   x[7] = 400;
   y[7] = 200;
   x[8] = 480;
   y[8] = 280;
   x[9] = 540;
   y[9] = 400;
   Canvas->Pen->Color = clRed;
   Canvas->MoveTo(x[0],y[0]);
   for(int i=1;i<10;i++)
   {
     Canvas->LineTo(x[i],y[i]);
   }
   Canvas->Pen->Color = clBlue;
   Canvas->MoveTo(x[0],y[0]);
   paowuxian(x, y,8,100);
   
}

解决方案 »

  1.   


    procedure TForm1.paowuxian(x: pinteger;y: pinteger;n: integer;k: Cardinal);
    var
     i,j: Cardinal;
     t1,t2,t3,t,a,b,c,d,tx,ty: Single;
     begin
     x^:=  Integer(Pointer((Integer(x) + sizeOf(integer) * 1))^);
     y^ := Integer(Pointer((Integer(y) + sizeOf(integer) * 1))^);
      Integer(Pointer(integer(x) + (n+1)*sizeOf(integer))^) := integer((Pointer(integer(x)+n))^);
     Integer(Pointer(integer(y) + (n+1)*sizeOf(integer))^) := integer((Pointer(integer(y)+n))^);
     t:=0.5 / k;
    //setcolor(10);
    Canvas.MoveTo(Integer(Pointer(integer(x)+sizeOf(integer)*1)^), Integer(Pointer(integer(y)+sizeOf(integer)*1)^));
     for i:=0 to n-2 do
    begin
      for J:=1 to k-1 do
    begin
    t1:=j*t;
    t2:=t1*t1;
    t3:=t2*t1;
    a:=4*t2-t1-4*t3;
    b:=1-10*t2+12*t3;
    c:=t1+8*t2-12*t3;
    d:=4*t3-2*t2;
    tx:= a*(Integer(Pointer(integer(x)+sizeOf(integer)*i)^))+
         b*(Integer(Pointer(integer(x)+sizeOf(integer)*(i+1))^))+
         c*(Integer(Pointer(integer(x)+sizeOf(integer)*(i+2))^))+
         d*(Integer(Pointer(integer(x)+sizeOf(integer)*(i+3))^));
    ty:= a*(Integer(Pointer(integer(y)+sizeOf(integer)*i)^))+
         b*(Integer(Pointer(integer(y)+sizeOf(integer)*(i+1))^))+
         c*(Integer(Pointer(integer(y)+sizeOf(integer)*(i+2))^))+
         d*(Integer(Pointer(integer(y)+sizeOf(integer)*(i+3))^));
    Canvas.LineTo(Trunc(tx),Trunc(ty));
    end;
    end;
    Canvas.LineTo(Integer(Pointer(integer(x)+sizeOf(integer)*(i+2)^),
      Integer(Pointer(integer(y)+sizeOf(integer)*(i+2))^));
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    var x: array[0..9] of integer;
        y: array[0..9] of integer;
    begin
    x[0] := 0;
    y[0] := 400;
    x[1] := 60;
    y[1] := 40;
    x[2] := 120;
    y[2] := 120;
    x[3] := 180;
    y[3] := 100;
    x[4] := 240;
    y[4] := 160;
    x[5] := 300;
    y[5] := 200;
    x[6] := 360;
    y[6] := 360;
    x[7] := 400;
    y[7] := 200;
    x[8] := 480;
    y[8] := 280;
    x[9] := 540;
    y[9] := 400;
    Canvas.Pen.Color := clRed;
    Canvas.MoveTo(x[0],y[0]);
    for i:=1 to 9 do
    begin
    Canvas.LineTo(x[i],y[i]);
    end;
    Canvas.Pen.Color := clBlue;
    Canvas.MoveTo(x[0],y[0]);
    paowuxian(x, y,8,100);end;