Home > matGeom > geom3d > midPoint3d.m

midPoint3d

PURPOSE ^

MIDPOINT3D Middle point of two 3D points or of a 3D edge.

SYNOPSIS ^

function varargout = midPoint3d(varargin)

DESCRIPTION ^

MIDPOINT3D Middle point of two 3D points or of a 3D edge.

   MID = midPoint3d(P1, P2)
   Compute the middle point of the two points P1 and P2.

   MID = midPoint3d(EDGE)
   Compute the middle point of the edge given by EDGE.
   EDGE has the format: [X1 Y1 Z1 X2 Y2 Z2], and MID has the format 
   [XMID YMID ZMID], 
   with XMID = (X1+X2)/2, YMID = (Y1+Y2)/2 and ZMID = (Z1+Z2)/2.

   [MIDX MIDY] = midPoint3d(...)
   Return the result as two separate variables or arrays.

   Works also when EDGE is a N-by-6 array, in this case the result is a
   N-by-3 array containing the midPoint3d of each edge.


   Example
   P1 = [10 20 30];
   P2 = [30 40 50];
   % edge input
   midPoint3d([P1 P2])
   ans =
       20  30  40

   % two points input
   midPoint3d(P1, P2)
   ans =
       20  30  40

   % three outputs
   [xm ym zm] = midPoint3d(P1, P2)
   xm =
       20  
   ym = 
       30  
   zm = 
       40

   See also
     edges3d, points3d

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function varargout = midPoint3d(varargin)
0002 %MIDPOINT3D Middle point of two 3D points or of a 3D edge.
0003 %
0004 %   MID = midPoint3d(P1, P2)
0005 %   Compute the middle point of the two points P1 and P2.
0006 %
0007 %   MID = midPoint3d(EDGE)
0008 %   Compute the middle point of the edge given by EDGE.
0009 %   EDGE has the format: [X1 Y1 Z1 X2 Y2 Z2], and MID has the format
0010 %   [XMID YMID ZMID],
0011 %   with XMID = (X1+X2)/2, YMID = (Y1+Y2)/2 and ZMID = (Z1+Z2)/2.
0012 %
0013 %   [MIDX MIDY] = midPoint3d(...)
0014 %   Return the result as two separate variables or arrays.
0015 %
0016 %   Works also when EDGE is a N-by-6 array, in this case the result is a
0017 %   N-by-3 array containing the midPoint3d of each edge.
0018 %
0019 %
0020 %   Example
0021 %   P1 = [10 20 30];
0022 %   P2 = [30 40 50];
0023 %   % edge input
0024 %   midPoint3d([P1 P2])
0025 %   ans =
0026 %       20  30  40
0027 %
0028 %   % two points input
0029 %   midPoint3d(P1, P2)
0030 %   ans =
0031 %       20  30  40
0032 %
0033 %   % three outputs
0034 %   [xm ym zm] = midPoint3d(P1, P2)
0035 %   xm =
0036 %       20
0037 %   ym =
0038 %       30
0039 %   zm =
0040 %       40
0041 %
0042 %   See also
0043 %     edges3d, points3d
0044 %
0045 
0046 % ------
0047 % Author: David Legland
0048 % E-mail: david.legland@inrae.fr
0049 % Created: 2010-08-08, using Matlab 7.9.0.529 (R2009b)
0050 % Copyright 2010-2024 INRA - Cepia Software Platform
0051 
0052 if nargin == 1
0053     % input is a 3D edge
0054     edge = varargin{1};
0055     mid = [mean(edge(:, [1 4]), 2) mean(edge(:, [2 5]), 2) mean(edge(:, [3 6]), 2)];
0056     
0057 elseif nargin == 2
0058     % input are two points
0059     p1 = varargin{1};
0060     p2 = varargin{2};
0061     
0062     % assert inputs are equal
0063     n1 = size(p1, 1);
0064     n2 = size(p2, 1);
0065     if n1>1 && n2==1
0066         p2 = repmat(p2, n1, 1);
0067     elseif n2>1 && n1==1
0068         p1 = repmat(p1, n2, 1);
0069     elseif n1~=n2
0070         error('geom3d:midPoint3d', ...
0071             'Inputs must have same size, or one must have length 1');
0072     end
0073     
0074     % compute middle point
0075     mid = (p1 + p2) / 2;
0076 end
0077 
0078 % process output arguments
0079 if nargout<=1
0080     varargout{1} = mid;
0081 else
0082     varargout = {mid(:,1), mid(:,2), mid(:,3)};
0083 end

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