Etoyoc.com | Tcl Vector 3d

vexpr Recipies

Basic Vector Operations


proc vadd {A B} {
   return [vexpr $A $B vector_add]
}

proc vsub {A B} {
   return [vexpr $B $A vector_subtract]
}

proc distance {A B} {
   return [vexpr $B $A vector_subtract vector_length]
}

###
# Magnetic Force/Gravity between two particles
# Make sure K is negative if you want the particles to 
# attract
###
proc magnetic_force {A B mA mB K} {
   set dist [vexpr $B $A vector_subtract vector_length]
   return [expr $K * $mA * $mB / ($dist * $dist)]
}

Basic Affine Operations


###
# Origin - The point where the rotation is to take place
# Rotation - List of 3 angles {X Y Z} in degress
# vectorlist - List of vectors that you wish to rotate
###
proc 3d_rotate {origin rotation vector} {
    return [vexpr $rotation affine_rotation \ 
	$origin affine_translation \ 
	affine_multiply \ 
	$vector vector_transform]
}

proc 3d_rotate_batch {origin rotation vectorlist} {
    vexpr $rotation affine_rotation \ 
	$origin affine_translation \ 
	affine_multiply store

    set result {}
    foreach vector $vectorlist {
	lappend result [vexpr $vector load vector_transform]
    }
    return $result
}