MEDIANLINE Create a median line between two points. L = medianLine(P1, P2); Create the median line of points P1 and P2, that is the line containing all points located at equal distance of P1 and P2. L = medianLine(PTS); Creates the median line of 2 points, given as a 2*2 array. Array has the form: [ [ x1 y1 ] ; [ x2 y2 ] ] L = medianLine(EDGE); Creates the median of the edge. Edge is a 1*4 array, containing [X1 Y1] coordinates of first point, and [X2 Y2], the coordinates of the second point. Example % Draw the median line of two points P1 = [10 20]; P2 = [30 50]; med = medianLine(P1, P2); figure; axis square; axis([0 100 0 100]); drawEdge([P1 P2], 'linewidth', 2, 'color', 'k'); drawLine(med) % Draw the median line of an edge P1 = [50 60]; P2 = [80 30]; edge = createEdge(P1, P2); figure; axis square; axis([0 100 0 100]); drawEdge(edge, 'linewidth', 2) med = medianLine(edge); drawLine(med) See also: lines2d, createLine, orthogonalLine --------- author : David Legland INRA - TPV URPOI - BIA IMASTE created the 31/10/2003.
0001 function line = medianLine(varargin) 0002 %MEDIANLINE Create a median line between two points. 0003 % 0004 % L = medianLine(P1, P2); 0005 % Create the median line of points P1 and P2, that is the line containing 0006 % all points located at equal distance of P1 and P2. 0007 % 0008 % L = medianLine(PTS); 0009 % Creates the median line of 2 points, given as a 2*2 array. Array has 0010 % the form: 0011 % [ [ x1 y1 ] ; [ x2 y2 ] ] 0012 % 0013 % L = medianLine(EDGE); 0014 % Creates the median of the edge. Edge is a 1*4 array, containing [X1 Y1] 0015 % coordinates of first point, and [X2 Y2], the coordinates of the second 0016 % point. 0017 % 0018 % Example 0019 % % Draw the median line of two points 0020 % P1 = [10 20]; 0021 % P2 = [30 50]; 0022 % med = medianLine(P1, P2); 0023 % figure; axis square; axis([0 100 0 100]); 0024 % drawEdge([P1 P2], 'linewidth', 2, 'color', 'k'); 0025 % drawLine(med) 0026 % 0027 % % Draw the median line of an edge 0028 % P1 = [50 60]; 0029 % P2 = [80 30]; 0030 % edge = createEdge(P1, P2); 0031 % figure; axis square; axis([0 100 0 100]); 0032 % drawEdge(edge, 'linewidth', 2) 0033 % med = medianLine(edge); 0034 % drawLine(med) 0035 % 0036 % 0037 % See also: 0038 % lines2d, createLine, orthogonalLine 0039 % 0040 % --------- 0041 % author : David Legland 0042 % INRA - TPV URPOI - BIA IMASTE 0043 % created the 31/10/2003. 0044 % 0045 0046 % history 0047 % 2010-08-06 vectorize and change behaviour for N-by-4 inputs 0048 0049 nargs = length(varargin); 0050 0051 if nargs == 1 0052 tab = varargin{1}; 0053 if size(tab, 2)==2 0054 % input is an array of two points 0055 x0 = tab(1,1); 0056 y0 = tab(1,2); 0057 dx = tab(2,1)-x0; 0058 dy = tab(2,2)-y0; 0059 else 0060 % input is an edge 0061 x0 = tab(:, 1); 0062 y0 = tab(:, 2); 0063 dx = tab(:, 3) - tab(:, 1); 0064 dy = tab(:, 4) - tab(:, 2); 0065 end 0066 0067 elseif nargs==2 0068 % input is given as two points, or two point arrays 0069 p1 = varargin{1}; 0070 p2 = varargin{2}; 0071 x0 = p1(:, 1); 0072 y0 = p1(:, 2); 0073 dx = bsxfun(@minus, p2(:, 1), x0); 0074 dy = bsxfun(@minus, p2(:, 2), y0); 0075 0076 else 0077 error('Too many input arguments'); 0078 end 0079 0080 % compute median using middle point of the edge, and the direction vector 0081 % rotated by 90 degrees counter-clockwise 0082 line = [bsxfun(@plus, x0, dx/2), bsxfun(@plus, y0, dy/2), -dy, dx];