Přímky a roviny: vzdálenosti, průsečíky, mimoběžky
Dosud šlo o vektory samotné. Teď se z nich postaví objekty, se kterými pracuje geometrie stroje: osa kloubu, dráha nástroje, deska stolu, obrazová rovina kamery.
Jak se zapisují
Přímka je bod a směr, rovina bod a normála. Tenhle rozdíl není náhoda: přímka se popisuje tím, kudy vede, rovina tím, kam nevede. Ve třech rozměrech je to úspornější — normála je jeden vektor, kdežto dva směry v rovině by byly dva.
Vzdálenost bodu od přímky
Vzdálenost se dá spočítat dvěma způsoby: najít patu kolmice a změřit, nebo rovnou vzít velikost vektorového součinu. Druhý je lepší, a to i numericky: součin nepotřebuje dělení a nezhorší se, když pata leží daleko po směru přímky.
Mimoběžky
Tohle je ta věc, kterou rovinná geometrie nemá a která překvapí každého, kdo přejde do prostoru: dvě přímky se v prostoru skoro nikdy neprotnou. Otázka „kde se protnou“ je proto skoro vždycky špatně položená a nahrazuje se otázkou „jak blízko se minou“.
- p₁ + t·d₁ a p₂ + s·d₂
Dvě přímky v prostoru se skoro nikdy neprotnou. V rovině se protnou vždycky (pokud nejsou rovnoběžné), v prostoru je průsečík vzácná výjimka — je to jedna rovnice navíc než neznámých.
- hledáme nejkratší spojnici q₁q₂
Užitečná otázka proto není „kde se protnou“, ale jak blízko se minou. To je ta veličina, kterou chce každá kontrola kolize a každý návrh, kde kolem sebe projedou dvě ramena.
- n = d₁ × d₂
Nejkratší spojnice musí být kolmá na obě přímky — kdyby nebyla, dala by se posunutím podél té přímky ještě zkrátit. A vektor kolmý na dva jiné umíme od kapitoly 6.
- d = |(p₂ − p₁)·n̂| = 1,5000
Vezme se libovolný spoj mezi přímkami — třeba p₂ − p₁ — a promítne se do směru n̂. To je kapitola 5. Že na volbě těch dvou bodů nezáleží, je právě proto, že posun podél přímky je na n kolmý a do průmětu nepřispěje.
- q₁, q₂ — nejbližší dvojice bodů
Body samotné se dopočítají z jedné malé soustavy dvou rovnic. Kalkulačka je vypíše a testy je ověřují dvěma cestami: spojnice musí být kolmá na oba směry, a vzdálenost se musí shodovat s uzavřeným vzorcem z předchozího kroku.
- d₁ × d₂ = 0 → n neexistuje
U rovnoběžných přímek vektorový součin zmizí a vzorec se rozpadne — ale úloha ne. Vzdálenost pořád existuje, jen je všude stejná a nejbližších dvojic je nekonečně mnoho. Solver to hlásí jako případ, ne jako chybu.
Kde to potřebujete. Vzdálenost dvou úseček je jádro každé rychlé kontroly kolize: ramena, kabely i nástroje se v hrubém přiblížení modelují jako válce kolem úseček, takže „projedou kolem sebe?“ je „je vzdálenost os větší než součet poloměrů?“. A společná kolmice dvou os je také přesně to, čemu se v DH konvenci říká vzdálenost a odsazení — viz KineLab.
Rovina a bod, rovina a přímka
U roviny je nejužitečnější, že vzdálenost vyjde se znaménkem: kladná na té straně, kam míří normála. Půlka praktických použití chce jen to znaménko — je nástroj nad stolem, nebo pod ním? Je ta stěna přivrácená ke kameře?
Průsečík přímky s rovinou má tři možné odpovědi a solver je rozlišuje: jeden bod; přímka je rovnoběžná a leží mimo; přímka leží celá v rovině. Kód, který počítá jen první z nich, dělí v ostatních dvou nulou.