VectorLab šipky, které umí počítat

Tohle je statická kopie kapitoly pro vyhledávače. Interaktivní verze má animované obrázky, kontrolní otázky a tlačítka, která příklad načtou do kalkulačky.

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:   x = p + t·d      rovina:   (x − p) · n = 0bod + směr, bod + normála

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

xyqvzdálenost1,8432|(q−p) × d̂|pata kolmice(1,78, 0,83)parametr t1,963obsah rovnoběžníku1,8432
vzdálenost = 1,84315  ·  je to výška toho rovnoběžníku: obsah děleno délkou základny
Rovnoběžník má obsah |(q−p)×d̂| a jeho výška je hledaná vzdálenost. Táhni bodem a dívej se, jak spolu obsah a vzdálenost souvisí.
d = |(q − p) × d̂|      t = (q − p) · d̂ / |d̂|vzdálenost a pata kolmice

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“.

xyzℓ₁ℓ₂n = d₁×d₂q₁q₂vzdálenost mimoběžek1,5000kontrola:spojnice ⊥ oba směry0,000000 , 0,000000rovnoběžné → n = 0vzdálenost pořád existuje
  1. 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.

  2. 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.

  3. 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.

  4. d = |(p₂ − p₁)·| = 1,5000

    Vezme se libovolný spoj mezi přímkami — třeba p₂ − p₁ — a promítne se do směru . 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.

  5. 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.

  6. 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.

Šest kroků. Poslední se věnuje případu, kdy vzorec selže a úloha ne — rovnoběžkám.
d = |(p₂ − p₁) · n̂| ,  n = d₁ × d₂vzdálenost dvou mimoběžek

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

vzdálenost se znaménkem:   s = (q − p) · n̂na které straně a jak daleko

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.

Vzorce v této kapitole

d(q, ℓ) — vzdálenost bodu od přímky
d = |(q − p) × d| / |d| [—] kap. 10
d(ℓ₁, ℓ₂) — vzdálenost dvou mimoběžek
d = |(p₂ − p₁)·(d₁×d₂)| / |d₁×d₂| [—] kap. 10
s — vzdálenost bodu od roviny se znaménkem
s = (q − p) · n̂ [—] kap. 10