From 4b9503eeec1cb67cca83ccc3ac7253665ee9577f Mon Sep 17 00:00:00 2001 From: Pc Date: Sat, 18 Jan 2025 15:13:25 +0100 Subject: [PATCH] Fix kolizji (nadal sa bugi) --- main.cpp | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/main.cpp b/main.cpp index 2f7c2d5..406a0cc 100644 --- a/main.cpp +++ b/main.cpp @@ -117,14 +117,14 @@ float MoveSpeed = 1.0f; // Prędkość poruszania się float velocity = 0.0f; // Aktualna prędkość łazika -const float friction = 0.1f; // Współczynnik tarcia (μ) +const float friction = 0.01f; // Współczynnik tarcia (μ) const float maxSpeed = 3.0f; // Maksymalna prędkość łazika const float acceleration = 0.2f; float rotationVelocity = 0.0f; // Prędkość obrotu łazika const float rotationAcceleration = 0.1f; // Przyspieszenie obrotu -const float rotationFriction = 0.05f; // Współczynnik tarcia obrotu +const float rotationFriction = 0.01f; // Współczynnik tarcia obrotu const float maxRotationSpeed = 3.0f; // Maksymalna prędkość obrotu // Struktura do reprezentacji płotu @@ -226,15 +226,19 @@ void UpdateRover(const std::vector& fences) { float newSides = Sides - velocity * cos(radRotation); // Nowa pozycja w osi X float newFoward = Foward - velocity * sin(radRotation); // Nowa pozycja w osi Z + // Wymiary łazika (połówki w osi X i Z) + const float roverHalfWidthX = 19.0f; // 38/2 + const float roverHalfLengthZ = 12.0f; // 24/2 + // Wyliczenie obszaru zajmowanego przez łazik - float roverXMin = newSides - 15.0f; - float roverXMax = newSides + 15.0f; - float roverZMin = newFoward - 15.0f; - float roverZMax = newFoward + 15.0f; + float roverXMin = newSides - roverHalfWidthX; + float roverXMax = newSides + roverHalfWidthX; + float roverZMin = newFoward - roverHalfLengthZ; + float roverZMax = newFoward + roverHalfLengthZ; // Sprawdzanie kolizji przed aktualizacją pozycji if (Kolizja == true) { - if (CheckAllFencesCollision(roverXMin, roverXMax, roverZMin, roverZMax, fences)) { + if (CheckAllFencesCollision(roverZMin, roverZMax, roverXMin, roverXMax, fences)) { // Jeśli jest kolizja, zatrzymujemy łazik velocity = 0.0f; cout << "Kolizja podczas ruchu\n"; @@ -247,13 +251,13 @@ void UpdateRover(const std::vector& fences) { // Sprawdzanie kolizji podczas obrotu if (rotationVelocity != 0.0f) { - // Wyliczamy narożniki łazika po obrocie + // Wyliczamy nową rotację float newRotation = Rotation + rotationVelocity; float radNewRotation = newRotation * GL_PI / 180.0f; - // Wyliczamy offsety narożników w nowych współrzędnych - float offsetX = 15.0f * cos(radNewRotation); - float offsetZ = 15.0f * sin(radNewRotation); + // Wyliczamy narożniki łazika po obrocie + float offsetX = roverHalfWidthX * cos(radNewRotation) + roverHalfLengthZ * sin(radNewRotation); + float offsetZ = roverHalfLengthZ * cos(radNewRotation) + roverHalfWidthX * sin(radNewRotation); // Wyznaczamy nowe granice łazika float rotatedXMin = Sides - offsetX;