InsideTriangle() private méthode

private InsideTriangle ( Vector2 A, Vector2 B, Vector2 C, Vector2 P ) : bool
A Vector2
B Vector2
C Vector2
P Vector2
Résultat bool
Exemple #1
0
    void CheckEnemiesInside(out List <GSB_EnemyController> enemiesInside)
    {
        enemiesInside = new List <GSB_EnemyController>();

        if (_triangulator != null)
        {
            for (var i = 0; i < GSB_SceneManager.Instance.Enemies.Count; ++i)
            {
                if (!SelectingEnemies.Contains(GSB_SceneManager.Instance.Enemies[i]))
                {
                    for (var j = 0; j < GSB_SceneManager.Instance.SelectionMesh.sharedMesh.triangles.Length / 3; ++j)
                    {
                        Vector3 A = GSB_SceneManager.Instance.SelectionMesh.sharedMesh.vertices[
                            GSB_SceneManager.Instance.SelectionMesh.sharedMesh.triangles[
                                (j * 3) + 0]];

                        Vector3 B = GSB_SceneManager.Instance.SelectionMesh.sharedMesh.vertices[
                            GSB_SceneManager.Instance.SelectionMesh.sharedMesh.triangles[
                                (j * 3) + 1]];

                        Vector3 C = GSB_SceneManager.Instance.SelectionMesh.sharedMesh.vertices[
                            GSB_SceneManager.Instance.SelectionMesh.sharedMesh.triangles[
                                (j * 3) + 2]];

                        Vector3 P = GSB_SceneManager.Instance.Enemies[i].transform.position;

                        if (_triangulator.InsideTriangle(A, B, C, P))
                        {
                            enemiesInside.Add(GSB_SceneManager.Instance.Enemies[i]);
                        }
                    }
                }
            }
        }
    }
Exemple #2
0
    private bool InsidePolygon(Vector3 point_)
    {
        Vector3 rotpoint    = AffineRefToYAxis(normal, point_ - vertices[0]);
        Vector2 rotpoint_2D = new Vector2(rotpoint.x, rotpoint.z);

        List <Vector2> vertices_2D = new List <Vector2>();

        foreach (Vector3 item in vertices)
        {
            Vector3 rotVertex = AffineRefToYAxis(normal, item - vertices[0]);
            vertices_2D.Add(new Vector2(rotVertex.x, rotVertex.z));
        }

        // Use triangulator to get the indices for triangulation
        Triangulator triangulator_ = new Triangulator(vertices_2D);

        int[] indices_ = triangulator_.Triangulate();

        bool inside = false;

        for (int i = 0; i < indices_.Length / 3; i++)
        {
            Debug.Log(vertices_2D[indices_[3 * i]]);
            Debug.Log(vertices_2D[indices_[3 * i + 1]]);
            Debug.Log(vertices_2D[indices_[3 * i + 2]]);
            Debug.Log(rotpoint_2D);
            if (triangulator_.InsideTriangle(vertices_2D[indices_[3 * i + 2]],
                                             vertices_2D[indices_[3 * i + 1]],
                                             vertices_2D[indices_[3 * i]],
                                             rotpoint_2D))
            {
                inside = true;
                break;
            }
        }

        return(inside);
    }