


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

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