====== 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}{|}}{|}}}{|}