Beispiel #1
0
 public void UnselectSommet(Sommet s)
 {
     currentPlanet.textureFaces[s.faceID].mesh.colors             = currentPlanet.textureFaces[s.faceID].colorNormal;
     currentPlanet.textureFaces[s.coastSommet.faceID].mesh.colors = currentPlanet.textureFaces[s.coastSommet.faceID].colorNormal;
 }
 public override void Deplacer(double dx, double dy)
 {
     Sommet.Deplacer(dx, dy);
     Base.Deplacer(dx, dy);
 }
Beispiel #3
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);
    }
Beispiel #4
0
 public Arète(Sommet A, Sommet B)
 {
     this.A = A;
     this.B = B;
 }
Beispiel #5
0
 public Vector3 GetCenter()
 {
     return(Sommet.Moyenne(sommets));
 }
Beispiel #6
0
 public static void Elevate(Sommet s, float ratio)
 {
     s.changeCoord(s.coord * ratio);
 }