Всім привіт!
Завдання - побудувати довільну окружність (дано x1, y1, r1), і з довільної точки (дано x2, y2) провести дотичну до цього кола.
Знайшов таку теорію:
Шлях вирішення може бути приблизно таким (див. Рис.)
Дано: центр окружності x0, y0, радіус R і точка з координатами a, b в довільному місці.
Знайдемо кут альфа як arctg ((b-y0) / (a-x0))
Далі знайдемо кут бета як arccos (R / Sqrt ((a-x0) ^ 2 + (b-y0) ^ 2))
Тепер Знайдемо кут гамма як 2п - альфа - бета
І нарешті, знаходимо точку x1, y1 ось так: x1 = x0-R * cos (гамма) і y1 = y0 + R * sin (гамма)
Коли точка x1, y1 знайдена, застосовуємо формулу для дотичній через точку на колі ..
Зробив таку прогу:
Але, як видно, дотична будується правильно, якщо тільки координата Х точки менше ніж координата Х центру кола, а якщо більше - дотична зміщена.
Ніяк не збагну, в чому помилка. Рішення напевно десь на поверхні
madman писал (а): Ніяк не збагну, в чому помилка. Рішення напевно десь на поверхні
Ну. вникати часу немає, але
Дотичних має бути дві
А помилка може виникати через тригонометричних функцій, точніше це не помилка функцій, а Ваша
Наприклад функції sin і cos періодичні, а відповідно одне й теж значення функції sin (x) буде при різних значеннях x. Обчислюючи зворотну функцію arcsin [sin (x)]. не факт, що вийде вірну відповідь.
Ніколи цим не цікавився, але по хорошому. Повинні отримати масив точок, з яких перевіркою "на дотичність" вибрати правильні.
Я звичайно можу помилятися, але сподіваюся що мене поправлять.
Знання декількох принципів звільняє від знання багатьох фактів!