IsInside() public method

public IsInside ( float x, float y ) : bool
x float
y float
return bool
Exemplo n.º 1
0
        /// <summary>
        /// Checks if vertex i is the tip of an ear in polygon defined by xv[] and
        /// yv[].
        ///
        /// Assumes clockwise orientation of polygon...ick
        /// </summary>
        /// <param name="i">The i.</param>
        /// <param name="xv">The xv.</param>
        /// <param name="yv">The yv.</param>
        /// <param name="xvLength">Length of the xv.</param>
        /// <returns>
        ///     <c>true</c> if the specified i is ear; otherwise, <c>false</c>.
        /// </returns>
        private static bool IsEar(int i, float[] xv, float[] yv, int xvLength)
        {
            float dx0, dy0, dx1, dy1;

            if (i >= xvLength || i < 0 || xvLength < 3)
            {
                return(false);
            }
            int upper = i + 1;
            int lower = i - 1;

            if (i == 0)
            {
                dx0   = xv[0] - xv[xvLength - 1];
                dy0   = yv[0] - yv[xvLength - 1];
                dx1   = xv[1] - xv[0];
                dy1   = yv[1] - yv[0];
                lower = xvLength - 1;
            }
            else if (i == xvLength - 1)
            {
                dx0   = xv[i] - xv[i - 1];
                dy0   = yv[i] - yv[i - 1];
                dx1   = xv[0] - xv[i];
                dy1   = yv[0] - yv[i];
                upper = 0;
            }
            else
            {
                dx0 = xv[i] - xv[i - 1];
                dy0 = yv[i] - yv[i - 1];
                dx1 = xv[i + 1] - xv[i];
                dy1 = yv[i + 1] - yv[i];
            }
            float cross = dx0 * dy1 - dx1 * dy0;

            if (cross > 0)
            {
                return(false);
            }
            Triangle myTri = new Triangle(xv[i], yv[i], xv[upper], yv[upper],
                                          xv[lower], yv[lower]);

            for (int j = 0; j < xvLength; ++j)
            {
                if (j == i || j == lower || j == upper)
                {
                    continue;
                }
                if (myTri.IsInside(xv[j], yv[j]))
                {
                    return(false);
                }
            }
            return(true);
        }
 /// <summary>
 /// Checks if vertex i is the tip of an ear in polygon defined by xv[] and
 /// yv[].
 ///
 /// Assumes clockwise orientation of polygon...ick
 /// </summary>
 /// <param name="i">The i.</param>
 /// <param name="xv">The xv.</param>
 /// <param name="yv">The yv.</param>
 /// <param name="xvLength">Length of the xv.</param>
 /// <returns>
 /// 	<c>true</c> if the specified i is ear; otherwise, <c>false</c>.
 /// </returns>
 private static bool IsEar(int i, float[] xv, float[] yv, int xvLength)
 {
     float dx0, dy0, dx1, dy1;
     if (i >= xvLength || i < 0 || xvLength < 3)
     {
         return false;
     }
     int upper = i + 1;
     int lower = i - 1;
     if (i == 0)
     {
         dx0 = xv[0] - xv[xvLength - 1];
         dy0 = yv[0] - yv[xvLength - 1];
         dx1 = xv[1] - xv[0];
         dy1 = yv[1] - yv[0];
         lower = xvLength - 1;
     }
     else if (i == xvLength - 1)
     {
         dx0 = xv[i] - xv[i - 1];
         dy0 = yv[i] - yv[i - 1];
         dx1 = xv[0] - xv[i];
         dy1 = yv[0] - yv[i];
         upper = 0;
     }
     else
     {
         dx0 = xv[i] - xv[i - 1];
         dy0 = yv[i] - yv[i - 1];
         dx1 = xv[i + 1] - xv[i];
         dy1 = yv[i + 1] - yv[i];
     }
     float cross = dx0*dy1 - dx1*dy0;
     if (cross > 0)
         return false;
     Triangle myTri = new Triangle(xv[i], yv[i], xv[upper], yv[upper],
                                   xv[lower], yv[lower]);
     for (int j = 0; j < xvLength; ++j)
     {
         if (j == i || j == lower || j == upper)
             continue;
         if (myTri.IsInside(xv[j], yv[j]))
             return false;
     }
     return true;
 }