Ejemplo n.º 1
0
    void RegenerateLines()
    {
        foreach (var line in lines)
        {
            Destroy(line);
        }
        lines.Clear();

        var triangles = BowyerWatson.Triangulate(points);

        var graph = new HashSet <Edge>();

        foreach (var triangle in triangles)
        {
            graph.UnionWith(triangle.edges);
        }

        var tree = Kruskal.MinimumSpanningTree(graph);

        foreach (var edge in tree)
        {
            Vector3 p1           = new Vector3(edge.a.x, edge.a.y);
            Vector3 p2           = new Vector3(edge.b.x, edge.b.y);
            var     line         = new GameObject();
            var     lineRenderer = line.AddComponent <LineRenderer>();
            lineRenderer.material = lineMaterial;
            lineRenderer.SetPosition(0, p1);
            lineRenderer.SetPosition(1, p2);
            lines.Add(line);
        }
    }
Ejemplo n.º 2
0
    void AddTriangleIfInCell(BowyerWatson <WorleyNoise.CellData> .Triangle triangle)
    {
        bool triangleInCell = false;

        int floatIndex       = 0;
        var adjacentCellPair = new WorleyNoise.CellDataX2();

        for (int i = 0; i < 3; i++)
        {
            if (triangle[i].pos.Equals(cellPosition))
            {
                triangleInCell = true;
            }
            else
            {
                if (floatIndex > 1)
                {
                    continue;
                }

                adjacentCellPair[floatIndex] = triangle[i].pointObject;
                floatIndex++;
            }
        }

        if (triangleInCell)
        {
            cellVertices.Add(triangle.circumcircle.center);
            adjacentCells.Add(SortCellPairClockwise(adjacentCellPair));
            vertexRotations.Add(vectorUtil.RotationFromUp(triangle.circumcircle.center, cellPosition));
        }
    }
    void DrawTriangle(BowyerWatson <PositionWrapper> .Triangle triangle, Color color)
    {
        //Debug.DrawLine(triangle.a.pos, triangle.b.pos, color);
        //Debug.DrawLine(triangle.b.pos, triangle.c.pos, color);
        //Debug.DrawLine(triangle.c.pos, triangle.a.pos, color);

        Debug.DrawLine(triangle.a.pointObject.worldPosition, triangle.b.pointObject.worldPosition, color);
        Debug.DrawLine(triangle.b.pointObject.worldPosition, triangle.c.pointObject.worldPosition, color);
        Debug.DrawLine(triangle.c.pointObject.worldPosition, triangle.a.pointObject.worldPosition, color);
    }