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

Z testwiki
Skočit na navigaci Skočit na vyhledává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=(Ax−Bx)2+(Ay−By)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í:

Ar2=v2+m2

a

Br2=v2+n2,

tudíž

Ar2−Br2=m2−n2=(m+n)∗(m−n)=d∗(m−n).

Známe tedy rozdíl m a n:

(Ar2−Br2)/d=m−n=2m−d,

pročež

m=(Ar2−Br2)/2d+d/2.

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

v=Ar2−m2

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)(Bx−Ax)

a Sy=Ay+(m/d)(By−Ay)

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:

Cx1,2=Sx∓(v/d)(Ay−By)

a Cy1,2=Sy±(v/d)(Ax−Bx)

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