Home > matGeom > geom3d > isPointInEllipsoid.m

isPointInEllipsoid

PURPOSE ^

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

SYNOPSIS ^

function b = isPointInEllipsoid(point, elli, varargin)

DESCRIPTION ^

ISPOINTINELLIPSOID 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 %ISPOINTINELLIPSOID 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 % Created: 2020-11-19, using Matlab 9.8.0.1323502 (R2020a)
0034 % Copyright 2020-2024 INRAE - BIA Research Unit - BIBS Platform (Nantes)
0035 
0036 % extract computation tolerance
0037 tol = 1e-14;
0038 if ~isempty(varargin)
0039     tol = varargin{1};
0040 end
0041 
0042 % compute ellipse to unit circle transform
0043 rot = eulerAnglesToRotation3d(elli(7:9));
0044 sca = createScaling3d(elli(4:6));
0045 trans = inv(rot * sca);
0046 
0047 % transform points to unit sphere basis
0048 pTrans = bsxfun(@minus, point, elli(1:3));
0049 pTrans = transformPoint3d(pTrans, trans);
0050 
0051 % test if norm is smaller than 1
0052 b = sqrt(sum(power(pTrans, 2), 2)) - 1 <= tol;

Generated on Thu 21-Nov-2024 11:30:22 by m2html © 2003-2022