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
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;