Results 1 to 2 of 2

Thread: Code Conversion - C++ to Delphi

  1. #1

    Code Conversion - C++ to Delphi

    Hi all,

    Could someone help me to convert this code to Delphi?

    Thanks in advance
    Sesilla

    Code:
    struct vec3 {
      float x, y, z;
    }
    
    void Calc(vec3 *&dest, const vec3 &v0, const vec3 &v1, const vec3 &v2, int level){
      if (level){
        level--;
        vec3 v3 = normalize(v0 + v1);
        vec3 v4 = normalize(v1 + v2);
        vec3 v5 = normalize(v2 + v0);
    
        Calc(dest, v0, v3, v5, level);
        Calc(dest, v3, v4, v5, level);
        Calc(dest, v3, v1, v4, level);
        Calc(dest, v5, v4, v2, level);
      } else {
        *dest++ = v0;
        *dest++ = v1;
        *dest++ = v2;
      }    
    }
    
    void Test(){
      const int nV = 8;
    
      vec3 *V = new vec3[nV];
    
      vec3 *D = V;
      
      vec3 px0(1,  0,  0);
      vec3 px1(0,  1,  0);
      vec3 px2(0,  0,  1);
    
      Calc(D, px0, px1, px2, 5);
    }

  2. #2
    Code:
    Type 
      vec3 = record
       x, y, z: Double
       end;
      vec3ptr = ^vec3;
    
    Operator + (A,B:vec3) Res:vec3;
       begin
       Res.x:=A.x+B.x;
       Res.y:=A.y+B.y;
       Res.z:=A.z+B.z
       end;
    
    Function normalize(V : vec3):vec3;
       Var N:Double;
       begin
       N:=Sqrt(Sqr(V.X)+(Sqr(V.Y)+Sqr(V.Z)));
       With V do begin X/=N; Y/=N; Z/=N end;
       normalize:=V // or Exit(V)
       end;
    
    Procedure Calc(dest:vec3ptr;Const v0,v1,v2:vec3;Level:LongInt);
        Var v3,v4,v5:vec3;
        begin
        If (Level <> 0) then begin
           level-=1;
           
           v3:=Normalize(v0 + v1);
           v4:=Normalize(v1 + v2);
           v5:=Normalize(v2 + v0);
           
           Calc(dest, v0, v3, v5, level);
           Calc(dest, v3, v4, v5, level);
           Calc(dest, v3, v1, v4, level);
           Calc(dest, v5, v4, v2, level)
           end else begin
           Inc(Dest); Dest^:=v0;
           Inc(Dest); Dest^:=v1;
           Inc(Dest); Dest^:=v2
           end
        end;
    
    procedure Test();
       Const nV = 8; 
       Var V,D:vec3ptr; px0,px1,px2:vec3;
       begin
       GetMem(V,nV*SizeOf(vec3));
       D:=V;
       With px0 do begin x:=1; y:=0; z:=0 end;
       With px1 do begin x:=0; y:=1; z:=0 end;
       With px2 do begin x:=0; y:=0; z:=1 end;
       Calc(D, px0, px1, px2, 5)
       end;
    I think that's it.

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •