% IN_C   Applies inpolygon on contour.
% scheme package
%
% [IN ON] = in_c (X, Y, c, dx, dy)
% --------------------------------
%
% if c is a contour obtained from a single isoline contourc, checks if
% points X and Y are located IN the largest contour or ON the outer
% boundaries of the largest contour.
%
% Input
% -----
% - X::vertical vector: horizontal coordinates of test points.
% - Y::vertical vector: vertical coordinates of test points.
% - c::contour: as obtained from contour function
% - dx::scalar: offset in X
% - dy::scalar: offset in Y
%
% Output
% ------
% - IN: index in X and Y of points inside
% - ON: index in X and Y of points on the contour
%
% Example
% -------
% c  = hull_tree (sample_tree, 5, [], [], [], '-2d');
% X  = 100 * rand (1000, 1); Y = 100 * rand (1000, 1);
% IN = in_c (X, Y, c); plot (X (IN), Y (IN), 'k.');
%
% See also hull_tree cplotter cpoints rpoints_tree contourc
% Uses
%
% the TREES toolbox: edit, visualize and analyze neuronal trees
% Copyright (C) 2009  Hermann Cuntz

function [IN ON] = in_c (X, Y, c, dx, dy)

if (nargin<5)||isempty(dy),
    dy = 0;
end

if (nargin<4)||isempty(dx),
    dx = 0;
end

iic     =  1;
POL     = {};
POLSIZE = [];
ward    =  1;
while iic < size (c, 1),
    ic             = c (iic, 2);
    POL {ward}     = [c(iic + 1 : iic + ic, 1)+dx c(iic + 1 : iic + ic, 2)+dy];
    POLSIZE (ward) = ic;
    iic            = iic + ic + 1;
    ward           = ward + 1;
end

[i1 i2] = max (POLSIZE);

[IN ON] = inpolygon (X, Y, POL {i2}(:, 1),POL {i2}(:, 2));

for ward = 1 : length (POLSIZE),
    if ward ~= i2,
        IN = IN & ~inpolygon (X, Y, POL {ward}(:, 1), POL {ward}(:, 2));
    end
end