|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
05.03.2008, 16:28 | #1 |
Регистрация: 29.02.2008
Сообщений: 5
|
Пересечение прямой и круга
Подскажите пожалуйста, как отследить пересечение прямой и круга?
Есть линия, и точки центра круга(p1,p2), как это сделать? procedure Tenemy1.draw(laser1,laser2:boolean; p1,p2:integer); Код:
|
05.03.2008, 16:37 | #2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Пройдись по всем точкам линии и определи попадает ли она в окружность.
I'm learning to live...
|
05.03.2008, 16:51 | #3 |
Участник клуба
Регистрация: 02.09.2007
Сообщений: 1,193
|
Можно математически найти точки пересечения прямой и окружности:
(x-x0)^2+(y-y0)^2=R^2 - окружность, y=kx+b - прямая. Решаем систему, получаем квадратное уравнение (2 корня - 2 координаты). Линия между этими координатами и проходит внутри круга. Если система не имеет решений - линия и круг не пересекаются. Если корень один - линия касается круга. Последний раз редактировалось _Dmitry; 05.03.2008 в 16:55. |
05.03.2008, 17:02 | #4 |
Регистрация: 29.02.2008
Сообщений: 5
|
а как пройтись по линии? При каждом изменении переменных х и у нужно пересчитывать коэффицент к и b ? И сравнивать квадраты этих координат с квадратом радиуса?
|
05.03.2008, 17:06 | #5 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Один раз высчитай к и b а потом будеш получать Y
И сравнивай попадения точки в "радиус"
I'm learning to live...
|
05.03.2008, 17:53 | #6 |
Регистрация: 29.02.2008
Сообщений: 5
|
_Dmitry, пробывал, но как-то не получилось С этого впринципе и начинал.
Stilet, у меня проблемы возникают с построение уравнения для прямой . Если точка первая (0,0) а вторая (getmaxx,a), то получается что b=0...Находил b и к из системы уравнений, составленных для двух точек. |
05.03.2008, 19:01 | #7 |
Регистрация: 29.02.2008
Сообщений: 5
|
ай, сорри глупанул сильно))
то нормально что b=0, ща попробую сделать, потом отпишусь |
06.03.2008, 12:50 | #8 |
Забанен
Форумчанин Подтвердите свой е-майл
Регистрация: 01.11.2006
Сообщений: 420
|
_Dmitry прав
все сводится к решению квадратного уравнения вида: a1*x^2 + b1*x + c1 = 0 где: a1 = 1+k^2 b1 = -2*x0 + 2*k*b - 2*k*y0 c1 = b^2 + x0^2 - 2*b*y0 + y0^2 - R^2
Если ничто другое не помогает, прочтите, наконец, инструкцию! Аксиома Кана
|
11.03.2008, 17:01 | #9 |
Регистрация: 29.02.2008
Сообщений: 5
|
Спасибо всем, получилось как сказал Stilet(перебором всех точек). Если есть у кого свободное время, покажите пжл как математически можно это было сделать..
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Анимация прямой | NecroSlider | Помощь студентам | 3 | 23.04.2007 13:31 |
Объединение, пересечение, слияние массивов | -=Domestos=- | Помощь студентам | 6 | 25.12.2006 21:06 |