    // The contents of this file are in the public domain. See LICENSE_FOR_EXAMPLE_PROGRAMS.txt
    /*

        This is an example illustrating the use of the perspective_window tool
        in the dlib C++ Library.  It is a simple tool for displaying 3D point
        clouds on the screen.

    */

    #include <dlib/gui_widgets.h>
    #include <dlib/image_transforms.h>
    #include <cmath>

    using namespace dlib;
    using namespace std;

    // ----------------------------------------------------------------------------------------

    int main()
    {
        // Let's make a point cloud that looks like a 3D spiral.
        std::vector<perspective_window::overlay_dot> points;
        dlib::rand rnd;
        for (double i = 0; i < 20; i+=0.001)
        {
            // Get a point on a spiral
            dlib::vector<double> val(sin(i),cos(i),i/4);

            // Now add some random noise to it
            dlib::vector<double> temp(rnd.get_random_gaussian(),
                                      rnd.get_random_gaussian(),
                                      rnd.get_random_gaussian());
            val += temp/20;

            // Pick a color based on how far we are along the spiral
            rgb_pixel color = colormap_jet(i,0,20);

            // And add the point to the list of points we will display
            points.push_back(perspective_window::overlay_dot(val, color));
        }

        // Now finally display the point cloud.
        perspective_window win;
        win.set_title("perspective_window 3D point cloud");
        win.add_overlay(points);
        win.wait_until_closed();
    }

    //  ----------------------------------------------------------------------------