Зиг-заг вписан в окружность

Задачу эту почему-то назвали арабской. Во какой талантливый народ! Зиг-заг состоит из трех отрезков: a, b, c, каждый отрезок ортогонален предыдущему, то есть расположены друг к другу под прямым углом. Известно, что вершины A, B, D расположены на окружности в зависимости длин трех отрезков. Найти нужно радиус этой окружности. И я добавил от себя - координаты ее центра. В моих миниатюрах есть статья о том, как я аналитически искал центр окружности по трем точкам. На рисунке показана ссылка на эту работу. И левая половина рисунка - как раз скопирована с указанной миниатюры. В инете есть несколько вариантов видео, в которых выводится формула чисто геометрически. Я решил проверить ее своим аналитическим подходом. Получил точно такую формулу для радиуса, что в роликах. Однако добавил и координаты центра окружности. Это позволяет без проблем делать иллюстрацию при помощи циркуля и линейки. Прогресс, однако! Верность формулы исходя из выражений в моей миниатюре осуществил по программе программе для частного случая:

a=100:b=80:c=60
x1=0:y1=0:x2=0:y2=a:x3=b:y3=a+c
A=x2^2+y2^2-x3^2-y3*2
B=x3^2+y3^2-x1^2-y1^2
C=x1^2+y1^2-x2^2-y2^2
Z=x1*(y2-y3)+x2*(y3-y1)+x3*(y1-y2)
x0=-1/2*(y1*A+y2*B+y3*C)/Z
y0=1/2*(x1*A+x2*B+x3*C)/Z
R1=sqrt((x1-x0)^2+(y1-y0)^2)
R2=sqrt((b^2+c^2)*(b^2+(a+c)^2))/(2*b)
print "   a = ";:print a;
print "   b = ";:print b;
print "   c = ";:print c
print "   x0 = ";:print x0 using "###.###"
print "   y0 = ";:print y0 using "###.###"
print "   R1 = ";:print R1 using "###.#####"
print "   R2 = ";:print R2 using "###.#####"

В результате получил:

 a = 100   b = 80   c = 60
   x0 = 100.000
   y0 =  50.000
   R1 = 111.80340
   R2 = 111.80340

Радиусы окружности полностью совпали, но зато я нашел координаты центра окружности. На иллюстрации - как раз этот вариант, где все линейные размеры в пикселах.

3 ноября 2022 г.


Рецензии