![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Коллизия Круга и Линии??
ArhangelM © (2004-02-03 19:57:00)Как определить столкновения линии и круга при том условии что параметры круга: x,y,радиус, а параметры линии: x,y начальные и конечные. => Линия может быть под углом!! Желательно Функцию целиком!! ЗАранее благодарен!!
ArhangelM (2004-02-08 21:15:00) [1]Кхм... я просто уже решил эту проблему!!
Чё целую неделю коллизию писать чтоль???
Wild (2004-02-06 15:32:00) [2]блин, ну не сабж
> а параметры линии: x,y начальные и конечные.
Лан, пусть автор сам-то появится. Заделал пост и смылся :)
VMcL (2004-02-06 15:05:00) [3]>>Wild (05.02.04 12:26) [8]
>НО! нам интересна не прямая, а отрезок. Читай сабж.
Прочитай сам: "линия"; что есть линия в пониманиии автора неизвестно. Может он имел в виду прямую, а может отрезок прямой.
MBo (2004-02-05 18:23:00) [4]>ArhangelM (05.02.04 18:14) [9]
>Это коллизия с точкой!!
Это ты о чем?
ArhangelM (2004-02-05 18:14:00) [5]>Vertex
Это коллизия с точкой!!
Wild (2004-02-05 12:26:00) [6]>VMcL
сорри, :) прямая не может быть полностью внутри окружности - она ж бесконечная
НО! нам интересна не прямая, а отрезок. Читай сабж.
MBo (2004-02-05 06:15:00) [7]>Vertex
Не только это, еще концы отрезка проверить.
Vertex (2004-02-04 21:10:00) [8]Блин MBo прав, че за геморой?
Проводим из центра окружности перпендикуляр к прямой, если он меньге равен радиусу окружности, значит коллизия есть.
VMcL (2004-02-04 19:13:00) [9]>>Wild (04.02.04 11:28) [4]
Аргументируй.
Wild (2004-02-04 11:28:00) [10]кста, VMcL - мне кажется твой метод не будет работать, если отрезок будет внутри круга, а ведь коллизия имеется....
MBo (2004-02-04 10:20:00) [11]согласно определению круга достаточно вычислить расстояние от цетра до отрезка, например, как здесь:
http://algolist.manual.ru/maths/geom/distance/pointline.php
Wild (2004-02-04 10:09:00) [12]:) недавно столкнулся с похожей проблемой - может тебе поможет.
У меня была задача определить попала ли точка на линию, но...с заданной погрешностью, т.е. можно трактовать, что погрешность это и есть радиус окружности вокруг проверяемой точки.
Итак, у нас есть отрезок A(x1,y1) - B(x2,y2), и точка C(x3,y3) {твой центр окружности}. Построим мысленно треугольник ACB и опустим высоту из точки С на основание АВ. Нам надо посчитать ее длину. Высота, ессно, поделит наш треугольник на два прямоугольных треугольника...и построив систему уравнений - я пришел к такой формуле: Обозначим длину высоты - h. Пусть высота пересекает основание АВ в точке D. Найдем длины строн a=AC, b=CB, c=AB. Я уверен, что длину отрезков этих ты знаешь как найти, но на всякий случай напишу:
Например АС, a = SQRT( SQR(x3-x1)+SQR(y3-y1) )
остальные аналогично.
Пусть d=AD, для нее я построил такую формулу:
d = (c*c+a*a-b*b)/(2*c) //если надо, пришлю ход мыслей :)
Теперь мы должны проверить d:
- если оно меньше 0, то угол CAD тупой и высота AD не опускается на основание AB (этот случай рассмотрим ниже)
- если d > C, то другой угол тупой и тоже высота не опускается
:) Ну а если все нормально, то теперь считаем высоту:
h = SQRT( a*a-d*d );
Проверяем значение h - если оно 0<=h<=R(твой радиус), то прямая пересекает окружность, и обратно....
Теперь, мне кажется, надо разобраться с теми двумя случаями, когда углы тупые получаются (в моей задаче это просто не надо было). Я думаю, что здесь надо просто проверить попадание концов отрезка внутрь окружности:
sqr(x - x0) + sqr(y - y0) <= sqr(R); //как написано выше...
теперь вместо x,y подставляешь по очереди начало и конец отрезка
и проверяешь неравенство.
Успехов.
VMcL (2004-02-03 20:50:00) [13]Система ур-ний:
sqr(x - x0) + sqr(y - y0) = sqr(R);
ax + by + c = 0;
где x0, y0 - центр окружности, R - ее радиус; a, b - параметры прямой.