PDA

View Full Version : Code Conversion - C++ to Delphi



SesillaAndromeda
30-12-2012, 11:00 AM
Hi all,

Could someone help me to convert this code to Delphi?

Thanks in advance
Sesilla



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);
}

Super Vegeta
30-12-2012, 11:53 AM
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.