From 7592365228e00dcf3bb36f178fe39083c792b41c Mon Sep 17 00:00:00 2001
From: Jakub Pelc <jakub.pelc@email.cz>
Date: Thu, 6 Mar 2025 09:37:45 +0100
Subject: [PATCH] =?UTF-8?q?Dal=C5=A1=C3=AD=20reformulace=20specifikace?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 specifikace.md | 19 +++++++++++++------
 1 file changed, 13 insertions(+), 6 deletions(-)

diff --git a/specifikace.md b/specifikace.md
index 39754b4..c83bd6c 100644
--- a/specifikace.md
+++ b/specifikace.md
@@ -71,15 +71,19 @@ Kontrola délky instrukce se provádí porovnáním čtverců délky instrukce a
 
 ### 2) Řešení kolizí
 
-Kolize se řeší v **1 až 5 podkrocích**.
-V rámci každého podkroku se nejprve kontrolují kolize se všemi asteroidy a poté s ohraničujícím boxem.
-Pokud dojde ke kolizi během podkroku, kolize se vyřeší (viz. níže) a **okamžitě se zahájí další podkrok,** dokud není dosažen limit (5).
+Kolize se řeší v **1 až 5 podkrocích**. Každý podkrok má dvě fáze:
 
-Pokud během celého kroku dojde ke kolizi, rychlost závodníka se sníží na polovinu.
-Toto zpomalení může nastat nejvýše **jednou za krok**, bez ohledu na počet kolizí v individuálních podkrocích.
+- kontrola kolizí s asteroidy - v této fázi dojde k **nejvýše jedné** kolizi
+- kontrola kolizí s okraji mapy - kontrolujeme každý ze čtyř okrajů mapy
+
+Pokud v podkroku nedojde k žádné kolizi (ani s asteroidem, ani s okrajem mapy), považujeme kolize za vyřešené. Pokud ke kolizi dojde, provedeme další podkrok. Podkroků provedeme maximálně 5.
+
+Pokud v aspoň jednom podkroku dojde ke kolizi (ať už s asteroidem nebo s okrajem mapy), rychlost závodníka se sníží na polovinu.
+Toto zpomalení může tedy nastat nejvýše **jednou za krok**, bez ohledu na počet kolizí v individuálních podkrocích.
 
 #### Asteroidy
-Iterujeme přes všechny asteroidy `asteroid` v pořadí, v jakém byly přidány do simulace, a pro každý provádíme následující kroky:
+
+Iterujeme přes všechny asteroidy `asteroid` v **pořadí, v jakém byly přidány do simulace**, a pro každý provádíme následující kroky:
 
 - Pokud `euclidean_distance(asteroid, racer) > (asteroid.radius + racer.radius)`, kolize nenastala (pokračujeme k dalšímu asteroidu).
 - V případě kolize provedeme následující:
@@ -87,6 +91,9 @@ Iterujeme přes všechny asteroidy `asteroid` v pořadí, v jakém byly přidán
     - Vektor k vytlačení závodníka: `vn = racer.position - asteroid.position`.
     - Vzdálenost posunutí: `push_by = distance - (asteroid.radius + racer.radius)`.
     - Posuneme závodníka: `racer.position -= (push_by * vn) / distance`.
+    - **Přestaneme iterovat** přes asteroidy a posuneme se do další fáze podkroku (řešení kolize s okrajem mapy).
+
+Pokud by tedy loď kolidovala s více asteroidy, vyhodnotíme kolizi pouze s tím, který má nejnižší index.
 
 #### Ohraničující box
 Pro každou stranu boxu zkontrolujeme kolizi (například pokud `racer.x - racer.radius < box.min_x` pro levou stranu).