Jednotková kružnica so štyrmi postupne otočenými šípkami
Matematické základy informatiky
Komplexné čísla v hrách
Ako sa otočí auto v GTA VI?
web embed
Hra je otáčanie, 60-krát za sekundu
60 fps
= 60 snímok (frames per second). Hra každých 16,7 ms nakreslí nový obrázok a v každom musí všetko trochu pootočiť.
🚗
Auto zatáča
Smer jazdy sa pri každom snímku pootočí o kúsok.
🎥
Kamera krúži
Pohneš myšou a celý svet sa otočí okolo hráča.
🗺️
Minimapa
Mapa v rohu sa točí podľa toho, kam sa pozeráš.
Ako otočiť bod (x, y) o uhol θ? Stačí ho vynásobiť komplexným číslom.
Súradnicové osi a vektor z = 3 + i
Vektor i·z = −1 + 3i
Vektor i·i·z = −3 − i
z = 3 + i
i·z = −1 + 3i
i·i·z = −3 − i
Krát i = otočenie o 90°
z = 3 + i i·z = 3i + i² = −1 + 3i i·i·z = −z = −3 − i
Bod (3, 1) prejde na (−1, 3), potom na (−3, −1). Dĺžka ostáva rovnaká: |z| = √10. Nič sa nenatiahlo, len otočilo.
Zatáčanie v kóde
Python má komplexné čísla v sebe
import cmath, math smer = 1 + 0j # auto ide na východ volant = cmath.exp(1j*math.radians(3)) for snimok in range(60):     smer *= volant # 3° za snímku print(smer) # ≈ −1, otočka o 180°
TypeScript: napíšeš si ich sám
type C = { re: number; im: number }; const krat = (a: C, b: C): C => ({   re: a.re*b.re - a.im*b.im,   im: a.re*b.im + a.im*b.re, }); // (a+bi)(c+di) = (ac−bd) + (ad+bc)i
Jedno násobenie za snímku a auto zatáča. cmath.exp(iθ) = cos θ + i sin θ je Eulerov vzorec.
A v 3D? Kvaternióny
q = a + bi + cj + dk
Rozšírenie komplexných čísel o dve ďalšie imaginárne jednotky. Hamilton ich objavil v roku 1843 a vzorec vyryl do mosta v Dubline.
Unity
transform.rotation je typu Quaternion
Unreal Engine
FQuat
Plynulá kamera
Prechod medzi dvoma natočeniami bez trhania a zaseknutia
web embed
AirPods: ticho = krát (−1)
Mikrofón zachytí hluk a slúchadlo zahrá tú istú vlnu otočenú o 180°. Sčítajú sa na nulu a ty počuješ ticho.
web embed
Shazam: pesnička → komplexné čísla
Pre každú frekvenciu dostaneme komplexné číslo z: |z| je hlasitosť, arg z je fáza. Oranžové vrcholy sú „odtlačok prsta“ pesničky, ktorý Shazam porovná s databázou.
Na zamyslenie
Auto zatáča o 3° za snímku a hra beží na 60 fps.
Za koľko sekúnd sa otočí dokola?
360° / 3° = 120 snímok = 2 sekundy
(cos 3° + i sin 3°)¹²⁰ = cos 360° + i sin 360° = 1