#ifdef(Movemacro_Inc_Temp) // do nothing #else #declare Movemacro_Inc_Temp=version; #ifdef(View_POV_Include_Stack) # debug "including movemacro.inc\n" #end /*************************************************************************************** Move macro for POV-Ray Version 3.1 (clock = 0.0 to 1.0) Usage: #declare P=array[7] {<0,0,0>,<4,2,0>,<0,4,0>,<4,6,0>,<0,8,0>,<4,10,0>,<0,0,0>} translate MovePs(P, 7) translate MoveP2P(<4,2,1>,<0,4,3>) ****************************************************************************************/ //---------------------------------- // Move point to point Macro //---------------------------------- #macro MoveP2P (P1, P2) #local DX = P2.x - P1.x ; #local DY = P2.y - P1.y ; #local DZ = P2.z - P1.z ; #local LEN = sqrt ( (DX * DX) + (DY * DY) + (DZ * DZ)) ; #if (LEN > 0.0) #local VX = DX / LEN ; #local VY = DY / LEN ; #local VZ = DZ / LEN ; #local X = P1.x + (clock * VX * LEN) ; #local Y = P1.y + (clock * VY * LEN) ; #local Z = P1.z + (clock * VZ * LEN) ; #else #local X = P1.x ; #local Y = P1.y ; #local Z = P1.z ; #end #end //--------------------------- // Move pointS array //--------------------------- #macro MovePs (P,PNUM) #local LEN = array[PNUM] #local VX = array[PNUM] #local VY = array[PNUM] #local VZ = array[PNUM] #local TOTAL_LEN = 0.0 ; #local X = P[0].x ; #local Y = P[0].y ; #local Z = P[0].z ; #local i = 1 ; #while (i < PNUM) #local DX = P[i].x - P[i-1].x ; #local DY = P[i].y - P[i-1].y ; #local DZ = P[i].z - P[i-1].z ; #local LEN[i-1] = sqrt ((DX * DX) + (DY * DY) + (DZ * DZ)) ; #if (LEN[i-1] > 0.0) #local VX[i-1] = DX / LEN[i-1] ; #local VY[i-1] = DY / LEN[i-1] ; #local VZ[i-1] = DZ / LEN[i-1] ; #local TOTAL_LEN = TOTAL_LEN + LEN[i-1] ; #else #local VX[i-1] = 0.0 ; #local VY[i-1] = 0.0 ; #local VZ[i-1] = 0.0 ; #end #local i = i + 1 ; #end // while end #local i = 1 ; #local CURENT_LEN = 0.0 ; #local NORMALIZE_LEN = 0.0 ; #local sp = 0.0 ; #while (i < PNUM) #local NORMALIZE_LEN = LEN[i-1] / TOTAL_LEN ; #local CURENT_LEN = CURENT_LEN + NORMALIZE_LEN ; #if (clock <= CURENT_LEN) #local X = P[i-1].x + ((clock - sp) / NORMALIZE_LEN) * VX[i-1] * LEN[i-1] ; #local Y = P[i-1].y + ((clock - sp) / NORMALIZE_LEN) * VY[i-1] * LEN[i-1] ; #local Z = P[i-1].z + ((clock - sp) / NORMALIZE_LEN) * VZ[i-1] * LEN[i-1] ; #local i = PNUM - 1 ; #else #local X = P[i].x ; #local Y = P[i].y ; #local Z = P[i].z ; #local sp = CURENT_LEN ; #end #local i = i + 1 ; #end // While end #end // macro end // End of movemacro.inc #version Movemacro_Inc_Temp; #end