public void Restart()
    {
        if (container)
        {
            //Place all the point away from camera sight
            for (int i = 0; i < points.Count; i++)
            {
                points[i].transform.position = new Vector2(-999, -999);
            }
        }
        //Delete all the vertices points
        if (!(figure is null))
        {
            figure.Clear();
        }

        //Obtain data for the new configuration
        ChangeVertices(true);
        ChangeLength(true);
        ChangeSpeed();
        ChangeProportion(true);

        counter = 0;
        CounterUI.GetComponent <Text>().text = "Iteration: " + counter;
        figure   = new Figure(n, side, prefabPoint);
        vertices = figure.GetVertices();

        //Start position is random choosen
        currentPositionPoint = new Vector2(Random.Range(-side, side), Random.Range(-side, side)) * 1.5f;
        //Instantiate/set position of the point at position:currentPositionPoint
        DrawPoint(currentPositionPoint);
    }
    void DrawPoint(Vector2 posVertex)
    {
        GameObject tmp;

        if (counter < points.Count)
        {
            //The pool is still full so just set the position the the point at index counter
            points[counter].transform.position = posVertex;
        }
        else
        {
            //The pool is empty. Create a new object and add it to the pool
            tmp      = Instantiate(prefabPoint, posVertex, Quaternion.identity);
            tmp.name = "Point " + counter;
            tmp.transform.localScale = Vector3.one / 2;
            tmp.transform.SetParent(container.transform);
            points.Add(tmp);
        }
        //Update counter
        counter++;
        //Update UI
        CounterUI.GetComponent <Text>().text = "Iteration: " + counter;
    }