- Vector local_start(start.x-pos.x, start.y-pos.y, start.z);
- float c = cos(dir);
- float s = sin(dir);
- local_start = Vector(c*local_start.x+s*local_start.y, c*local_start.y-s*local_start.x, local_start.z);
- Vector local_ray(c*ray.x+s*ray.y, c*ray.y-s*ray.x, ray.z);
+ Transform trans = Transform::rotation(dir, Vector(0, 0, -1));
+ Vector local_start = trans.transform(start);
+ Vector local_ray = trans.transform_linear(ray);