#macro curved_triangle(CT_va,CT_na,CT_vb,CT_nb,CT_vc,CT_nc,CT_LOD) #if (CT_LOD < 2) smooth_triangle {CT_va, CT_na, CT_vb, CT_nb, CT_vc, CT_nc} #else #local CT_LOD=CT_LOD+1; #local CT_vlist=array[CT_LOD*CT_LOD] #local CT_nlist=array[CT_LOD*CT_LOD] #local CT_vAB=CT_va-CT_na; #local CT_vAC=CT_va-CT_na; #local CT_nAB=CT_na; #local CT_nAC=CT_na; #local CT_dvAB=(CT_vb-CT_nb-CT_vAB)/(CT_LOD-1); #local CT_dvAC=(CT_vc-CT_nc-CT_vAB)/(CT_LOD-1); #local CT_dnAB=(CT_nb-CT_na)/(CT_LOD-1); #local CT_dnAC=(CT_nc-CT_na)/(CT_LOD-1); #local CT_vlist[0]=CT_va; #local CT_nlist[0]=CT_na; #local CT_c=1; #local CT_i=1; #while (CT_i <= CT_LOD) #local CT_vAB=CT_vAB+CT_dvAB; #local CT_nAB=CT_nAB+CT_dnAB; #local CT_vAC=CT_vAC+CT_dvAC; #local CT_nAC=CT_nAC+CT_dnAC; #local CT_vert=CT_vAB; #local CT_n=CT_nAB; #local CT_vstep=(CT_vAC-CT_vAB)/CT_i; #local CT_nstep=(CT_nAC-CT_nAB)/CT_i; #local CT_j=0; #while (CT_j <= CT_i) #local CT_temp=vnormalize(CT_n); #local CT_vlist[CT_c]=CT_vert+CT_temp; #local CT_nlist[CT_c]=CT_temp; #local CT_vert=CT_vert+CT_vstep; #local CT_n=CT_n+CT_nstep; #local CT_c=CT_c+1; #local CT_j=CT_j+1; #end #local CT_i=CT_i+1; #end #local CT_i=1; #while (CT_i < CT_LOD) #local CT_a=CT_i*(CT_i+1)/2; #local CT_b=(CT_i-1)*CT_i/2; #local CT_j=0; #while (CT_j < CT_i-1) smooth_triangle{CT_vlist[CT_a],CT_nlist[CT_a],CT_vlist[CT_b],CT_nlist[CT_b],CT_vlist[CT_a+1],CT_nlist[CT_a+1]} smooth_triangle{CT_vlist[CT_b],CT_nlist[CT_b],CT_vlist[CT_a+1],CT_nlist[CT_a+1],CT_vlist[CT_b+1],CT_nlist[CT_b+1]} #local CT_a=CT_a+1; #local CT_b=CT_b+1; #local CT_j=CT_j+1; #end smooth_triangle{CT_vlist[CT_a],CT_nlist[CT_a],CT_vlist[CT_b],CT_nlist[CT_b],CT_vlist[CT_a+1],CT_nlist[CT_a+1]} #local CT_i=CT_i+1; #end #end #end