Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.11.2011, 08:21   #1
stuFox
Новичок
Джуниор
 
Регистрация: 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.
stuFox вне форума Ответить с цитированием
Старый 29.11.2011, 08:26   #2
Zer0
Форумчанин
 
Аватар для Zer0
 
Регистрация: 13.12.2007
Сообщений: 788
По умолчанию

А в чем у Вас проблема? С алгоритмами или программировать не умеете?
благодарность - сюда (не забываем писать от кого)
Zer0 вне форума Ответить с цитированием
Старый 29.11.2011, 09:17   #3
stuFox
Новичок
Джуниор
 
Регистрация: 29.11.2011
Сообщений: 2
По умолчанию

программировать умею,на уровне чайника,может чуть по лучше,т.к. только первый курс
с этой задачей сколько не сидела,не могу понять как написать её.
stuFox вне форума Ответить с цитированием
Старый 29.11.2011, 09:56   #4
Zer0
Форумчанин
 
Аватар для Zer0
 
Регистрация: 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, то следуем следующему алгоритму
благодарность - сюда (не забываем писать от кого)
Zer0 вне форума Ответить с цитированием
Старый 29.11.2011, 10:04   #5
Zer0
Форумчанин
 
Аватар для Zer0
 
Регистрация: 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)
Изображения
Тип файла: png 1.png (10.4 Кб, 46 просмотров)
благодарность - сюда (не забываем писать от кого)

Последний раз редактировалось Zer0; 29.11.2011 в 10:11.
Zer0 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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