+template<typename T, unsigned D>
+inline HyperBox<T, D> TransformedShape<T, D>::get_axis_aligned_bounding_box() const
+{
+ // XXX This is not correct for most shapes
+ return shape->get_axis_aligned_bounding_box();
+}
+
+template<typename T, unsigned D>
+inline bool TransformedShape<T, D>::contains(const LinAl::Vector<T, D> &point) const
+{
+ return shape->contains(inverse_trans.transform(point));
+}
+
+template<typename T, unsigned D>
+inline Ray<T, D> TransformedShape<T, D>::make_local_ray(const Ray<T, D> &ray) const
+{
+ LinAl::Vector<T, D> local_dir = inverse_trans.transform_linear(ray.get_direction());
+ float distortion = local_dir.norm();
+ return Ray<T, D>(inverse_trans.transform(ray.get_start()), local_dir, ray.get_limit()*distortion);
+}
+