Цитата(Dimka @ 28.1.2012, 13:41) *

Ничего не понял. Напишите яснее что должна делать Ваша программа.

Почему три рисунка?




Программа должна рисовать две окружности. Заданны произвольные радиусы. Условие что бы маленькая окружность касалась большого круга и диаметра как показано на рисунке. В рисунке показаны различные варианты радиуса окружностей для более лучшего понимания задачи.


По условию видно что r не может больше чем R/2, иначе не будет касания большой окружности и диаметра как показано на рисунке.

Изображение

Для решения данной задачи нужно найти координаты маленькой окружности. Я вывел чудом формулу.помощью системы уравнений окружности.

Изображение

Координаты большой окружности 0,0. То есть это начало координат. На декартовую систему координат нарисованная в самом низу не обращать внимания. потом легко будет перенести на нижнюю систему координат.

R, r , x0=-r известны

x,y, y0 не известны.


Так как не известны x,y;(координаты точки касания)
я решил взял случай в котором радиус маленькой окружности будет максимальной величины.
То есть r=R/2.
вот как тут. (Рисунок первый)

Изображение

и взял их точки касания. Не трудно заметить что они будет равны x=-R,y=0 и подставил в уравнение.

Теперь x,y; типа известны. Вывел формулу и она оказалось рабочей для любых r<=R/2. Нашел y0;


Теперь координаты маленького круга известны. Они вычисляются по формуле x0=-r; y0=sqrt(2*R*r-R*R) И программа рисует окружности как надоsmile.gif


Следующая поставленная задача состоит в нахождении x,y то есть координаты точки касания окружностей.

Теоретически можно таким же образом найти x,y. Только тут две не известные координаты и все гораздо сложней. Теперь y0,x0,r,R известны; x,y не известны. 20 раз выводил формулу с нуля. И нет не работает