INTERSECTLINESPHERE Return intersection points between a line and a sphere.
PTS = intersectLineSphere(LINE, SPHERE);
Returns the two points which are the intersection of the given line and
sphere.
LINE : [x0 y0 z0 dx dy dz]
SPHERE : [xc yc zc R]
PTS : [x1 y1 z1 ; x2 y2 z2]
If there is no intersection between the line and the sphere, return a
2-by-3 array containing only NaN.
Example
% draw the intersection between a sphere and a collection of parallel
% lines
sphere = [50.12 50.23 50.34 40];
[x, y] = meshgrid(10:10:90, 10:10:90);
n = numel(x);
lines = [x(:) y(:) zeros(n,1) zeros(n,2) ones(n,1)];
figure; hold on; axis equal;
axis([0 100 0 100 0 100]); view(3);
drawSphere(sphere);
drawLine3d(lines);
pts = intersectLineSphere(lines, sphere);
drawPoint3d(pts, 'rx');
% apply rotation on set of lines to check with non vertical lines
rot = eulerAnglesToRotation3d(20, 30, 10);
rot2 = recenterTransform3d(rot, [50 50 50]);
lines2 = transformLine3d(lines, rot2);
figure; hold on; axis equal;
axis([0 100 0 100 0 100]); view(3);
drawSphere(sphere);
drawLine3d(lines2);
pts2 = intersectLineSphere(lines2, sphere);
drawPoint3d(pts, 'rx');
See also
spheres, circles3d, intersectPlaneSphere
Package: matgeom