Ejemplo n.º 1
0
        void AddNewArètesAndFace(int i1, int i2, int i3)
        {
            Vector3 v1 = PointHandler.pointList[i1].transform.position;
            Vector3 v2 = PointHandler.pointList[i2].transform.position;
            Vector3 v3 = PointHandler.pointList[i3].transform.position;

            Arète a1 = FindOrCreateArète(sommets[i1], sommets[i3]);
            Arète a2 = FindOrCreateArète(sommets[i3], sommets[i2]);
            Arète a3 = FindOrCreateArète(sommets[i2], sommets[i1]);

            faces.Add(new Face(a1, a2, a3));
        }
Ejemplo n.º 2
0
        Arète FindOrCreateArète(Sommet a, Sommet b)
        {
            foreach (Arète arète in arètes)
            {
                if (arète.A == a && arète.B == b || arète.B == a && arète.A == b)
                {
                    return(arète);
                }
            }
            Arète ar = new Arète(a, b);

            arètes.Add(ar);
            return(ar);
        }
Ejemplo n.º 3
0
        public void AddPq1(Vector3 v)
        {
            Sommet Pq1 = new Sommet(v);

            sommets.Add(Pq1);

            Arète[] ars = arètes.ToArray();

            foreach (Arète a in ars)
            {
                if (a.color != EPolyColor.Violet)
                {
                    continue;
                }

                Arète a1 = FindOrCreateArète(a.A, Pq1);
                Arète a2 = FindOrCreateArète(a.B, Pq1);
                Face  f  = new Face(a1, a2, a);
                faces.Add(f);
            }
        }
Ejemplo n.º 4
0
    IEnumerator StartTriangulation()
    {
        //if (PointHandler.pointList.Count < 3) return;

        //Tri du plus a gauche puis si égalité le plus en bas
        PointHandler.pointList.Sort(delegate(GameObject go1, GameObject go2)
        {
            if (go1.transform.position.x == go2.transform.position.x)
            {
                return(go1.transform.position.y > go2.transform.position.y ? 1 : -1);
            }
            else
            {
                return(go1.transform.position.x > go2.transform.position.x ? 1 : -1);
            }
        });

        triangles = new List <Triangle>();
        arètes    = new List <Arète>();
        sommets   = new List <Sommet>();

        Vector3 startDir = (PointHandler.pointList[1].transform.position - PointHandler.pointList[0].transform.position).normalized;
        Vector3 nextDir  = (PointHandler.pointList[2].transform.position - PointHandler.pointList[1].transform.position).normalized;

        {
            Sommet s1 = new Sommet(PointHandler.pointList[0].transform.position);
            Sommet s2 = new Sommet(PointHandler.pointList[1].transform.position);
            Sommet s3 = new Sommet(PointHandler.pointList[2].transform.position);
            sommets.Add(s1);
            sommets.Add(s2);
            sommets.Add(s3);

            if (startDir == nextDir)
            {
                Sommet s4 = new Sommet(PointHandler.pointList[3].transform.position);
                sommets.Add(s4);

                Arète a1 = new Arète(0, 1);
                Arète a2 = new Arète(1, 3);
                Arète a3 = new Arète(3, 0);
                arètes.Add(a1);
                arètes.Add(a2);
                arètes.Add(a3);

                Triangle t1 = new Triangle(0, 1, 2);
                triangles.Add(t1);

                Arète a4 = new Arète(1, 2);
                arètes.Add(a4);
                Arète a5 = new Arète(2, 3);
                arètes.Add(a5);

                Triangle t2 = new Triangle(3, 4, 2);
                triangles.Add(t2);
            }
            else
            {
                Arète a1 = new Arète(0, 1);
                Arète a2 = new Arète(1, 2);
                Arète a3 = new Arète(2, 0);
                arètes.Add(a1);
                arètes.Add(a2);
                arètes.Add(a3);

                Triangle t1 = new Triangle(0, 1, 2);
                triangles.Add(t1);
            }
        }

        // Ajouter tout les autres points
        for (int p = sommets.Count; p < PointHandler.pointList.Count; ++p)
        {
            Sommet sommetToAdd = new Sommet(PointHandler.pointList[p].transform.position);
            sommets.Add(sommetToAdd);

            Vector2 sommet2 = new Vector2(sommetToAdd.pos.x, sommetToAdd.pos.y);

            foreach (Arète A in arètes)
            {
                //if (A.isInterior) continue;
                A.isInterior = false;
                Vector3 center  = A.GetCenter();
                Vector2 centerA = new Vector2(center.x, center.y);

                foreach (Arète B in arètes)
                {
                    if (A == B)
                    {
                        continue;
                    }
                    Vector2 pi = new Vector2(0, 0);

                    if (LineSegmentsIntersection(centerA, sommet2, new Vector2(sommets[B.s1].pos.x, sommets[B.s1].pos.y), new Vector2(sommets[B.s2].pos.x, sommets[B.s2].pos.y), out pi))
                    {
                        A.isInterior = true;
                        break;
                    }
                }
            }

            int count = arètes.Count;
            for (int i = 0; i < count; ++i)
            {
                Arète A = arètes[i];
                if (!A.isInterior)
                {
                    Arète a1 = new Arète(A.s1, sommets.Count - 1);
                    arètes.Add(a1);
                    Arète a2 = new Arète(A.s2, sommets.Count - 1);
                    arètes.Add(a2);

                    Triangle tri = new Triangle(arètes.Count - 2, arètes.Count - 1, i);
                    triangles.Add(tri);
                }
            }
        }

        yield return(0);
    }
Ejemplo n.º 5
0
 public Face(Arète A, Arète B, Arète C)
 {
     this.A = A;
     this.B = B;
     this.C = C;
 }