Home > matGeom > geom3d > isPointInEllipsoid.m

isPointInEllipsoid

PURPOSE ^

Check if a point is located inside a 3D ellipsoid.

SYNOPSIS ^

function b = isPointInEllipsoid(point, elli, varargin)

DESCRIPTION ^

 Check if a point is located inside a 3D ellipsoid.

   output = isPointInEllipsoid(input)

   Example
     % create an ellipsoid
     elli = [10 20 30   50 30 10   5 10 0];
     display it
     figure; hold on;
     drawEllipsoid(elli, 'FaceColor', 'g', 'FaceAlpha', .5, ...
         'drawEllipses', true, 'EllipseColor', 'b', 'EllipseWidth', 3);
     view(3); axis equal;
     % check for a point inside the ellipsoid
     p1 = [20 30 35];
     b1 = isPointInEllipsoid(p1, elli)
     ans = 
         1
     % check for a point outside the ellipsoid
     p2 = [-20 10 25];
     b2 = isPointInEllipsoid(p2, elli)
     ans = 
         0
   

   See also
     equivalentEllipsoid, drawEllipsoid, isPointInEllipse

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function b = isPointInEllipsoid(point, elli, varargin)
0002 % Check if a point is located inside a 3D ellipsoid.
0003 %
0004 %   output = isPointInEllipsoid(input)
0005 %
0006 %   Example
0007 %     % create an ellipsoid
0008 %     elli = [10 20 30   50 30 10   5 10 0];
0009 %     display it
0010 %     figure; hold on;
0011 %     drawEllipsoid(elli, 'FaceColor', 'g', 'FaceAlpha', .5, ...
0012 %         'drawEllipses', true, 'EllipseColor', 'b', 'EllipseWidth', 3);
0013 %     view(3); axis equal;
0014 %     % check for a point inside the ellipsoid
0015 %     p1 = [20 30 35];
0016 %     b1 = isPointInEllipsoid(p1, elli)
0017 %     ans =
0018 %         1
0019 %     % check for a point outside the ellipsoid
0020 %     p2 = [-20 10 25];
0021 %     b2 = isPointInEllipsoid(p2, elli)
0022 %     ans =
0023 %         0
0024 %
0025 %
0026 %   See also
0027 %     equivalentEllipsoid, drawEllipsoid, isPointInEllipse
0028 %
0029  
0030 % ------
0031 % Author: David Legland
0032 % e-mail: david.legland@inrae.fr
0033 % INRAE - BIA Research Unit - BIBS Platform (Nantes)
0034 % Created: 2020-11-19,    using Matlab 9.8.0.1323502 (R2020a)
0035 % Copyright 2020 INRAE.
0036 
0037 % extract computation tolerance
0038 tol = 1e-14;
0039 if ~isempty(varargin)
0040     tol = varargin{1};
0041 end
0042 
0043 % compute ellipse to unit circle transform
0044 rot = eulerAnglesToRotation3d(elli(7:9));
0045 sca = createScaling3d(elli(4:6));
0046 trans = inv(rot * sca);
0047 
0048 % transform points to unit sphere basis
0049 pTrans = bsxfun(@minus, point, elli(1:3));
0050 pTrans = transformPoint3d(pTrans, trans);
0051 
0052 % test if norm is smaller than 1
0053 b = sqrt(sum(power(pTrans, 2), 2)) - 1 <= tol;
0054

Generated on Wed 16-Feb-2022 15:10:47 by m2html © 2003-2019