]> Creatis software - CreaPhase.git/blob - octave_packages/geometry-1.5.0/geom2d/clipPoints.m
Add a useful package (from Source forge) for octave
[CreaPhase.git] / octave_packages / geometry-1.5.0 / geom2d / clipPoints.m
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>
4 %%
5 %% All rights reserved.
6 %% (simplified BSD License)
7 %%
8 %% Redistribution and use in source and binary forms, with or without
9 %% modification, are permitted provided that the following conditions are met:
10 %%
11 %% 1. Redistributions of source code must retain the above copyright notice, this
12 %%    list of conditions and the following disclaimer.
13 %%     
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.
17 %%
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.
29 %%
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.
33
34 %% -*- texinfo -*-
35 %% @deftypefn {Function File} {@var{points2} =} clipPoints (@var{points}, @var{box})
36 %% Clip a set of points by a box.
37 %% 
38 %% Returns the set @var{points2} which are located inside of the box @var{box}.
39 %%
40 %% @seealso{points2d, boxes2d, clipLine, drawPoint}
41 %% @end deftypefn
42
43 function points = clipPoints(points, bb)
44
45   % get bounding box limits
46   xmin = bb(1);
47   xmax = bb(2);
48   ymin = bb(3);
49   ymax = bb(4);
50
51   % compute indices of points inside visible area
52   xOk = points(:,1)>=xmin & points(:,1)<=xmax;
53   yOk = points(:,2)>=ymin & points(:,2)<=ymax;
54
55   % keep only points inside box
56   points = points(xOk & yOk, :);
57
58 endfunction
59
60 %!demo
61 %! points = 2*rand(100,2)-1;
62 %! bb = [-0.5 0.5 -0.25 0.25];
63 %! cpo = clipPoints (points, bb);
64 %! 
65 %! plot(points(:,1),points(:,2),'xr')
66 %! hold on
67 %! drawBox(bb,'color','k')
68 %! plot(cpo(:,1),cpo(:,2),'*g')
69 %! hold off
70
71 %!shared bb
72 %!  bb = [0 10 0 20];
73
74 %!test
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);
79
80 %!test
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);
85
86 %!test
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);
91
92 %!test
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));
96
97 %!test
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);