From 07513a3b41d1e7d58bab5e2c9a0c3b623c9f5364 Mon Sep 17 00:00:00 2001 From: Oliver Bock <oliver.bock@aei.mpg.de> Date: Sat, 29 Nov 2008 15:36:21 +0100 Subject: [PATCH] Sent pulsar on a cricular orbit around a central companion * Again, not to scale! * Also: fixed quadrics pointer initialization --- src/pulsaranimationwidget.cpp | 49 +++++++++++++++++++++++++++++++---- src/pulsaranimationwidget.h | 9 +++++++ 2 files changed, 53 insertions(+), 5 deletions(-) diff --git a/src/pulsaranimationwidget.cpp b/src/pulsaranimationwidget.cpp index 9343798..92306db 100644 --- a/src/pulsaranimationwidget.cpp +++ b/src/pulsaranimationwidget.cpp @@ -23,18 +23,25 @@ PulsarAnimationWidget::PulsarAnimationWidget(QWidget *parent) : QGLWidget(parent), m_frameTimer(), - m_pulsarSpinTimer() + m_pulsarSpinTimer(), + m_orbitTimer() { connect(&m_frameTimer, SIGNAL(timeout()), this, SLOT(updateFrame())); connect(&m_pulsarSpinTimer, SIGNAL(timeout()), this, SLOT(updatePulsarSpin())); + connect(&m_orbitTimer, SIGNAL(timeout()), this, SLOT(updateOrbit())); - GLUquadricObj *m_quadricPulsar; - GLUquadricObj *m_quadricPulsarCone1; - GLUquadricObj *m_quadricPulsarCone2; + m_quadricPulsar = NULL; + m_quadricPulsarCone1 = NULL; + m_quadricPulsarCone2 = NULL; m_framesPerSecond = 25; + setPulsarSpinFrequency(0.5f); - m_pulsarRotationAngle = 0.0; + m_pulsarRotationAngle = 0.0f; + + setOrbitFrequency(0.25f); + setOrbitRadius(4.0f); + m_orbitRotationAngle = 0.0f; } PulsarAnimationWidget::~PulsarAnimationWidget() @@ -117,6 +124,13 @@ void PulsarAnimationWidget::paintGL() glMaterialfv(GL_FRONT, GL_SHININESS, low_shininess); glMaterialfv(GL_FRONT, GL_EMISSION, no_mat); + glPushMatrix(); + gluSphere(m_quadricPulsar, 1.0f, 32, 32); + glPopMatrix(); + + glRotatef(m_orbitRotationAngle, 0.0f, 1.0f, 0.0f); + glTranslatef(0.0f, 0.0f, m_orbitRadius); + glPushMatrix(); glRotatef(m_pulsarRotationAngle, 0.0f, 1.0f, 0.0f); gluSphere(m_quadricPulsar, 1.0f, 32, 32); @@ -139,20 +153,24 @@ void PulsarAnimationWidget::runAnimation() { m_frameTimer.start(1000.0 / m_framesPerSecond); m_pulsarSpinTimer.start(m_pulsarSpinFrequency); + m_orbitTimer.start(m_orbitFrequency); } void PulsarAnimationWidget::pauseAnimation() { m_frameTimer.stop(); m_pulsarSpinTimer.stop(); + m_orbitTimer.stop(); } void PulsarAnimationWidget::stopAnimation() { m_frameTimer.stop(); m_pulsarSpinTimer.stop(); + m_orbitTimer.stop(); m_pulsarRotationAngle = 0.0; + m_orbitRotationAngle = 0.0; updateGL(); } @@ -171,6 +189,16 @@ void PulsarAnimationWidget::updatePulsarSpin() } } +void PulsarAnimationWidget::updateOrbit() +{ + if(m_orbitRotationAngle <= 360.0) { + m_orbitRotationAngle++; + } + else { + m_orbitRotationAngle = 0.0; + } +} + void PulsarAnimationWidget::setFramePerSecond(const unsigned int fps) { m_framesPerSecond = fps; @@ -181,3 +209,14 @@ void PulsarAnimationWidget::setPulsarSpinFrequency(const float frequency) m_pulsarSpinFrequency = (unsigned int) (1000 / (frequency * 360.0f)); m_pulsarSpinTimer.setInterval(m_pulsarSpinFrequency); } + +void PulsarAnimationWidget::setOrbitRadius(const float radius) +{ + m_orbitRadius = -1.0 * radius; +} + +void PulsarAnimationWidget::setOrbitFrequency(const float frequency) +{ + m_orbitFrequency = (unsigned int) (1000 / (frequency * 360.0f)); + m_orbitTimer.setInterval(m_orbitFrequency); +} diff --git a/src/pulsaranimationwidget.h b/src/pulsaranimationwidget.h index 8106bc9..b16dd99 100644 --- a/src/pulsaranimationwidget.h +++ b/src/pulsaranimationwidget.h @@ -34,6 +34,8 @@ public: void setFramePerSecond(const unsigned int fps); void setPulsarSpinFrequency(const float frequency); + void setOrbitRadius(const float radius); + void setOrbitFrequency(const float frequency); public slots: void runAnimation(); @@ -42,6 +44,7 @@ public slots: void updateFrame(); void updatePulsarSpin(); + void updateOrbit(); protected: @@ -54,14 +57,20 @@ protected: private: QTimer m_frameTimer; QTimer m_pulsarSpinTimer; + QTimer m_orbitTimer; GLUquadricObj *m_quadricPulsar; GLUquadricObj *m_quadricPulsarCone1; GLUquadricObj *m_quadricPulsarCone2; int m_framesPerSecond; + float m_pulsarSpinFrequency; float m_pulsarRotationAngle; + + float m_orbitRadius; + float m_orbitFrequency; + float m_orbitRotationAngle; }; #endif /* PULSARANIMATIONWIDGET_H_ */ -- GitLab