![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 29.11.2011
Сообщений: 2
|
![]()
Помогите решить,пожалуйста несколько задач
вот одна из них: Задана окружность с центром в точке x0, y0 и радиусом R. Через точку па плоскости с координатами x, y проводятся касательные к этой окружности. Вам необходимо определить координаты точек касания. Входные данные: В первой строке записаны пять чисел x0, y0, r, x, y типа TInt (соответственно координаты центра и радиус окружности, координаты точки) Выходные данные: В первой строке вывести число N - количество точек касания. В следующих N строках нужно вывести N пар чисел x, y (координаты точек касания), с точностью до 5-го знака после запятой. Последний раз редактировалось rpy3uH; 29.11.2011 в 09:59. |
![]() |
![]() |
![]() |
#3 |
Новичок
Джуниор
Регистрация: 29.11.2011
Сообщений: 2
|
![]()
программировать умею,на уровне чайника,может чуть по лучше,т.к. только первый курс
с этой задачей сколько не сидела,не могу понять как написать её. |
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 13.12.2007
Сообщений: 788
|
![]()
Хорошо, попробую объяснить алгоритм
Имеем уравнение окружности (X-x0)^2+(y-y0)^2=R^2 Смотрим, если точка X лежит внутри (X-x0)^2+(y-y0)^2<R^2, то пишем что касательных нет Если точка лежит на окружности - (X-x0)^2+(y-y0)^2=R^2, то касательных бесконечно много, но точка касания одна - как раз эта самая точка Если точка лежит вне окружности - (X-x0)^2+(y-y0)^2>R^2, то следуем следующему алгоритму
благодарность - сюда (не забываем писать от кого)
|
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 13.12.2007
Сообщений: 788
|
![]()
чтобы было понятнее, ниже добавил рисунок
мы имеем две точки - A(центр окружности) и B (точка через которую идет прямая) При таких условиях можно провести только две касательных, найдем точки пересечения Проведем линию AB, касательные (BC,BD) и радиусы к этим точкам (AC,AD) Если посмотрим на треугольник ABC, то видим, что он является прямоугольным, где AB - гипотенуза, а BC - катет, и оба этих отрезка известны (BC=радиусу, AB - находится как расстояние между точками) Соответственно мы можем посчитать угол BAC, его косинус будет равен AC/AB угол BAD такой же, при желании можете доказать Теперь нам нужно найти угол между осью абсцисс и прямой AB(назовем этот угол BAH), это тоже несложно, т.к. можно опустить из точки B высоту и получить прямоугольный треугольник с гипотенузой AB и катетами размером X и Y, пусть мы будем рассматривать так же косинусы, то есть cos BAH = X/AB Теперь мы имеем почти все что нужно. Можно посчитать координаты точек касания: Cx=X0+R*cos(угол BAH+угол BAC) Cy=Y0+R*sin(угол BAH+угол BAC) Аналогично для D: Dx=X0+R*cos(угол BAH-угол BAD) Dy=Y0+R*sin(угол BAH-угол BAD)
благодарность - сюда (не забываем писать от кого)
Последний раз редактировалось Zer0; 29.11.2011 в 10:11. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
C++ задачи! | Roma9201 | Помощь студентам | 5 | 24.06.2011 14:13 |
задачи по С | Paradise 48 | Помощь студентам | 0 | 15.05.2011 20:22 |
4 задачи в системе Mathematica(задачи уже решены) | Toni Milano | Фриланс | 2 | 08.02.2011 19:28 |
2 Задачи | GLAM2 | Общие вопросы C/C++ | 4 | 05.12.2010 15:59 |
Задачи в делфи. информационная модель задачи. | @leks@ | Помощь студентам | 2 | 17.10.2010 19:15 |