From: Robert X. <nne...@gm...> - 2009-08-12 21:53:37
|
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 |