summaryrefslogtreecommitdiffstats
path: root/kscreensaver/kdesavers/rotation.h
diff options
context:
space:
mode:
Diffstat (limited to 'kscreensaver/kdesavers/rotation.h')
-rw-r--r--kscreensaver/kdesavers/rotation.h328
1 files changed, 0 insertions, 328 deletions
diff --git a/kscreensaver/kdesavers/rotation.h b/kscreensaver/kdesavers/rotation.h
deleted file mode 100644
index 0ae46469..00000000
--- a/kscreensaver/kdesavers/rotation.h
+++ /dev/null
@@ -1,328 +0,0 @@
-//============================================================================
-//
-// KRotation screen saver for KDE
-// Copyright (C) 2004 Georg Drenkhahn
-// $Id$
-//
-//============================================================================
-
-#ifndef __ROTATION_H__
-#define __ROTATION_H__
-
-#include <math.h>
-// STL headers
-#include <valarray>
-// TQt headers
-#include <tqwidget.h>
-#include <tqtimer.h>
-#include <tqgl.h>
-// GL headers
-#include <GL/glu.h>
-#include <GL/gl.h>
-// KDE headers
-#include <kscreensaver.h>
-
-#include "vec3.h"
-#include "rkodesolver.h"
-
-// KRotationSetupUi
-#include "rotationcfg.h"
-
-//--------------------------------------------------------------------
-
-/** @brief ODE solver for the Euler equations.
- *
- * Class implements RkOdeSolver<double> to solve the Euler equations of motion
- * tor the rotating object. */
-class EulerOdeSolver : public RkOdeSolver<double>
-{
- public:
- /** @brief Constructor for the ODE solver for the Euler equations.
- * @param t Time in seconds, integration variable
- * @param dt Initial time increment in seconds for integration, auto adjusted
- * later to guarantee precision
- * @param _A Moment of inertia along 1. figure axis
- * @param _B Moment of inertia along 2. figure axis
- * @param _C Moment of inertia along 3. figure axis
- * @param _y Vector of 12 elements containing the initial rotation vector
- * omega (elements 0 to 2), and the initial rotating systems coordinate
- * vectors e1, e2, e3 (elements 3 to 5, 6 to 8, and 9 to 11).
- * @param eps Relative precision per integration step, see
- * RkOdeSolver::RkOdeSolver(). */
- EulerOdeSolver(
- const double &t_,
- const double &dt_,
- const double &A_,
- const double &B_,
- const double &C_,
- std::valarray<double> &y_,
- const double &eps);
-
- protected:
- /** @brief ODE function for the Euler equation system
- * @param x time in seconds
- * @param y Vector of 12 elements containing the rotation vector omega
- * (elements 0 to 2), and the rotating systems coordinate vectors e1, e2, e3
- * (elements 3 to 5, 6 to 8, and 9 to 11).
- * @return derivation dy/dx */
- std::valarray<double>
- f(const double &x, const std::valarray<double> &y) const;
-
- private:
- /** Moments of inertia along the three figure axes */
- double A, B, C;
-};
-
-
-//--------------------------------------------------------------------
-
-/** @brief GL widget class for the KRotation screen saver
- *
- * Class implements TQGLWidget to display the KRotation screen saver. */
-class RotationGLWidget : public TQGLWidget
-{
- Q_OBJECT
-
-
- public:
- /** @brief Constructor of KRotation's GL widget
- * @param parent parent widget, passed to TQGLWidget's constructor
- * @param name name of widget, passed to TQGLWidget's constructor
- * @param omega current rotation vector
- * @param e1 x trace data
- * @param e2 y trace data
- * @param e3 z trace data
- * @param J 3 vector with momenta of inertia with respect to the 3 figure
- * axes. */
- RotationGLWidget(TQWidget* parent, const char* name,
- const vec3<double>& omega,
- const std::deque<vec3<double> >& e1,
- const std::deque<vec3<double> >& e2,
- const std::deque<vec3<double> >& e3,
- const vec3<double>& J);
-
- protected:
- /** Called if scenery (GL view) must be updated */
- virtual void paintGL();
- /** Called if gl widget was resized. Method makes adjustments for new
- * perspective */
- virtual void resizeGL(int w, int h);
- /** Setup the GL enviroment */
- virtual void initializeGL();
-
- private:
- /** @brief Draw 3D arrow
- * @param total_length total length of arrow
- * @param head_length length of arrow head (cone)
- * @param base_width width of arrow base
- * @param head_width width of arrow head (cone)
- *
- * The arrow is drawn from the coordinates zero point along th z direction.
- * The cone's tip is located at (0,0,@a total_length). */
- void myGlArrow(GLfloat total_length, GLfloat head_length,
- GLfloat base_width, GLfloat head_width);
- /** Draw the traces in the GL area */
- void draw_traces (void);
-
- private: // Private attributes
- /** Eye position distance from coordinate zero point */
- GLfloat eyeR;
- /** Eye position theta angle from z axis */
- GLfloat eyeTheta;
- /** Eye position phi angle (longitude) */
- GLfloat eyePhi;
- /** Box size */
- vec3<double> boxSize;
- /** GL object list of fixed coordinate systems axses */
- GLuint fixedAxses;
- /** GL object list of rotating coordinate systems axses */
- GLuint bodyAxses;
- /** Light position distance from coordinate zero point */
- GLfloat lightR;
- /** Light position theta angle from z axis */
- GLfloat lightTheta;
- /** Light position phi angle (longitude) */
- GLfloat lightPhi;
-
- /** stores position where the mouse button was pressed down */
- TQPoint mouse_press_pos;
-
- /** Length of the rotating coordinate system axses */
- GLfloat bodyAxsesLength;
- /** Length of the fixed coordinate system axses */
- GLfloat fixedAxsesLength;
-
- /** The openGL rotation matrix for the box. */
- GLfloat rotmat[16];
-
- /** reference to current rotation vector */
- const vec3<double>& omega;
- /** reference to x trace values */
- const std::deque<vec3<double> >& e1;
- /** reference to y trace values */
- const std::deque<vec3<double> >& e2;
- /** reference to z trace values */
- const std::deque<vec3<double> >& e3;
-};
-
-//--------------------------------------------------------------------
-
-/** @brief Main class of the KRotation screen saver
- *
- * This class implements KScreenSaver for the KRotation screen saver. */
-class KRotationSaver : public KScreenSaver
-{
- Q_OBJECT
-
-
- public:
- /** @brief Constructor of the KRotation screen saver object
- * @param drawable Id of the window in which the screen saver is drawed
- *
- * Initial settings are read from disk, the GL widget is set up and displayed
- * and the eq. of motion solver is started. */
- KRotationSaver(WId drawable);
- /** @brief Destructor of the KPendulum screen saver object
- *
- * Only KPendulumSaver::solver is destoyed. */
- ~KRotationSaver();
- /** read the saved settings from disk */
- void readSettings();
- /** init physical quantities and set up the ode solver */
- void initData();
-
- /** Returns length of traces in seconds of visibility, parameter from setup
- * dialog */
- inline double traceLengthSeconds(void) const {return m_traceLengthSeconds;}
- /** Sets the length of traces in seconds of visibility. */
- void setTraceLengthSeconds(const double& t);
- /** Lower argument limit for setTraceLengthSeconds() */
- static const double traceLengthSecondsLimitLower;
- /** Upper argument limit for setTraceLengthSeconds() */
- static const double traceLengthSecondsLimitUpper;
- /** Default value of KRotationSaver::m_traceLengthSeconds */
- static const double traceLengthSecondsDefault;
-
- /** Flags indicating if the traces for x,y,z are shown. Only relevant if
- * ::randomTraces is not set to true. Parameter from setup dialog */
- inline bool traceFlag(unsigned int n) const {return m_traceFlag[n];}
- /** (Un)Sets the x,y,z traces flags. */
- inline void setTraceFlag(unsigned int n, const bool& flag)
- {m_traceFlag[n] = flag;}
- /** Default values for KRotationSaver::m_traceFlag */
- static const bool traceFlagDefault[3];
-
- /** If flag is set to true the traces will be (de)activated randomly all 10
- * seconds. Parameter from setup dialog */
- inline bool randomTraces(void) const {return m_randomTraces;}
- /** (Un)Sets the random trace flag. */
- inline void setRandomTraces(const bool& flag) {m_randomTraces = flag;}
- /** Default value for KRotationSaver::m_randomTraces */
- static const bool randomTracesDefault = true;
-
- /** Returns the angular momentum. */
- inline double Lz(void) const {return m_Lz;}
- /** Sets the angular momentum. */
- void setLz(const double& Lz);
- /** Lower argument limit for setLz() */
- static const double LzLimitLower;
- /** Upper argument limit for setLz() */
- static const double LzLimitUpper;
- /** Default value for KRotationSaver::m_Lz */
- static const double LzDefault;
-
- /** Returns initial eulerian angle theta of the top body at t=0 sec. */
- inline double initEulerTheta(void) const {return m_initEulerTheta;}
- /** Set the initial eulerian angle theta of the top body at t=0 sec. */
- void setInitEulerTheta(const double& theta);
- /** Lower argument limit for setInitEulerTheta() */
- static const double initEulerThetaLimitLower;
- /** Upper argument limit for setInitEulerTheta() */
- static const double initEulerThetaLimitUpper;
- /** Default value for KRotationSaver::m_initEulerTheta */
- static const double initEulerThetaDefault;
-
- public slots:
- /** slot is called if integration should proceed by ::deltaT */
- void doTimeStep();
- /** slot is called if setup dialog changes in size and the GL area should be
- * adjusted */
- void resizeGlArea(TQResizeEvent* e);
-
- private:
- /** Momentum of inertia along figure axes */
- vec3<double> J;
- /** Initial eulerian angles phi of the top body at t=0s */
- double initEulerPhi;
- /** Initial eulerian angles psi of the top body at t=0s */
- double initEulerPsi;
-
- /** The ode solver which is used to integrate the equations of motion */
- EulerOdeSolver* solver;
- /** Gl widget of simulation */
- RotationGLWidget* glArea;
- /** Timer for the real time integration of the Euler equations */
- TQTimer* timer;
-
- /** current rotation vector */
- vec3<double> omega;
- /** deque of unit vectors of e1 figure axes in fixed frame coordinates */
- std::deque<vec3<double> > e1;
- /** deque of unit vectors of e2 figure axes in fixed frame coordinates */
- std::deque<vec3<double> > e2;
- /** deque of unit vectors of e3 figure axes in fixed frame coordinates */
- std::deque<vec3<double> > e3;
-
- /** Time step size for the integration in milliseconds. Used in
- * ::KRotationSaver and ::RotationGLWidget. */
- static const unsigned int deltaT = 20;
-
- /** Length of traces in seconds of visibility, parameter from setup dialog */
- double m_traceLengthSeconds;
- /** Flags indicating if the traces for x,y,z are shown. Only relevant if
- * ::randomTraces is not set to true. Parameter from setup dialog */
- bool m_traceFlag[3];
- /** If flag is set to true the traces will be (de)activated randomly all 10
- * seconds. Parameter from setup dialog */
- bool m_randomTraces;
- /** Angular momentum. This is a constant of motion and points always into
- * positive z direction. Parameter from setup dialog */
- double m_Lz;
- /** Initial eulerian angles theta of the top body at t=0 sec. Parameter from
- * setup dialog */
- double m_initEulerTheta;
-};
-
-//--------------------------------------------------------------------
-
-/** @brief KRotation screen saver setup dialog.
- *
- * This class handles the KRotation screen saver setup dialog. */
-class KRotationSetup : public KRotationSetupUi
-{
- Q_OBJECT
-
-
- public:
- KRotationSetup(TQWidget* parent = NULL, const char* name = NULL);
- ~KRotationSetup();
-
- public slots:
- /// slot for the OK Button: save settings and exit
- void okButtonClickedSlot(void);
- /// slot for the About Button: show the About dialog
- void aboutButtonClickedSlot(void);
- void randomTracesToggled(bool state);
- void xTraceToggled(bool state);
- void yTraceToggled(bool state);
- void zTraceToggled(bool state);
- void lengthEnteredSlot(const TQString& s);
- void LzEnteredSlot(const TQString& s);
- void thetaEnteredSlot(const TQString& s);
-
- private:
- /// the screen saver widget which is displayed in the preview area
- KRotationSaver* saver;
-};
-
-#endif