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