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); }
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); }
public static Vector3D CalcNormal(GridTriangle triangle) { return(CalcNormal(triangle.Point1, triangle.Point2, triangle.Point3)); }
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]; }