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

Z testwiki
Verze z 15. 6. 2020, 17:01, kterou vytvořil imported>Hugo (rv)
(rozdíl) ← Starší verze | zobrazit aktuální verzi (rozdíl) | Novější verze → (rozdíl)
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=(AxBx)2+(AyBy)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íž

Ar2Br2=m2n2=(m+n)*(mn)=d*(mn).

Známe tedy rozdíl m a n:

(Ar2Br2)/d=mn=2md,

pročež

m=(Ar2Br2)/2d+d/2.

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

v=Ar2m2

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:

Cx1,2=Sx(v/d)(AyBy)

a Cy1,2=Sy±(v/d)(AxBx)

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