From 2afc695aba16ec9f7c3b90b29e31de8cadac84df Mon Sep 17 00:00:00 2001 From: Quinta <0pietroquintavalle0@gmail.com> Date: Fri, 12 Jul 2024 16:07:49 +0200 Subject: [PATCH] Resolved that annoying gravity bug and added trajectories, a grid, keyboard navigation and logarithimic scale --- .idea/vcs.xml | 2 +- CelestialBody.cpp | 13 +++- CelestialBody.h | 25 ++++--- README.md | 55 +++++++++++++++ Renderer.cpp | 172 ++++++++++++++++++++++++++++++++++++++++++---- Renderer.h | 19 ++++- Simulator.cpp | 25 ++++--- Simulator.h | 6 +- image.png | Bin 0 -> 83094 bytes main.cpp | 17 ++--- 10 files changed, 284 insertions(+), 50 deletions(-) create mode 100644 README.md create mode 100644 image.png diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 94a25f7..35eb1dd 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/CelestialBody.cpp b/CelestialBody.cpp index 1919b9e..c6ab7f0 100644 --- a/CelestialBody.cpp +++ b/CelestialBody.cpp @@ -12,10 +12,10 @@ std::string vec3_to_string(const glm::vec3& v) { return ss.str(); } -CelestialBody::CelestialBody(float mass, const glm::vec3& position, const glm::vec3& velocity) +CelestialBody::CelestialBody(double mass, const glm::dvec3& position, const glm::dvec3& velocity) : mass(mass), position(position), velocity(velocity), acceleration(0.0f) {} -void CelestialBody::update(float dt) { +void CelestialBody::update(double dt) { if (glm::any(glm::isnan(velocity)) || glm::any(glm::isinf(velocity))) { std::cout << "Warning: Invalid velocity detected: " << vec3_to_string(velocity) << std::endl; velocity = glm::vec3(0.0f); @@ -32,6 +32,13 @@ void CelestialBody::update(float dt) { acceleration = glm::vec3(0.0f); } -void CelestialBody::applyForce(const glm::vec3& force) { +void CelestialBody::applyForce(const glm::dvec3& force) { acceleration += force / mass; +} + +void CelestialBody::addToTrajectory(const glm::dvec3& position) { + trajectory.push_back(position); + if (trajectory.size() > MAX_TRAJECTORY_POINTS) { + trajectory.erase(trajectory.begin()); + } } \ No newline at end of file diff --git a/CelestialBody.h b/CelestialBody.h index 61c31b0..1c22a60 100644 --- a/CelestialBody.h +++ b/CelestialBody.h @@ -7,22 +7,27 @@ #pragma once #include #include +#include class CelestialBody { public: - CelestialBody(float mass, const glm::vec3& position, const glm::vec3& velocity); + CelestialBody(double mass, const glm::dvec3& position, const glm::dvec3& velocity); - void update(float dt); - void applyForce(const glm::vec3& force); + void update(double dt); + void applyForce(const glm::dvec3& force); - float getMass() const { return mass; } - glm::vec3 getPosition() const { return position; } - glm::vec3 getVelocity() const { return velocity; } + [[nodiscard]] double getMass() const { return mass; } + [[nodiscard]] glm::dvec3 getPosition() const { return position; } + [[nodiscard]] glm::dvec3 getVelocity() const { return velocity; } + void addToTrajectory(const glm::dvec3& position); + const std::vector& getTrajectory() const { return trajectory; } private: - float mass; - glm::vec3 position; - glm::vec3 velocity; - glm::vec3 acceleration; + double mass; + glm::dvec3 position; + glm::dvec3 velocity; + glm::dvec3 acceleration; + std::vector trajectory; + static const size_t MAX_TRAJECTORY_POINTS = 1000; }; #endif //GRAVITY_CELESTIALBODY_H diff --git a/README.md b/README.md new file mode 100644 index 0000000..1bbba71 --- /dev/null +++ b/README.md @@ -0,0 +1,55 @@ +# 3D Gravity Simulator Documentation + +## Overview + +This 3D Gravity Simulator is a C++ program that visualizes the gravitational interactions between celestial bodies in a simplified solar system model. It uses OpenGL for rendering and GLFW for window management and user input. + +## Program Structure + +The simulator consists of several key components: + +1. `Simulator`: Handles the physics calculations and updates the positions of celestial bodies. +2. `Renderer`: Manages the 3D rendering of the celestial bodies, trajectories, and grid. +3. `CelestialBody`: Represents individual celestial bodies with properties like mass, position, and velocity. + +## Physics Implementation + +### Gravitational Force + +The simulator uses Newton's law of universal gravitation to calculate the forces between celestial bodies. The gravitational force between two bodies is given by: + +$$ F = G \frac{m_1 m_2}{r^2} $$ + +Where: +- $F$ is the gravitational force between the two bodies +- $G$ is the gravitational constant ($$6.67430 \times 10^{-11} \, \text{N} \cdot \text{m}^2 / \text{kg}^2$$) +- $m_1$ and $m_2$ are the masses of the two bodies +- $r$ is the distance between the centers of the two bodies + +### Motion Update + +The motion of each celestial body is updated using numerical integration. We use a simple Euler method for updating positions and velocities: + +1. Calculate the net force on each body +2. Calculate acceleration: $$ \vec{a} = \frac{\vec{F}}{m} $$ +3. Update velocity: $$ \vec{v}_{new} = \vec{v}_{old} + \vec{a} \Delta t $$ +4. Update position: $$ \vec{x}_{new} = \vec{x}_{old} + \vec{v}_{new} \Delta t $$ + +Where $\Delta t$ is the time step of the simulation. + +## Rendering + +The program uses OpenGL to render the 3D scene: + +- Celestial bodies are represented as spheres with sizes proportional to their masses (using a logarithmic scale). +- A grid is drawn to provide a reference plane. +- Trajectories of the bodies are drawn as lines, fading out over time. +- The camera can be controlled using WASD keys for movement and the mouse for orientation. + +## Limitations and Simplifications + +1. The simulation uses a fixed time step, which can lead to inaccuracies in long-term simulations. +2. The Euler method for numerical integration is simple but can accumulate errors over time. +3. The scale of the celestial bodies and their distances are not to true scale to make visualization easier. +4. Relativistic effects are not considered; the simulation uses classical Newtonian mechanics. + diff --git a/Renderer.cpp b/Renderer.cpp index e429771..e4a15b2 100644 --- a/Renderer.cpp +++ b/Renderer.cpp @@ -9,7 +9,18 @@ #include #include -Renderer::Renderer(int width, int height) { +Renderer::Renderer(int width, int height) + : cameraPos(3e11f, 2e11f, 3e11f), + cameraFront(glm::normalize(glm::vec3(0.0f) - glm::vec3(3e11f, 2e11f, 3e11f))), + cameraUp(0.0f, 1.0f, 0.0f), + cameraSpeed(1e9f), // Reduced speed + mouseSensitivity(0.05f), // Reduced sensitivity + yaw(-45.0f), + pitch(-30.0f), + firstMouse(true), + lastX(width / 2.0f), + lastY(height / 2.0f) +{ if (!glfwInit()) { throw std::runtime_error("Failed to initialize GLFW"); } @@ -32,6 +43,13 @@ Renderer::Renderer(int width, int height) { glEnable(GL_COLOR_MATERIAL); createSphereMesh(1.0f, 20, 20); + + // Set up camera + glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED); + glfwSetWindowUserPointer(window, this); + glfwSetCursorPosCallback(window, [](GLFWwindow* window, double xpos, double ypos) { + static_cast(glfwGetWindowUserPointer(window))->cursorPosCallback(xpos, ypos); + }); } Renderer::~Renderer() { @@ -48,21 +66,58 @@ void Renderer::render(const Simulator& simulator) { glMatrixMode(GL_PROJECTION); glLoadIdentity(); - gluPerspective(45.0, 1024.0 / 768.0, 1e8, 1e12); + gluPerspective(45.0, 1600.0 / 1200.0, 1e9, 1e13); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); - gluLookAt(3e11, 2e11, 3e11, 0, 0, 0, 0, 1, 0); + glm::vec3 center = glm::vec3(0, 0, 0); // Look at the center of the system + gluLookAt(cameraPos.x, cameraPos.y, cameraPos.z, + center.x, center.y, center.z, + cameraUp.x, cameraUp.y, cameraUp.z); + drawGrid(simulator); - drawGrid(); + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + drawTrajectories(simulator.getBodies()); + glDisable(GL_BLEND); const auto& bodies = simulator.getBodies(); + double maxMass = 0; + double minMass = std::numeric_limits::max(); + + // Find the maximum and minimum masses + for (const auto& body : bodies) { + maxMass = std::max(maxMass, body.getMass()); + minMass = std::min(minMass, body.getMass()); + } + + std::cout << "Camera position: " << cameraPos.x << ", " << cameraPos.y << ", " << cameraPos.z << std::endl; + std::cout << "Camera front: " << cameraFront.x << ", " << cameraFront.y << ", " << cameraFront.z << std::endl; + for (size_t i = 0; i < bodies.size(); ++i) { const auto& body = bodies[i]; - float minSize = 2e9f; - float scaleFactor = std::max(std::cbrt(body.getMass()) * 1e-9f, minSize); + glm::dvec3 pos = body.getPosition(); + std::cout << "Body " << i << " position: " << pos.x << ", " << pos.y << ", " << pos.z << std::endl; + } + + // Calculate the log range + double logMinMass = std::log10(minMass); + double logMaxMass = std::log10(maxMass); + double logRange = logMaxMass - logMinMass; + + for (size_t i = 0; i < bodies.size(); ++i) { + const auto& body = bodies[i]; + + // Calculate the scale factor based on mass + double logMass = std::log10(body.getMass()); + double normalizedLogMass = (logMass - logMinMass) / logRange; + float minScale = 5e9f; // Minimum scale to ensure visibility + float maxScale = 5e10f; // Maximum scale to prevent overly large objects + float scaleFactor = minScale + static_cast(normalizedLogMass) * (maxScale - minScale); + + glm::dvec3 pos = body.getPosition(); + glm::vec3 renderPos(static_cast(pos.x), static_cast(pos.y), static_cast(pos.z)); - glm::vec3 pos = body.getPosition(); std::cout << "Rendering body " << i << " ("; switch(i) { case 0: std::cout << "Sun"; break; @@ -86,7 +141,7 @@ void Renderer::render(const Simulator& simulator) { default: glColor3f(1.0f, 1.0f, 1.0f); break; // White for any additional bodies } - drawSphere(body.getPosition(), scaleFactor); + drawSphere(renderPos, scaleFactor); } } @@ -191,6 +246,7 @@ void Renderer::drawDebugTriangle() { glMatrixMode(GL_MODELVIEW); glLoadIdentity(); + gluLookAt(4e11, 3e11, 4e11, 0, 0, 0, 0, 1, 0); glBegin(GL_TRIANGLES); glColor3f(1.0f, 0.0f, 0.0f); @@ -202,14 +258,100 @@ void Renderer::drawDebugTriangle() { glEnd(); } -void Renderer::drawGrid() { +float Renderer::calculateGravityFieldStrength(const glm::vec3& point, const std::vector& bodies) { + float fieldStrength = 0.0f; + const float G = 6.67430e-11f; // Gravitational constant + const float scalingFactor = 1e20f; // Greatly increased scaling factor + for (const auto& body : bodies) { + glm::dvec3 bodyPos = body.getPosition(); + float distance = glm::length(glm::vec3(bodyPos) - point); + if (distance < 1e9f) distance = 1e9f; // Prevent division by zero + fieldStrength += scalingFactor * G * static_cast(body.getMass()) / (distance * distance); + } + return fieldStrength; +} + +void Renderer::drawGrid(const Simulator& simulator) { + const float gridSize = 5e11f; + const int gridLines = 20; + const float lineSpacing = gridSize / gridLines; + glBegin(GL_LINES); - glColor3f(0.2f, 0.2f, 0.2f); // Gray color for the grid - for (float i = -5e11f; i <= 5e11f; i += 5e10f) { - glVertex3f(i, 0, -5e11f); - glVertex3f(i, 0, 5e11f); - glVertex3f(-5e11f, 0, i); - glVertex3f(5e11f, 0, i); + glColor3f(0.2f, 0.2f, 0.2f); // Lighter gray for better visibility + + for (int i = -gridLines/2; i <= gridLines/2; ++i) { + float pos = i * lineSpacing; + glVertex3f(-gridSize/2, 0, pos); + glVertex3f(gridSize/2, 0, pos); + glVertex3f(pos, 0, -gridSize/2); + glVertex3f(pos, 0, gridSize/2); + } + + glEnd(); +} + +void Renderer::drawTrajectories(const std::vector& bodies) { + glBegin(GL_LINES); + for (const auto& body : bodies) { + const auto& trajectory = body.getTrajectory(); + if (trajectory.size() < 2) continue; + + for (size_t i = 1; i < trajectory.size(); ++i) { + glm::vec3 p1(trajectory[i-1]); + glm::vec3 p2(trajectory[i]); + + // Fade out older parts of the trajectory + float alpha = static_cast(i) / trajectory.size(); + glColor4f(1.0f, 1.0f, 1.0f, alpha * 0.5f); + + glVertex3f(p1.x, p1.y, p1.z); + glVertex3f(p2.x, p2.y, p2.z); + } } glEnd(); +} + +void Renderer::processInput() { + if (glfwGetKey(window, GLFW_KEY_W) == GLFW_PRESS) + cameraPos += cameraSpeed * cameraFront; + if (glfwGetKey(window, GLFW_KEY_S) == GLFW_PRESS) + cameraPos -= cameraSpeed * cameraFront; + if (glfwGetKey(window, GLFW_KEY_A) == GLFW_PRESS) + cameraPos -= glm::normalize(glm::cross(cameraFront, cameraUp)) * cameraSpeed; + if (glfwGetKey(window, GLFW_KEY_D) == GLFW_PRESS) + cameraPos += glm::normalize(glm::cross(cameraFront, cameraUp)) * cameraSpeed; +} + +void Renderer::cursorPosCallback(double xpos, double ypos) { + if (firstMouse) { + lastX = xpos; + lastY = ypos; + firstMouse = false; + } + + float xoffset = xpos - lastX; + float yoffset = lastY - ypos; + lastX = xpos; + lastY = ypos; + + xoffset *= mouseSensitivity; + yoffset *= mouseSensitivity; + + yaw += xoffset; + pitch += yoffset; + + if (pitch > 89.0f) + pitch = 89.0f; + if (pitch < -89.0f) + pitch = -89.0f; + + updateCameraVectors(); +} + +void Renderer::updateCameraVectors() { + glm::vec3 front; + front.x = cos(glm::radians(yaw)) * cos(glm::radians(pitch)); + front.y = sin(glm::radians(pitch)); + front.z = sin(glm::radians(yaw)) * cos(glm::radians(pitch)); + cameraFront = glm::normalize(front); } \ No newline at end of file diff --git a/Renderer.h b/Renderer.h index 2f18a10..c0b02d1 100644 --- a/Renderer.h +++ b/Renderer.h @@ -18,6 +18,8 @@ public: void render(const Simulator& simulator); bool shouldClose(); void swapBuffers(); + void processInput(); + void cursorPosCallback(double xpos, double ypos); private: GLFWwindow* window; @@ -28,6 +30,21 @@ private: GLuint sphereVAO, sphereVBO, sphereEBO; int sphereVertexCount, sphereIndexCount; - void drawGrid(); + void drawGrid(const Simulator& simulator); + float calculateGravityFieldStrength(const glm::vec3& point, const std::vector& bodies); + void drawGravityField(const Simulator& simulator); + void drawTrajectories(const std::vector& bodies); + + glm::vec3 cameraPos; + glm::vec3 cameraFront; + glm::vec3 cameraUp; + float cameraSpeed; + float mouseSensitivity; + float yaw; + float pitch; + bool firstMouse; + double lastX, lastY; + + void updateCameraVectors(); }; #endif //GRAVITY_RENDERER_H diff --git a/Simulator.cpp b/Simulator.cpp index db6204a..f439ff7 100644 --- a/Simulator.cpp +++ b/Simulator.cpp @@ -4,6 +4,7 @@ #include "Simulator.h" #include #include +#include Simulator::Simulator() {} @@ -11,7 +12,12 @@ void Simulator::addBody(const CelestialBody& body) { bodies.push_back(body); } -void Simulator::update(float dt) { +void Simulator::update(double dt) { + // Sort bodies by mass (descending order) + std::sort(bodies.begin(), bodies.end(), [](const CelestialBody& a, const CelestialBody& b) { + return a.getMass() > b.getMass(); + }); + // Calculate and apply gravitational forces for (size_t i = 0; i < bodies.size(); ++i) { glm::vec3 totalForce(0.0f); @@ -25,14 +31,15 @@ void Simulator::update(float dt) { } // Update positions and velocities - for (auto& body : bodies) { - body.update(dt); + for (size_t i = 1; i < bodies.size(); ++i) { // Start from 1 to skip the Sun + bodies[i].update(dt); + bodies[i].addToTrajectory(bodies[i].getPosition()); } } -glm::vec3 Simulator::calculateGravitationalForce(const CelestialBody& body1, const CelestialBody& body2) { - glm::vec3 direction = body2.getPosition() - body1.getPosition(); - float distance = glm::length(direction); +glm::dvec3 Simulator::calculateGravitationalForce(const CelestialBody& body1, const CelestialBody& body2) { + glm::dvec3 direction = body2.getPosition() - body1.getPosition(); + double distance = glm::length(direction); // Avoid division by zero and unrealistic forces at very small distances if (distance < 1e9) { @@ -41,13 +48,13 @@ glm::vec3 Simulator::calculateGravitationalForce(const CelestialBody& body1, con } // Use the actual G value - const float G = 6.67430e-11f; - float forceMagnitude = G * (body1.getMass() * body2.getMass()) / (distance * distance); + const double G = 6.67430e-11; + double forceMagnitude = G * (body1.getMass() * body2.getMass()) / (distance * distance); if (std::isnan(forceMagnitude) || std::isinf(forceMagnitude)) { std::cout << "Warning: Invalid force magnitude calculated. Distance: " << distance << ", Masses: " << body1.getMass() << ", " << body2.getMass() << std::endl; - return glm::vec3(0.0f); + return glm::dvec3(0.0); } return glm::normalize(direction) * forceMagnitude; diff --git a/Simulator.h b/Simulator.h index 016b73f..8d40590 100644 --- a/Simulator.h +++ b/Simulator.h @@ -13,13 +13,13 @@ public: Simulator(); void addBody(const CelestialBody& body); - void update(float dt); + void update(double dt); const std::vector& getBodies() const { return bodies; } + glm::dvec3 calculateGravitationalForce(const CelestialBody& body1, const CelestialBody& body2); + private: std::vector bodies; const float G = 6.67430e-11f; // Gravitational constant - - glm::vec3 calculateGravitationalForce(const CelestialBody& body1, const CelestialBody& body2); }; #endif //GRAVITY_SIMULATOR_H diff --git a/image.png b/image.png new file mode 100644 index 0000000000000000000000000000000000000000..80a92b9844a52d4efe4ec1777e8cae5847dc776f GIT binary patch literal 83094 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 literal 0 HcmV?d00001 diff --git a/main.cpp b/main.cpp index bc04310..fde4020 100644 --- a/main.cpp +++ b/main.cpp @@ -8,31 +8,32 @@ int main() { Simulator simulator; - Renderer renderer(1024, 768); // Increased window size for better visibility + Renderer renderer(1600, 1200); // Increased window size for better visibility - // Sun - simulator.addBody(CelestialBody(1.989e30f, glm::vec3(0, 0, 0), glm::vec3(0, 0, 0))); +// Sun (at the center) + simulator.addBody(CelestialBody(1.989e30f, glm::dvec3(0, 0, 0), glm::dvec3(0, 0, 0))); // Mercury - simulator.addBody(CelestialBody(3.285e23f, glm::vec3(57.9e9f, 0, 0), glm::vec3(0, 47.36e3f, 0))); + simulator.addBody(CelestialBody(3.285e23f, glm::dvec3(57.9e9f, 0, 0), glm::dvec3(0, 47.36e3f, 0))); // Venus - simulator.addBody(CelestialBody(4.867e24f, glm::vec3(108.2e9f, 0, 0), glm::vec3(0, 35.02e3f, 0))); + simulator.addBody(CelestialBody(4.867e24f, glm::dvec3(108.2e9f, 0, 0), glm::dvec3(0, 35.02e3f, 0))); // Earth - simulator.addBody(CelestialBody(5.972e24f, glm::vec3(149.6e9f, 0, 0), glm::vec3(0, 29.78e3f, 0))); + simulator.addBody(CelestialBody(5.972e24f, glm::dvec3(149.6e9f, 0, 0), glm::dvec3(0, 29.78e3f, 0))); // Mars - simulator.addBody(CelestialBody(6.39e23f, glm::vec3(227.9e9f, 0, 0), glm::vec3(0, 24.07e3f, 0))); + simulator.addBody(CelestialBody(6.39e23f, glm::dvec3(227.9e9f, 0, 0), glm::dvec3(0, 24.07e3f, 0))); const float dt = 3600.0f; // Time step of 1 hour while (!renderer.shouldClose()) { + renderer.processInput(); simulator.update(dt); renderer.render(simulator); renderer.swapBuffers(); - std::this_thread::sleep_for(std::chrono::milliseconds(16)); // Aim for roughly 60 FPS + std::this_thread::sleep_for(std::chrono::milliseconds(16)); } return 0;