示例#1
0
 public static void AddNormals(GridTriangle triangle, Vector3D normal)
 {
     // triangle.Point1.NormalVector = Vector3D.Add(triangle.Point1.NormalVector, normal);
     // triangle.Point2.NormalVector = Vector3D.Add(triangle.Point2.NormalVector, normal);
     // triangle.Point3.NormalVector = Vector3D.Add(triangle.Point3.NormalVector, normal);
 }
示例#2
0
        public void TestTriangleContains()
        {
            GridVector2 v1 = new GridVector2(50,50);
            GridVector2 v2 = new GridVector2(15,50);
            GridVector2 v3 = new GridVector2(15,100);
            GridTriangle tri = new GridTriangle(v1, v2, v3);

            GridVector2 outsidetest = new GridVector2(5, 75);
            Debug.Assert(tri.Intersects(outsidetest) == false);

            GridVector2 insidetest = new GridVector2(25, 75);
            Debug.Assert(tri.Intersects(insidetest) == true);

            //Bug Fix #1
            v1 = new GridVector2(6313.066666666, 13608);
            v2 = new GridVector2(4509.33, 12700.8);
            v3 = new GridVector2(2705.6, 11793.6);

            tri = new GridTriangle(v1, v2, v3);

            outsidetest = new GridVector2(double.MaxValue / 2, 10652.94);
            Debug.Assert(tri.Intersects(outsidetest) == false);
        }
示例#3
0
 public static Vector3D CalcNormal(GridTriangle triangle)
 {
     return(CalcNormal(triangle.Point1, triangle.Point2, triangle.Point3));
 }
示例#4
0
        public static int[] Hull(GridVector2[] points)
        {
            if (points == null)
            {
                throw new ArgumentNullException("points");
            }

            //Find the points we know are on the hull
            List<int> BorderIndicies = FindExtremes(points);

            List<GridVector2> BorderPoints = new List<GridVector2>(4);
            for (int iPoint = 0; iPoint < points.Length; iPoint++)
            {
                BorderPoints.Add(points[iPoint]);
            }

            //A list of points we know are not on the hull
            bool[] PointsToExclude = new bool[points.Length];

            List<GridTriangle> listBoundingTriangles = new List<GridTriangle>(0);
            if (BorderPoints.Count > 3)
            {
                GridTriangle tri = new GridTriangle(BorderPoints[2],
                                                    BorderPoints[3],
                                                    BorderPoints[4]);
                listBoundingTriangles.Add(tri);
            }

            if (BorderPoints.Count > 2)
            {
                GridTriangle tri = new GridTriangle(BorderPoints[1],
                                                    BorderPoints[2],
                                                    BorderPoints[3]);
                listBoundingTriangles.Add(tri);
            }

            //If we can make a polygon then exclude all points inside the region from consideration
            if (BorderPoints.Count > 2)
            {
                for (int iPoint = 0; iPoint < points.Length; iPoint++)
                {

                    if (BorderIndicies.Contains(iPoint))
                        continue;

                    GridVector2 Point = points[iPoint];

                    for (int iTriangle = 0; iTriangle < listBoundingTriangles.Count; iTriangle++)
                    {
                        if (listBoundingTriangles[iTriangle].Intersects(Point))
                        {
                            PointsToExclude[iPoint] = true;
                        }
                    }
                }
            }

            //

            return new int[0];
        }