Click here to Skip to main content
15,887,683 members
Articles / Programming Languages / C++

A Normal / Exponential Random Generator and Histogram Class

Rate me:
Please Sign up or sign in to vote.
4.73/5 (11 votes)
2 Dec 20024 min read 276.4K   8.1K   55  
A fast random generator with normal or exponential distribution + a histogram class
In this article, you will find a fast generator for Random Variable, namely normal and exponential distributions. It is based on George Marsaglia's and Wai Wan Tsang's work.
/*
Plot Graphic Library,
a C++/MFC charting library.

  Copyright (C) 2001  de Halleux Jonathan

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

Contact: de Halleux Jonathan, pglinfo@patabelgos.org
*/
// viewGL2D.h: interface for the CPGLView2D class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_PGLVIEW2D_H__338966CB_1C93_11D4_8D89_00409503B978__INCLUDED_)
#define AFX_PGLVIEW2D_H__338966CB_1C93_11D4_8D89_00409503B978__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "PGLView.h"

/*! \brief A 2D view.

\ingroup PGLViewGroup
  This type of view is used for 2D graphs or drawings. 
It can handle basic mouse
events, such as zooming and panning
*/
class PGL_EXT_CLASS CPGLView2D : public CPGLView
{
DECLARE_SERIAL(CPGLView2D);

public:
    /**@name Class Members*/
    //@{
    /// default constructor
    CPGLView2D(double _m_dLeft=0.0,double _right=1.0,double _top=1.0,double _bottom=0.0);
    /// copy constructor
    CPGLView2D(const CPGLView2D& v2D);
    /// assignement constructor
    CPGLView2D& operator = (const CPGLView2D& v2D);
    /// destructor
    virtual ~CPGLView2D()
    {};

    /// init all the OpenGL states (blending, culling, smoothing, stipple, etc...)
    void InitGLState();
    /** reconstruct the projection matrice and model matrice
    The new viewport is defined by \_tx, \_tx, \_width et \_height
    */  
    void Reshape();
    /// pans the view of x (resp. y) pixels horizontaly (resp. verticaly)
    void Pan(int x,int y);
    /// zooms in of 25\%
    void ZoomIn();
    /// zooms out of 25\%
    void ZoomOut();
    /// zooms the box defined by the 2 points $(xStart, yStart, xEnd, yEnd)$
    void ZoomBox(int xStart,int yStart,int xEnd,int yEnd);
  //  void DrawBackground(){glRectf((GLfloat)m_dLeft, (GLfloat)m_dBottom, (GLfloat)m_dRight, (GLfloat)m_dTop);};
    /// change the project plane to \_left, \_right, \_top and \_bottom
	void ZoomAll(double _dLeft,double _dRight, double _dBottom, double _dTop);
	/// Plot to Encapsulated postscript
    void PlotGfx(gfxinterface::CGfxInterface& gfx);

	/// coordinate transformation
    double PixelToWorld(int iaxe, int pix);
    double PixelToWorldCoord(int iaxe, int pix);
    double PixelToWorld(int iaxe, double pix);
    double PixelToWorldCoord(int iaxe, double pix);

	double GetLeft() const
	{	return m_dLeft;}
	double GetRight() const
	{	return m_dRight;}
	double GetBottom() const
	{	return m_dBottom;}
	double GetTop() const
	{	return m_dTop;}

    /// Serialization
    void Serialize( CArchive& archive );

    /// Debuggin functions
#ifdef _DEBUG
    virtual void Dump( CDumpContext& dc ) const;
    virtual void AssertValid() const;    // Override
#endif
    //@}
protected:
    /**@name Class Parameter*/
    //@{
    /// left limit of the viewport
    double m_dLeft;
    /// right limit of the viewport
    double m_dRight;
    /// top limit of the viewport
    double m_dTop;
    /// bottom limit of the viewport
    double m_dBottom;
    //@}
};

#endif // !defined(AFX_VIEW2DCLASS1_H__338966CB_1C93_11D4_8D89_00409503B978__INCLUDED_)

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.


Written By
Engineer
United States United States
Jonathan de Halleux is Civil Engineer in Applied Mathematics. He finished his PhD in 2004 in the rainy country of Belgium. After 2 years in the Common Language Runtime (i.e. .net), he is now working at Microsoft Research on Pex (http://research.microsoft.com/pex).

Comments and Discussions