Esempio n. 1
0
        public async Task InitializeAsync()
        {
            using (var session = _performanceProfiler.CreateSession())
            {
                _scene.FpsChanged += SceneOnFpsChanged;
                var sceneContainer = await _scenePersistenceService.LoadScene2DAsync();

                if (sceneContainer == null)
                {
                    var triangle = new Triangle2D(
                        new Vector2D(-50, -50),
                        new Vector2D(0, 50),
                        new Vector2D(50, -50),
                        GetNextColor());

                    _scene.Append(triangle);
                    await _scene.BeginShiftAsync(0, 0);

                    await _scene.EndShiftAsync(_width / 2, _height / 2);

                    return;
                }

                _scene.FromScene2Ds(sceneContainer);
                await _scene.RenderAsync();

                session.LogWithPerformance("2D scene loaded");
            }
        }
Esempio n. 2
0
        public void CircCenter(int exampleID)
        {
            Triangle2D triangle      = InitExample_CircCenter(exampleID);
            Point2D    expectedPoint = InitExpectedPoint_CircCenter(exampleID);

            Assert.That(expectedPoint.Equals(triangle.CircCenter));
        }
Esempio n. 3
0
        public MeshContainer(double[,] point, int[,] element)
        {
            _vertex   = new List <Vertex2D>();
            _edge     = new List <Edge2D>();
            _triangle = new List <Triangle2D>();

            for (int n = 0; n < point.GetLength(0); n++)
            {
                Vertex2D v = AddVertex(point[n, 0], point[n, 1]);
                v.extID = n + 1;
            }

            for (int n = 0; n < element.GetLength(0); n++)
            {
                Vertex2D v1 = _vertex.Find(item => item.extID == element[n, 0]);
                Vertex2D v2 = _vertex.Find(item => item.extID == element[n, 1]);
                Vertex2D v3 = _vertex.Find(item => item.extID == element[n, 2]);

                Triangle2D t = new Triangle2D(v1, v2, v3);
                t.extID = n + 1;

                _triangle.Add(t);

                t.E1 = AddEdgeIfNotExist(v1, v2);
                t.E2 = AddEdgeIfNotExist(v2, v3);
                t.E3 = AddEdgeIfNotExist(v3, v1);
            }
        }
Esempio n. 4
0
 public void Constructor()
 {
     var triangle = new Triangle2D(new Point(1, 2), new Point(3, 4), new Point(5, 6));
     Assert.AreEqual(new Point(1, 2), triangle.Corner1);
     Assert.AreEqual(new Point(3, 4), triangle.Corner2);
     Assert.AreEqual(new Point(5, 6), triangle.Corner3);
 }
Esempio n. 5
0
 public static bool IsCollision(Triangle2D tri, Rectangle2D rect)
 {
     if (IsCollision(tri, new Triangle2D(rect.leftUp, rect.leftDown, rect.rightDown)) || IsCollision(tri, new Triangle2D(rect.leftUp, rect.rightUp, rect.rightDown)))
     {
         return(true);
     }
     return(false);
 }
Esempio n. 6
0
        public void Orientation_Negative_sgnNegative()
        {
            Triangle2D triangle = new Triangle2D(new Point2D(0, 0),
                                                 new Point2D(0, 1),
                                                 new Point2D(1, 0));

            Assert.That(triangle.Orientation == Signum.Negative);
        }
Esempio n. 7
0
        static internal double AreaQuality(Triangle2D triangle)
        {
            double Area = triangle.A.X * triangle.B.Y + triangle.B.X * triangle.C.Y + triangle.C.X * triangle.A.Y - triangle.A.Y * triangle.B.X - triangle.B.Y * triangle.C.X - triangle.C.Y * triangle.A.X;

            Area /= 2;

            return(1 / Math.Abs(Area));
        }
Esempio n. 8
0
        public void Corner3()
        {
            var triangle = new Triangle2D {
                Corner3 = Vector2D.Half
            };

            Assert.AreEqual(Vector2D.Half, triangle.Corner3);
        }
Esempio n. 9
0
        public void Orientation_Degenerate_sgnZero()
        {
            Triangle2D triangle = new Triangle2D(new Point2D(0, 0),
                                                 new Point2D(1, 0),
                                                 new Point2D(2, 0));

            Assert.That(triangle.Orientation == Signum.Zero);
        }
Esempio n. 10
0
    /*----------------------------------------------------------------------*/

    public TriangleMesh2D(int[,] mesh, Vector2[] vertices)
    {
        triangles = new Triangle2D[mesh.GetLength(0)];
        for (int i = 0; i < triangles.Length; ++i)
        {
            triangles[i] = new Triangle2D(vertices[mesh[i, 0]], vertices[mesh[i, 1]], vertices[mesh[i, 2]]);
        }
    }
Esempio n. 11
0
        public void Constructor()
        {
            var triangle = new Triangle2D(new Vector2D(1, 2), new Vector2D(3, 4), new Vector2D(5, 6));

            Assert.AreEqual(new Vector2D(1, 2), triangle.Corner1);
            Assert.AreEqual(new Vector2D(3, 4), triangle.Corner2);
            Assert.AreEqual(new Vector2D(5, 6), triangle.Corner3);
        }
Esempio n. 12
0
 public void DefaultConstructor()
 {
     var triangle = new Triangle2D();
     Assert.AreEqual(Point.Zero, triangle.Corner1);
     Assert.AreEqual(Point.Zero, triangle.Corner2);
     Assert.AreEqual(Point.Zero, triangle.Corner3);
     Assert.AreEqual(triangle, Triangle2D.Zero);
 }
Esempio n. 13
0
        /// <summary>
        ///     Gets the centroid of the polyline 2d.
        /// </summary>
        /// <param name="pl">The instance to which the method applies.</param>
        /// <returns>The centroid of the polyline 2d (WCS coordinates).</returns>
        public static Point3d Centroid(this Polyline2d pl)
        {
            var vertices = pl.GetVertices().ToArray();
            var last     = vertices.Length - 1;
            var vertex   = vertices[0];
            var p0       = vertex.Position.Convert2D();

            _ = pl.Elevation;
            var     cen   = new Point2d(0.0, 0.0);
            var     area  = 0.0;
            var     bulge = vertex.Bulge;
            double  tmpArea;
            Point2d tmpPt;
            var     tri = new Triangle2D();
            var     arc = new CircularArc2d();

            if (bulge != 0.0)
            {
                arc     = pl.GetArcSegment2DAt(0);
                tmpArea = arc.AlgebricArea();
                tmpPt   = arc.Centroid();
                area   += tmpArea;
                cen    += (new Point2d(tmpPt.X, tmpPt.Y) * tmpArea).GetAsVector();
            }

            for (var i = 1; i < last; i++)
            {
                var p1 = vertices[i].Position.Convert2D();
                var p2 = vertices[i + 1].Position.Convert2D();
                tri.Set(p0, p1, p2);
                tmpArea = tri.AlgebricArea;
                area   += tmpArea;
                cen    += (tri.Centroid * tmpArea).GetAsVector();
                bulge   = vertices[i].Bulge;
                if (bulge != 0.0)
                {
                    arc     = pl.GetArcSegment2DAt(i);
                    tmpArea = arc.AlgebricArea();
                    tmpPt   = arc.Centroid();
                    area   += tmpArea;
                    cen    += (new Point2d(tmpPt.X, tmpPt.Y) * tmpArea).GetAsVector();
                }
            }

            bulge = vertices[last].Bulge;
            if (bulge != 0.0 && pl.Closed)
            {
                arc     = pl.GetArcSegment2DAt(last);
                tmpArea = arc.AlgebricArea();
                tmpPt   = arc.Centroid();
                area   += tmpArea;
                cen    += (new Point2d(tmpPt.X, tmpPt.Y) * tmpArea).GetAsVector();
            }

            cen = cen.DivideBy(area);
            return(new Point3d(cen.X, cen.Y, pl.Elevation).TransformBy(Matrix3d.PlaneToWorld(pl.Normal)));
        }
Esempio n. 14
0
        public void DefaultConstructor()
        {
            var triangle = new Triangle2D();

            Assert.AreEqual(Vector2D.Zero, triangle.Corner1);
            Assert.AreEqual(Vector2D.Zero, triangle.Corner2);
            Assert.AreEqual(Vector2D.Zero, triangle.Corner3);
            Assert.AreEqual(triangle, Triangle2D.Zero);
        }
Esempio n. 15
0
    public void flattenMesh()
    {
        for (int i = 0; i < vertices.Length; i++)
        {
            vertices[i].z = 0;
        }

        motherTriangle = new Triangle2D(vertices[triangles[0]], vertices[triangles[1]], vertices[triangles[2]]);
    }
Esempio n. 16
0
 public static bool IsCollision(Triangle2D tri1, Triangle2D tri2)
 {
     if (IsCollision(tri1, tri2.p1) || IsCollision(tri1, tri2.p2) || IsCollision(tri1, tri2.p3) ||
         IsCollision(tri2, tri1.p1) || IsCollision(tri2, tri1.p2) || IsCollision(tri2, tri1.p3))
     {
         return(true);
     }
     return(false);
 }
Esempio n. 17
0
        public void RenderTest()
        {
            var blackColor = Color.Black;
            var goldColor  = Color.Gold;
            var canvas     = new CanvasMock(20, 13, blackColor);

            var sut = new Triangle2D(
                new Vector2D(13, 10),
                new Vector2D(17, 8),
                new Vector2D(18, 11),
                goldColor);

            sut.Render(canvas);

            canvas[13, 8].Should().BeEquivalentTo(blackColor);
            canvas[14, 8].Should().BeEquivalentTo(blackColor);
            canvas[15, 8].Should().BeEquivalentTo(blackColor);
            canvas[16, 8].Should().BeEquivalentTo(goldColor);
            canvas[17, 8].Should().BeEquivalentTo(goldColor);
            canvas[18, 8].Should().BeEquivalentTo(blackColor);
            canvas[19, 8].Should().BeEquivalentTo(blackColor);

            canvas[13, 9].Should().BeEquivalentTo(blackColor);
            canvas[14, 9].Should().BeEquivalentTo(goldColor);
            canvas[15, 9].Should().BeEquivalentTo(goldColor);
            canvas[16, 9].Should().BeEquivalentTo(goldColor);
            canvas[17, 9].Should().BeEquivalentTo(goldColor);
            canvas[18, 9].Should().BeEquivalentTo(goldColor);
            canvas[19, 9].Should().BeEquivalentTo(blackColor);

            canvas[12, 10].Should().BeEquivalentTo(blackColor);
            canvas[13, 10].Should().BeEquivalentTo(goldColor);
            canvas[14, 10].Should().BeEquivalentTo(goldColor);
            canvas[15, 10].Should().BeEquivalentTo(goldColor);
            canvas[16, 10].Should().BeEquivalentTo(goldColor);
            canvas[17, 10].Should().BeEquivalentTo(goldColor);
            canvas[18, 10].Should().BeEquivalentTo(goldColor);
            canvas[19, 10].Should().BeEquivalentTo(blackColor);

            canvas[12, 11].Should().BeEquivalentTo(blackColor);
            canvas[13, 11].Should().BeEquivalentTo(blackColor);
            canvas[14, 11].Should().BeEquivalentTo(blackColor);
            canvas[15, 11].Should().BeEquivalentTo(goldColor);
            canvas[16, 11].Should().BeEquivalentTo(goldColor);
            canvas[17, 11].Should().BeEquivalentTo(goldColor);
            canvas[18, 11].Should().BeEquivalentTo(goldColor);
            canvas[19, 11].Should().BeEquivalentTo(blackColor);

            canvas[12, 12].Should().BeEquivalentTo(blackColor);
            canvas[13, 12].Should().BeEquivalentTo(blackColor);
            canvas[14, 12].Should().BeEquivalentTo(blackColor);
            canvas[15, 12].Should().BeEquivalentTo(blackColor);
            canvas[16, 12].Should().BeEquivalentTo(blackColor);
            canvas[17, 12].Should().BeEquivalentTo(blackColor);
            canvas[18, 12].Should().BeEquivalentTo(blackColor);
            canvas[19, 12].Should().BeEquivalentTo(blackColor);
        }
Esempio n. 18
0
        public void Triangle2DToStringAndFromString()
        {
            var triangle = new Triangle2D(new Vector2D(1.2f, 2.3f), new Vector2D(-3.4f, 4.5f),
                                          new Vector2D(0.0f, -5.67f));
            string triangleString = triangle.ToString();

            Assert.AreEqual(triangle, new Triangle2D(triangleString));
            Assert.Throws <Triangle2D.InvalidNumberOfComponents>(() => new Triangle2D("1, 2, 3"));
            Assert.Throws <FormatException>(() => new Triangle2D("abc"));
        }
Esempio n. 19
0
 public IndexedTriangle(Triangulation triangulation, int point1, int point2, int point3)
 {
     this.triangulation = triangulation;
     p1            = point1;
     p2            = point2;
     p3            = point3;
     manifestation = new Triangle2D(triangulation.VertexAt(p1),
                                    triangulation.VertexAt(p2),
                                    triangulation.VertexAt(p3));
 }
Esempio n. 20
0
    public override bool Equals(object obj)
    {
        if (!(obj is Triangle2D))
        {
            return(false);
        }

        Triangle2D other = (Triangle2D)obj;

        return(a.Equals(other.a) && b.Equals(other.b) && c.Equals(other.c));
    }
Esempio n. 21
0
        public void GetCentroid()
        {
            Triangle2D triangle = new Triangle2D(new Point2D(0, 0),
                                                 new Point2D(1, 0),
                                                 new Point2D(0, 1));

            Point2D centroidExpected = new Point2D(0.3333333, 0.3333333);
            Point2D centroidActual   = triangle.Centroid;

            Assert.That(centroidExpected.Equals(centroidActual));
        }
Esempio n. 22
0
 public void Equals()
 {
     var triangle1 = new Triangle2D(new Point(1, 2), new Point(3, 4), new Point(5, 6));
     var triangle2 = new Triangle2D(new Point(11, 12), new Point(13, 14), new Point(15, 16));
     Assert.AreNotEqual(triangle1, triangle2);
     Assert.AreEqual(triangle1, new Triangle2D(new Point(1, 2), new Point(3, 4), new Point(5, 6)));
     Assert.IsTrue(triangle1 == new Triangle2D(new Point(1, 2), new Point(3, 4), new Point(5, 6)));
     Assert.IsTrue(triangle1 != triangle2);
     Assert.IsFalse(triangle1.Equals(triangle2));
     Assert.IsTrue(triangle1.Equals(triangle1));
 }
Esempio n. 23
0
 public void GetHashCodeViaDictionary()
 {
     var triangle1 = new Triangle2D(new Point(1, 2), new Point(3, 4), new Point(5, 6));
     var triangle1Similar = new Triangle2D(new Point(1, 2), new Point(3, 4), new Point(15, 16));
     var triangle2 = new Triangle2D(new Point(11, 12), new Point(13, 14), new Point(15, 16));
     var triangles = new Dictionary<Triangle2D, int> { { triangle1, 1 }, { triangle2, 2 } };
     Assert.IsTrue(triangles.ContainsKey(triangle1));
     Assert.IsTrue(triangles.ContainsKey(triangle2));
     Assert.IsFalse(
         triangles.ContainsKey(new Triangle2D(new Point(1, 2), new Point(3, 4), new Point(5, 7))));
     Assert.AreNotEqual(triangle1.GetHashCode(), triangle1Similar.GetHashCode());
 }
Esempio n. 24
0
        static internal double ShapeQuality(Triangle2D triangle)
        {
            //double angle = TriangleQuality(triangle);
            //double Area = triangle.A.X * triangle.B.Y + triangle.B.X * triangle.C.Y + triangle.C.X * triangle.A.Y - triangle.A.Y * triangle.B.X - triangle.B.Y * triangle.C.X - triangle.C.Y * triangle.A.X;

            //Area /= 2;
            //return Math.Exp(2*(angle - Math.PI / 3)) / Math.Abs(Area);

            double val = 0.05 / Math.Max(triangle.AB.Length, Math.Max(triangle.AC.Length, triangle.BC.Length));

            return(val);
        }
Esempio n. 25
0
    public void Fill()
    {
        Triangle2D superTriangle = findSuperTriangle(min - new Vector2(1, 1), max + new Vector2(1, 1));

        triangles.Add(superTriangle);

        foreach (Edge2D point in perimiter)
        {
            processPoint(point.a);
            processPoint(point.b);
        }

        // Cleanup
        int intersections;

        badTriangles.Clear();
        foreach (Triangle2D tri in triangles)
        {
            // If the triangle has a corner of the super triangle, remove it
            if (tri.HasPoint(superTriangle.a) || tri.HasPoint(superTriangle.b) ||
                tri.HasPoint(superTriangle.c))
            {
                badTriangles.Add(tri);
                continue;
            }

            // For an arbitrary line from the centre of the triangle,
            // see how many times we cross the perimiter.
            // If this is even, we are outside the perimiter.
            if (checkForHoles)
            {
                intersections = 0;
                Point2D centroid = tri.CentroidPoint();

                foreach (Edge2D edge in perimiter)
                {
                    if (edge.Intersects(centroid, superTriangle.a))
                    {
                        ++intersections;
                    }
                }
                if (intersections % 2 == 0)
                {
                    badTriangles.Add(tri);
                }
            }
        }

        foreach (Triangle2D tri in badTriangles)
        {
            triangles.Remove(tri);
        }
    }
Esempio n. 26
0
 private bool IsReflexPointInsideTriangle(Triangle2D t, int a, int b, int c)
 {
     for (int i = 0; i < reflexVertices.Count; i++)
     {
         Vector2D p = GetPoint(reflexVertices[i]);
         if (t.IsInside(p))
         {
             return(true);
         }
     }
     return(false);
 }
Esempio n. 27
0
 public bool Intersects(Triangle2D otherTriangle)
 {
     return
         (Math2d.CheckLinesIntersect(this.V1, this.V2, otherTriangle.V1, otherTriangle.V2) ||
          Math2d.CheckLinesIntersect(this.V1, this.V2, otherTriangle.V2, otherTriangle.V3) ||
          Math2d.CheckLinesIntersect(this.V1, this.V2, otherTriangle.V3, otherTriangle.V1) ||
          Math2d.CheckLinesIntersect(this.V2, this.V3, otherTriangle.V1, otherTriangle.V2) ||
          Math2d.CheckLinesIntersect(this.V2, this.V3, otherTriangle.V2, otherTriangle.V3) ||
          Math2d.CheckLinesIntersect(this.V2, this.V3, otherTriangle.V3, otherTriangle.V1) ||
          Math2d.CheckLinesIntersect(this.V3, this.V1, otherTriangle.V1, otherTriangle.V2) ||
          Math2d.CheckLinesIntersect(this.V3, this.V1, otherTriangle.V2, otherTriangle.V3) ||
          Math2d.CheckLinesIntersect(this.V3, this.V1, otherTriangle.V3, otherTriangle.V1));
 }
Esempio n. 28
0
 private static Triangle2D[] GetTriangles(Vector2[] verts, int[] triIndices)
 {
     Triangle2D[] tris = new Triangle2D[triIndices.Length / 3];
     for (int i = 0; i < tris.Length; i++)
     {
         tris[i] = new Triangle2D(
             verts[triIndices[i * 3]],
             verts[triIndices[i * 3 + 1]],
             verts[triIndices[i * 3 + 2]]
             );
     }
     return(tris);
 }
 public bool overlaps(Triangle2D sec)
 {
     return
         (intersection(p1, p2, sec.p1, sec.p2) ||
          intersection(p1, p2, sec.p2, sec.p3) ||
          intersection(p1, p2, sec.p1, sec.p3) ||
          intersection(p2, p3, sec.p1, sec.p2) ||
          intersection(p2, p3, sec.p2, sec.p3) ||
          intersection(p2, p3, sec.p1, sec.p3) ||
          intersection(p1, p3, sec.p1, sec.p2) ||
          intersection(p1, p3, sec.p2, sec.p3) ||
          intersection(p1, p3, sec.p1, sec.p3));
 }
Esempio n. 30
0
        /// <summary>
        /// Compute a measure of quality for the given face that ranges
        /// from 0 (degenerate triangle) to 1 (equilateral triangle)
        /// </summary>
        /// <param name="face"></param>
        private static double Quality(TFace face)
        {
            if (face.EdgeCount != 3)
            {
                throw new ArgumentException("Face must be triangular");
            }

            // The quality measure we use is (Sqrt(3) / 36) * (Area / Perimeter^2) which is dimensionless
            Triangle2D   triangle = new Triangle2D(face.Vertices.Cast <IPositionable2D>().Select(v => v.Position));
            const double factor   = 20.7846097; // 36 / Sqrt(3);
            double       quality  = factor * triangle.Area / Math.Pow(triangle.Perimeter, 2);

            return(quality);
        }
Esempio n. 31
0
        public static bool IsCollision(Triangle2D tri, Circle2D circle)
        {
            if (IsCollision(new Line2D(tri.p1, tri.p2), circle) || IsCollision(new Line2D(tri.p1, tri.p3), circle) || IsCollision(new Line2D(tri.p2, tri.p3), circle))
            {
                return(true);
            }

            if (IsCollision(tri, circle.point))
            {
                return(true);
            }

            return(false);
        }
Esempio n. 32
0
        public void Execute(IVectorImageProvider imageProvider)
        {
            bool          hasIntersections = false;
            VectorCloud2D cloud            = new VectorCloud2D(imageProvider.CurrImage.GetPrimitives <Vector2D>());

            for (int i = 0; i < cloud.Count - 2; i++)
            {
                Vector2D v1 = cloud[i];
                Vector2D v2 = cloud[i + 1];
                Vector2D v3 = cloud[i + 2];

                int countEqual = 0;
                if (v1.IsPositionEqual(v2))
                {
                    countEqual++;
                }
                if (v1.IsPositionEqual(v3))
                {
                    countEqual++;
                }
                if (v2.IsPositionEqual(v3))
                {
                    countEqual++;
                }
                bool isJumpLine = countEqual > 0;
                if (isJumpLine)
                {
                    imageProvider.CurrImage.Add(new Line2D(v1, v2));
                    imageProvider.CurrImage.Add(new Line2D(v2, v3));
                    imageProvider.CurrImage.Add(new Line2D(v3, v1));
                }
                else
                {
                    Triangle2D t = new Triangle2D(v1, v2, v3);
                    if (CheckTriangleListIntersection(imageProvider.CurrImage, t))
                    {
                        hasIntersections = true;
                        PrimitiveRenderData.Get(t).Color   = Color.Lime;
                        PrimitiveRenderData.Get(t.a).Color = Color.Lime;
                        PrimitiveRenderData.Get(t.b).Color = Color.Lime;
                        PrimitiveRenderData.Get(t.c).Color = Color.Lime;
                    }
                    imageProvider.CurrImage.Add(t);
                }
            }
            if (hasIntersections)
            {
                MessageBox.Show("Has intersections!!!!!!");
            }
        }
        /// <summary>
        /// Process a stack of triangles checking whether they fulfill the Delaunay constraint with respect to their adjacents, swapping edges if they do not.
        /// The adjacent triangles of the processed triangles are added to the stack too, so the check propagates until they all fulfill the condition.
        /// </summary>
        /// <param name="adjacentTrianglesToProcess">Initial set of triangles to check.</param>
        private void FulfillDelaunayConstraint(Stack <int> adjacentTrianglesToProcess)
        {
            while (adjacentTrianglesToProcess.Count > 0)
            {
                int currentTriangleToSwap = adjacentTrianglesToProcess.Pop();
                DelaunayTriangle triangle = m_triangleSet.GetTriangle(currentTriangleToSwap);

                const int OPPOSITE_TRIANGLE_INDEX = 1;

                if (triangle.adjacent[OPPOSITE_TRIANGLE_INDEX] == NO_ADJACENT_TRIANGLE)
                {
                    continue;
                }

                const int NOT_IN_EDGE_VERTEX_INDEX = 0;
                Vector2   triangleVertexNotInEdge  = m_triangleSet.GetPointByIndex(triangle.p[NOT_IN_EDGE_VERTEX_INDEX]);

                DelaunayTriangle oppositeTriangle       = m_triangleSet.GetTriangle(triangle.adjacent[OPPOSITE_TRIANGLE_INDEX]);
                Triangle2D       oppositeTrianglePoints = m_triangleSet.GetTrianglePoints(triangle.adjacent[OPPOSITE_TRIANGLE_INDEX]);

                if (MathUtils.IsPointInsideCircumcircle(oppositeTrianglePoints.p0, oppositeTrianglePoints.p1, oppositeTrianglePoints.p2, triangleVertexNotInEdge))
                {
                    // Finds the edge of the opposite triangle that is shared with the other triangle, this edge will be swapped
                    int sharedEdgeVertexLocalIndex = 0;

                    for (; sharedEdgeVertexLocalIndex < 3; ++sharedEdgeVertexLocalIndex)
                    {
                        if (oppositeTriangle.adjacent[sharedEdgeVertexLocalIndex] == currentTriangleToSwap)
                        {
                            break;
                        }
                    }

                    // Adds the 2 triangles that were adjacent to the opposite triangle, to be processed too
                    if (oppositeTriangle.adjacent[(sharedEdgeVertexLocalIndex + 1) % 3] != NO_ADJACENT_TRIANGLE)
                    {
                        adjacentTrianglesToProcess.Push(oppositeTriangle.adjacent[(sharedEdgeVertexLocalIndex + 1) % 3]);
                    }

                    if (oppositeTriangle.adjacent[(sharedEdgeVertexLocalIndex + 2) % 3] != NO_ADJACENT_TRIANGLE)
                    {
                        adjacentTrianglesToProcess.Push(oppositeTriangle.adjacent[(sharedEdgeVertexLocalIndex + 2) % 3]);
                    }

                    // 4.8: Swap edges
                    SwapEdges(currentTriangleToSwap, triangle, NOT_IN_EDGE_VERTEX_INDEX, oppositeTriangle, sharedEdgeVertexLocalIndex);
                }
            }
        }
Esempio n. 34
0
        public void Init()
        {
            _triangles = _mesh.triangles;
            _vertices = _mesh.vertices;
            _normals = _mesh.normals;
            _uvs = _mesh.uv;

            var triangleCount = _triangles.Length / 3;
            _uvTris = new Triangle2D[triangleCount];
            for (var i = 0; i < triangleCount; i++) {
                Vector2 uva, uvb, uvc;
                TriangleUvs(i, out uva, out uvb, out uvc);
                _uvTris[i] = new Triangle2D(uva, uvb, uvc);
            }
        }
Esempio n. 35
0
        public void Init()
        {
            _triangles = _mesh.triangles;
            _vertices  = _mesh.vertices;
            _normals   = _mesh.normals;
            _uvs       = _mesh.uv;

            var triangleCount = _triangles.Length / 3;

            _uvTris = new Triangle2D[triangleCount];
            for (var i = 0; i < triangleCount; i++)
            {
                _uvTris [i] = new Triangle2D(i, _vertices, _uvs, _normals, _triangles);
            }
        }
Esempio n. 36
0
 public void Triangle2DToString()
 {
     var triangle = new Triangle2D(new Point(1, 2), new Point(3, 4), new Point(5, 6));
     Assert.AreEqual("(1, 2) (3, 4) (5, 6)", triangle.ToString());
 }
Esempio n. 37
0
 public void Corner3()
 {
     var triangle = new Triangle2D { Corner3 = Point.Half };
     Assert.AreEqual(Point.Half, triangle.Corner3);
 }
Esempio n. 38
0
    /*

            // Create a new bitmap.
            Bitmap bmp = new Bitmap("c:\\fakePhoto.jpg");

            // Lock the bitmap's bits.
            Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
            System.Drawing.Imaging.BitmapData bmpData =
                bmp.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite,
                bmp.PixelFormat);

            // Get the address of the first line.
            IntPtr ptr = bmpData.Scan0;

            // Declare an array to hold the bytes of the bitmap.
            int bytes  = Math.Abs(bmpData.Stride) * bmp.Height;
    ���         byte[] rgbValues = new byte[bytes];

            // Copy the RGB values into the array.
            System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, bytes);

            // Set every third value to 255. A 24bpp bitmap will look red.
            for (int counter = 2; counter < rgbValues.Length; counter += 3)
                rgbValues[counter] = 255;

            // Copy the RGB values back to the bitmap
            System.Runtime.InteropServices.Marshal.Copy(rgbValues, 0, ptr, bytes);

            // Unlock the bits.
            bmp.UnlockBits(bmpData);

            // Draw the modified image.
            e.Graphics.DrawImage(bmp, 0, 150);

      */
    /*private void FromBitmap(Bitmap b,Int32[,] pole){

      for(int i = 0;i<b.Width;i++)
            for(int j = 0;j<b.Height;j++){
        pole[i,j] = b.GetPixel(i,j).ToArgb();
        }
    }

    private unsafe Bitmap ToBitmap(Int32[,] pole){
        Bitmap b;
        fixed(int* pp = &pole[0,0])
         b= new Bitmap(pole.GetLength(1), pole.GetLength(0),pole.GetLength(1)*4, System.Drawing.Imaging.PixelFormat.Format32bppArgb,(IntPtr)pp);
        return b;
    }*/
    void OnPaint(object sender, PaintEventArgs e)
    {
        //= new Bitmap(e.ClipRectangle.Width, e.ClipRectangle.Height, e.Graphics);
        //MyUnion union;
        if((e.ClipRectangle.Height != oldy) || (e.ClipRectangle.Width != oldx))
        {
          pole = new Int32[e.ClipRectangle.Height,e.ClipRectangle.Width];
          oldx = e.ClipRectangle.Width; oldy = e.ClipRectangle.Height;
        }else{Array.Clear(pole, 0, pole.Length);}

        //byte[] bytes = new byte[b.Width*b.Height*4];

        //Int32[,] pole = new Int32[b.Width,b.Height];
        Soft3DScreen s = new Soft3DScreen(pole);
        Triangle3D t3;
        Triangle2D t2;

        s.ViewMatrix.Translate(0,0,-5);
        s.ViewMatrix.RotateX(rx);
        s.ViewMatrix.RotateY(ry);

        Vector2 texcoord1 = new Vector2(-1,-1);
        Vector2 texcoord2 = new Vector2(-1,1);
        Vector2 texcoord3 = new Vector2(1,-1);
        Vector3 v1 = new Vector3(-1,-1,-1);
        Vector3 v2 = new Vector3(-1,1,-1);
        Vector3 v3 = new Vector3(1,-1,-1);
        t3 = new Triangle3D(v1,v2,v3);
        t2 = new Triangle2D(texcoord1,texcoord2,texcoord3);
        TexturedTriangle ttriangle = new TexturedTriangle(t3,t2,texture);
        s.DrawTexturedTriangle3d(ttriangle);

        texcoord1.Set(-1,1);
        texcoord2.Set(1,1);
        texcoord3.Set(1,-1);
        v1.Set(-1,1,-1);
        v2.Set(1,1,-1);
        v3.Set(1,-1,-1);
           t3 = new Triangle3D(v1,v2,v3);
        t2 = new Triangle2D(texcoord1,texcoord2,texcoord3);
        ttriangle = new TexturedTriangle(t3,t2,texture);
        s.DrawTexturedTriangle3d(ttriangle);

         /*   s.ActualColor = Color.White.ToArgb();

        v1.Set(-1,1,1);
        v2.Set(1,1,1);
        v3.Set(1,-1,1);
        //t3 = new Triangle3D(v1,v2,v3);
        s.DrawFilledTriangle3d(v1,v2,v3);

        v1.Set(-1,1,1);
        v2.Set(-1,-1,1);
        v3.Set(1,-1,1);
        //t3 = new Triangle3D(v1,v2,v3);
        s.DrawFilledTriangle3d(v1,v2,v3);

        s.ActualColor = Color.Green.ToArgb();

        v1.Set(1,1,1);
        v2.Set(1,1,-1);
        v3.Set(1,-1,1);
        //t3 = new Triangle3D(v1,v2,v3);
        s.DrawFilledTriangle3d(v1,v2,v3);

        v1.Set(1,-1,-1);
        v2.Set(1,1,-1);
        v3.Set(1,-1,1);
        //t3 = new Triangle3D(v1,v2,v3);
        s.DrawFilledTriangle3d(v1,v2,v3);

        s.ActualColor = Color.Blue.ToArgb();

        v1.Set(-1,1,1);
        v2.Set(-1,1,-1);
        v3.Set(-1,-1,1);
        //t3 = new Triangle3D(v1,v2,v3);
        s.DrawFilledTriangle3d(v1,v2,v3);;

        v1.Set(-1,-1,-1);
        v2.Set(-1,1,-1);
        v3.Set(-1,-1,1);
        //t3 = new Triangle3D(v1,v2,v3);
        s.DrawFilledTriangle3d(v1,v2,v3);

        s.ActualColor = Color.Cyan.ToArgb();

        v1.Set(1,1,1);
        v2.Set(1,1,-1);
        v3.Set(-1,1,1);
        //t3 = new Triangle3D(v1,v2,v3);
        s.DrawFilledTriangle3d(v1,v2,v3);

        v1.Set(-1,1,-1);
        v2.Set(-1,1,1);
        v3.Set(1,1,-1);
        //t3 = new Triangle3D(v1,v2,v3);
        s.DrawFilledTriangle3d(v1,v2,v3);

        s.ActualColor = Color.Orange.ToArgb();

        v1.Set(1,-1,1);
        v2.Set(1,-1,-1);
        v3.Set(-1,-1,1);
        //t3 = new Triangle3D(v1,v2,v3);
        s.DrawFilledTriangle3d(v1,v2,v3);

        v1.Set(-1,-1,-1);
        v2.Set(1,-1,-1);
        v3.Set(-1,-1,1);
        //t3 = new Triangle3D(v1,v2,v3);
        s.DrawFilledTriangle3d(v1,v2,v3);*/

        Bitmap b = Soft3DBitmap.ToBitmap(pole);

        e.Graphics.DrawImageUnscaled(b, 0, 0);
          	//e.Graphics.DrawImageUnscaled(texture, 0, 0);
    }
Esempio n. 39
0
 public void Triangle2DToStringAndFromString()
 {
     var triangle = new Triangle2D(new Point(1.2f, 2.3f), new Point(-3.4f, 4.5f),
         new Point(0.0f, -5.67f));
     string triangleString = triangle.ToString();
     Assert.AreEqual(triangle, new Triangle2D(triangleString));
     Assert.Throws<Triangle2D.InvalidNumberOfComponents>(() => new Triangle2D("abc"));
 }
Esempio n. 40
0
		public bool Equals(Triangle2D other)
		{
			return Corner1 == other.Corner1 && Corner2 == other.Corner2 && Corner3 == other.Corner3;
		}