Geometrie/Numerický výpočet průniku dvou kružnic

Z Wikiknih

Přejít na: navigace, hledání

Chceme vypočítat průsečíky C dvou kružnic, z nichž ani jedna neleží uvnitř druhé. Máme dány jejich středy [Ax, Ay], [Bx, By] a poloměry Ar a Br.

V obecném případě jsou tyto průsečíky 2. Budeme hledat jen jeden, jménem C. Druhý je osově převrácený okolo spojnice středů a snadno se nalezne.

Spočítáme vzdálenost středů:


d=\sqrt{(A_{x}-B_{x})^2+(A_{y}-B_{y})^2}

Představíme si, že středy kružnic jsou dvěma body trojúhelníka a hledaný průsečík třetím. Potom jsou vzdálenosti d, Ar a Br délkami stran.

Rozdělíme bodem S úsečku d na části m a n (takže m + n = d), abychom získali dva pravoúhlé trojúhelníky ACS a BCS. Tyto trojúhelníky mají společnou výšku v = |SC|. Potom platí:


A_{r}^2 = v^2 + m^2

a


B_{r}^2 = v^2 + n^2,

tudíž


A_{r}^2 - B_{r}^2 = m^2 - n^2 = (m + n)*(m - n) = d*(m - n).

Známe tedy rozdíl m a n:


(A_{r}^2 - B_{r}^2)/d = m - n = 2m - d,

pročež


m = (A_{r}^2 - B_{r}^2)/2d + d/2.

Spočítáme výšku trojúhelníka v bodě C s využitím Pythagorovy věty.


v = \sqrt{A_{r}^2 - m^2}

Lineárně interpolujeme vzdálenost mezi středy a získáváme souřadnice bodu S (uprostřed průsečíků!):

Sx = Ax + (m / d)(BxAx)

a Sy = Ay + (m / d)(ByAy)

Závěrem (pomocí jednoduchého triku se záměnou souřadnic z X a Y) přičteme/odečteme úsečku SC o délce v, kolmou na AB:


C_{x1,2} = S_{x} \pm (v/d)(A_{y} - B_{y})

a 
C_{y1,2} = S_{y} \pm (v/d)(A_{x} - B_{x})

A získáváme souřadnice obou bodů.