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)]
}
|
###
# 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
}
|