1 %% Copyright (c) 2011, INRA
2 %% 2008-2011, David Legland <david.legland@grignon.inra.fr>
3 %% 2011 Adapted to Octave by Juan Pablo Carbajal <carbajal@ifi.uzh.ch>
5 %% All rights reserved.
6 %% (simplified BSD License)
8 %% Redistribution and use in source and binary forms, with or without
9 %% modification, are permitted provided that the following conditions are met:
11 %% 1. Redistributions of source code must retain the above copyright notice, this
12 %% list of conditions and the following disclaimer.
14 %% 2. Redistributions in binary form must reproduce the above copyright notice,
15 %% this list of conditions and the following disclaimer in the documentation
16 %% and/or other materials provided with the distribution.
18 %% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19 %% AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 %% IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 %% ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
22 %% LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23 %% CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24 %% SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25 %% INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26 %% CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27 %% ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28 %% POSSIBILITY OF SUCH DAMAGE.
30 %% The views and conclusions contained in the software and documentation are
31 %% those of the authors and should not be interpreted as representing official
32 %% policies, either expressed or implied, of copyright holder.
35 %% @deftypefn {Function File} {@var{points2} =} clipPoints (@var{points}, @var{box})
36 %% Clip a set of points by a box.
38 %% Returns the set @var{points2} which are located inside of the box @var{box}.
40 %% @seealso{points2d, boxes2d, clipLine, drawPoint}
43 function points = clipPoints(points, bb)
45 % get bounding box limits
51 % compute indices of points inside visible area
52 xOk = points(:,1)>=xmin & points(:,1)<=xmax;
53 yOk = points(:,2)>=ymin & points(:,2)<=ymax;
55 % keep only points inside box
56 points = points(xOk & yOk, :);
61 %! points = 2*rand(100,2)-1;
62 %! bb = [-0.5 0.5 -0.25 0.25];
63 %! cpo = clipPoints (points, bb);
65 %! plot(points(:,1),points(:,2),'xr')
67 %! drawBox(bb,'color','k')
68 %! plot(cpo(:,1),cpo(:,2),'*g')
75 %! corners = [0 0;10 0;0 20;10 20];
76 %! cornersClipped = clipPoints(corners, bb);
77 %! assert (4, size(cornersClipped, 1));
78 %! assert (corners, cornersClipped, 1e-6);
81 %! borders = [0 5;10 5;5 0;5 20];
82 %! bordersClipped = clipPoints(borders, bb);
83 %! assert (4, size(bordersClipped, 1));
84 %! assert (borders, bordersClipped, 1e-6);
87 %! inside = [5 5;5 10;5 15];
88 %! insideClipped = clipPoints(inside, bb);
89 %! assert (size(inside, 1), size(insideClipped, 1));
90 %! assert (inside, insideClipped);
93 %! points = [-1 0;11 0;-1 20;11 20;0 -1;0 21;10 -1;10 21];
94 %! pointsClipped = clipPoints(points, bb);
95 %! assert (0, size(pointsClipped, 1));
98 %! points = [-5 10;0 10;5 10;10 10; 15 10];
99 %! pointsClipped = clipPoints(points, bb);
100 %! assert (3, size(pointsClipped, 1));
101 %! assert (points(2:4,:), pointsClipped, 1e-6);