====== Přímka ======
===== Vyjádření přímky =====
==== Parametrické vyjádření ====
=== Zápis ===
{{ lineparam.png?200|obr1: Parametrické vyjádření přímky}}
* Vektorově: b = a + v t
* Po složkách: b_1 = a_1 + v_1 t,...b_n = a_n + v_n t
* kde:
* **a**, **b** jsou body ležící na přímce
* **v** je směrový vektor přímky
* **t** je parametr
* **n** je dimenze prostoru, ve kterém je přímka popisována
=== Význam ===
* Bod **b** leží na přímce pokud vznikl přičtením libovolného **t**-násobku směrového vektoru **v** k jinému bodu **a**, ležícímu na přímce.
* Pro reprezentaci přímky je nutné uchovávat jeden bod přímky a její směrový vektor
* Směrový vektor je dobré uchovávat v normalizovaném tvaru
==== Obecná rovnice (pouze v rovině) ====
=== Zápis ===
{{ linegena.png?200|obr2: Obecná rovnice přímky}}
* Vektorově: dot(a, n) + c = 0
* Po složkách: a_1 n_1 + a_2 n_2 + c = 0
* kde:
* **a** je bod ležící na přímce (tzn. vektor od počátku soustavy souřadnic k tomuto bodu)
* **n** je normálový vektor přímky
* **c** je vzdálenost přímky od počátku soustavy souřadnic
=== Význam ===
* Bod **a** leží na přímce pokud jeho [[skalarnisoucin|skalární součin]] s normálovým vektorem přímky **n** je po přičtení konstanty **c** roven nule
* Normálový vektor je dobré uchovávat v normalizovaném (jednotkovém) tvaru
=== Osvětlení ===
{{ linegenb.png?200|obr3: Bod neležící na přímce}}
* Pokud je normálový vektor **n** v normalizovaném tvaru, můžeme si [[skalarnisoucin|skalární součin]] vektorů **a** a **n** představit jako [[skalarniprojekce|skalární projekci]] **a** na **n**, dostaneme tedy, jak je patrné z **obr2**, délku ortogonálního průmětu vektoru **a** (vektoru mezi počátkem a bodem **a**) do **n**, což je v tomto případě vzdálenost naší přímky od počátku. Za **c** proto dosazením do obecné rovnice přímky zvolíme opačnou hodnotu této vzdálenosti.
* Pokud není normálový vektor v normalizovaném tvaru, přesvědčíme se, že vztah platí stejně. Rozepíšeme [[skalarnisoucin|skalární součin]] pro **a** **n** jako dot(a, n) = delim{|}{delim{|}{n}{|}}{|} (delim{|}{delim{|}{a}{|}}{|} cos α) výraz v závorce je opět [[skalarniprojekce|skalární projekcí]] **a** na **n** a je násoben délkou vektoru **n**, ta je ale pro danou přímku konstantní => konstanta **c** bude také delim{|}{delim{|}{n}{|}}{|} násobkem hodnoty, které by se konstanta **c** rovnala při jednotkovém vektoru **n** => pokud dosadíme do rovnice bod, který na přímce leží, vyjde opět nula.
* Z výše uvedených bodů a **obr3** plyne, že po dosazení bodu, který na dané přímce neleží, do rovnice této přímky, rovnost platit nebude.
===== Vzájemná poloha bodu a přímky - klasifikace =====
==== Bod ležící na přímce ====
* Bod z vektorového prostoru s dimenzí dim >= 2 leží na přímce, pokud po dosazení tohoto bodu do rovnice přímky nastane rovnost.
==== Bod ležící mimo přímku ====
* Bod z vektorového prostoru s dimenzí dim >= 2 neleží na přímce, pokud po dosazení tohoto bodu do rovnice přímky nenastane rovnost.
===== Vzájemná poloha bodu a přímky - operace =====
==== Vzdálenost bodu a přímky ====
{{ linedist.png?200|obr4: Vzdálenost bodu a přímky}}
=== Parametrické vyjádření ===
* Hledáme-li vzdálenost bodu **b** od přímky p: x = a + v t, postupujeme následovně:
- Vyjdeme z toho, že spojnice bodu **b** s nejbližším bodem na přímce **p** musí být na přímku **p** kolmá: dot(x - b, v) = 0
- Dosadíme z rovnice přímky: dot(a - b + v t, v) = 0
- Označíme rozdíl bodů **a - b** jako vektor **u**: dot(u + v t, v) = 0
- Rozepíšeme pomocí [[skalarnisoucin#Definice|definice skalárního součinu]]: dot(u, v) + dot(v, v) t = 0
- Vyřešíme rovnici pro **t**, které pak dosadíme do rovnice přímky **p**, dostaneme tak bod **x**, který je kolmým průmětem bodu **b** do přímky **p**
- Vzdáleností bodu **b** od přímky **p** bude vzdálenost bodů **b** a **x**
=== Obecná rovnice (pouze v rovině) ===
* Pro nalezení vzdálenosti **l** bodu **b** od přímky s normálovým vektorem **n**, použijeme vzorec: l = {dot(b, n) + c}/{delim{|}{delim{|}{n}{|}}{|}}
* Výraz v čitateli představuje obecnou rovnici dané přímky, výraz ve jmenovateli je velikost jejího normálového vektoru, pokud je tedy normálový vektor už v normalizovaném tvaru, jmenovatel je roven jedné a nemusíme jej ve vzorci uvažovat.
* Z **obr2** a **obr4** je zřejmé že po dosazení bodu **b** do vzorce se odečte vzdálenost přímky od počátku od vzdálenosti ortogonálního průmětu bodu **b** do vektoru **n** od počátku a dostaneme tedy vzdálenost bodu **b** od dané přímky.
===== Vzájemná poloha dvou přímek - klasifikace =====
==== Rovnoběžné přímky ====
=== Parametrické vyjádření ===
* Přímka **p** je rovnobežná s přímkou **q**, pokud její směrový vektor je lineární kombinací směrového vektoru přímky **q** (jeho **t**-náskobkem pro t epsilon R).
=== Obecná rovnice (pouze v rovině) ===
* Přímka **p** je rovnobežná s přímkou **q**, pokud její normálový vektor je lineární kombinací normálového vektoru přímky **q** (jeho **t**-náskobkem pro t epsilon R).
==== Totožné přímky ====
=== Parametrické vyjádření ===
* Přímka **p** je rovnobežná s přímkou **q**, pokud její směrový vektor je lineární kombinací směrového vektoru přímky **q** a zároveň vektor od počátku k bodu **a** je lineární kombinací vektoru od počátku k bodu **b** (tj souřadnice bodu **a**; a epsilon p jsou **t**-násobkem souřadnic bodu **b**; b epsilon q pro t epsilon R).
=== Obecná rovnice (pouze v rovině) ===
* Přímka **p** je rovnobežná s přímkou **q**, pokud její normálový vektor je **t**-náskobkem normálového vektoru přímky **q** a zároveň vzdálenost přímky **p** od počátku **c** je **t**-násobkem vzdálenosti pro t epsilon R.
==== Různoběžné přímky ====
* Přímky **p** a **q** jsou různoběžné, pokud mají právě jeden společný bod-průsečík.
==== Mimoběžné přímky ====
* Přímky mohou být mimoběžné pouze v prostorech s dimenzí >= 3
* Přímky jsou mimoběžné pokud nemají stejný směr a žádný společný bod, tzn nejsou rovnoběžné ani různoběžné
* Z obou výše uvedených poznatků plyne: **Přímky jsou mimoněžné pokud neleží ve stejné rovině**
===== Vzájemná poloha dvou přímek - operace =====
==== Průsečík přímek ====
=== Parametrické vyjádření ===
* Průsečík přímek p: x = a + v t a q: x = a + u s nalezneme tak, že všechny rovnice obou parametrických vyjádření položíme sobě rovny, dostaneme tak pro **n** rozměrný prostor soustavu **n** rovnic o neznámých **t** a **s**. Po vyřešení soustavy zbyvá dosadit **t** do rovnic pro **p**, nebo **s** do rovnic pro **q** a získáme souřadnice průsečíku obou přímek.
* **POZOR:** Pokud hledáme v prostoru průsečík dvou přímek, nebo se pouze chceme přesvědčit, zda jsou tyto přímky různoběžné, je třeba při reprezentaci proměnných pomocí standartních desetinných datových typů (double, float) brát v potaz, že může docházet k nepřesnostem a i malá nepřesnost způsobí, že různoběžné přímky se stanou mimoběžnými. Tento problém lze odstranit tak, že místo průsečíku obou přímek hledáme jejich [[#Příčka mimoběžek|nejkratší příčku]], přičemž pokud je délka této příčky menší než minimální zvolené epsilon, považujeme přímky za různoběžné a libovolný z obou krajních bodů příčky považujeme za průsečík.
=== Obecná rovnice (pouze v rovině) ===
* Hledáme průsečík přímek p: dot(a, n) + c = 0 a q: dot(a, m) + d = 0, což je po rozespsání p: a_1 n_1 + a_2 n_2 + c = 0 a q: a_1 m_1 + a_2 m_2 + d = 0
- Hledáme bod, který bude pro obě přímky společný => bod **a** v rovnici přímky **p** musí být totožný s bodem **a** v rovnici přímky **q**, vyjádříme například z první rovnice vztah pro první souřadnici bodu **a**: a_1 = {- a_2 n_2 - c}/{n_1}
- Získaný vztah dosadíme do druhé rovnice a po úpravě dostaneme hodnotu druhé souřadnice průsečíku přímek **p** a **q**: a_2 = {c m_1 - d n_1}/{m_2 n_1 - m_1 n_2}
- Druhou souřanici dosadíme do výše odvozeného vztahu pro první souřadnici průsečíku a dostaneme: a_1 = {d n_2 - c m_2}/{m_2 n_1 - m_1 n_2}
- Výsledné vztahy pro obě souřadnice mají shodného jmenovatele, který pokud je nulový vztahy nemají řešení => přímky se neprotínají. A pokud se v rovině dvě přímky neprotínají jsou [[#Rovnoběžné přímky|rovnoběžné]].
==== Příčka mimoběžek ====
=== Popis ===
* Příčka dvou mimoběžek je přímka spojující dvě mimoběžné přímky, nejkratší příčka dvou mimoběžek je pak nejkratší přímka spojující tyto přímky
=== Nalezení nejkratší příčky dvou mimoběžek ===
* Uvažujeme-li přímky p: x = a + v t a q: y = b + u s
* Postup1:
- Hledáme bod **x** ležící na přímce **p** a bod **y** ležící na přímce **q**, pro které platí, že jejich vzdálenost je minimální: min delim{|}{delim{|}{y - x}{|}}{|}^2
- Po dosazení z rovnic přímek: min delim{|}{delim{|}{b - a + u s - v t}{|}}{|}^2
- Hledáme minimum => získaný vztah zderivujeme podle proměnných **t** a **s** a výsledky položíme rovno nule => řešíme soustavu dvou rovnic o dvou neznámých
- Výsledné **t** a **s** dosadíme do odpovídajících rovnic přímek a dostaneme krajní body příčky obou těchto přímek
* Postup2:
- Vyjdeme z toho, že příčka dvou přímek musí být kolmá na obě přímky: dot(y - x, v) = 0 a dot(y - x, u) = 0
- Dosadíme z rovnic přímek: dot(b - a + u s - v t, v) = 0 a dot(b - a + u s - v t, u) = 0
- Rodíl bodů **b - a** vyjádříme jako vektor **w**: dot(w + u s - v t, v) = 0 a dot(w + u s - v t, u) = 0
- Vyjdeme z [[skalarnisoucin#Definice|definice skalárního součinu]] a upravíme oba vztahy: dot(v, w) + dot(u, v) s - dot(v, v) t = 0 a dot(u, w) + dot(u, u) s - dot(u, v) t = 0
- Vyjádříme jednu neznámou, například **s**: s = {dot(u, v) t - dot(u, w)}/{dot(u, u)}
- Dosadíme a získáme vztah pro **t**: s = {dot(v, w) dot(u, u) - dot(u, w) dot(u, v)}/{dot(u, u) dot(v, v) - dot(u, v) dot(u, v)}
- Výsledné **t** a **s** dosadíme do odpovídajících rovnic přímek a dostaneme opět krajní body příčky obou těchto přímek
==== Vzdálenost přímek ====
Vzdálenost dvou přímek **p** a **q**, je délka nejkratší spojnice bodů a: a epsilon p a b: b epsilon q
=== Parametrické vyjádření ===
* Vzdálenost dvou přímek můžeme spočítat pro [[#Rovnoběžné přímky|rovnoběžné přímky]] a v prostoru s dimenzí dim >= 3 i pro [[#Mimoběžné přímky|mimoběžné přímky]]
* Pro dané dvě přímky **p**, **q** zadané parametricky spočítáme jejich vzdálenost jako délku jejich nejkratší spojnice => nalezeneme jejich nejkratší [[#Příčka mimoběžek|příčku]] a spočítáme její délku
=== Obecná rovnice (pouze v rovině) ===
* V rovině lze vzdálenost přímek spočítat pouze pro [[#Rovnoběžné přímky|rovnoběžné přímky]]
* Pokud máme dvě rovnoběžné přímky p: dot(a, n) + c a q: dot(b, m) + d, můžeme jejich vzdálenost vypočítat jako rozdíl jejich vzdáleností od počátku, tedy: delim{|}{c/{delim{|}{delim{|}{n}{|}}{|}} - d/{delim{|}{delim{|}{m}{|}}{|}}}{|}