I wrote a small frame wrapper class to add these sorts of transformations in
a program I developed:
class Frame(frame):
def world_axes(self):
x_axis = norm(self.axis)
z_axis = norm(self.axis.cross(self.up))
y_axis = norm(z_axis.cross(x_axis))
return (x_axis, y_axis, z_axis)
def world_offset(self, pos):
x,y,z = self.world_axes()
return pos.x*x + pos.y*y + pos.z*z
def world_pos(self, pos):
return self.pos + self.world_offset(pos)
def frame_offset(self, pos):
x,y,z = self.world_axes()
return vector(pos.dot(x), pos.dot(y), pos.dot(z))
def frame_pos(self, pos):
return self.frame_offset(pos - self.pos)
world_pos is the frame->world transformation; frame_pos is the world->frame
transformation.
Robert
|