Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];

Вниз

Коллизия Круга и Линии??   Найти похожие ветки 

 
ArhangelM   (2004-02-03 19:57) [0]

Как определить столкновения линии и круга при том условии что параметры круга: x,y,радиус, а параметры линии: x,y начальные и конечные. => Линия может быть под углом!! Желательно Функцию целиком!! ЗАранее благодарен!!


 
VMcL ©   (2004-02-03 20:50) [1]

Система ур-ний:

sqr(x - x0) + sqr(y - y0) = sqr(R);
ax + by + c = 0;

где x0, y0 - центр окружности, R - ее радиус; a, b - параметры прямой.


 
Wild   (2004-02-04 10:09) [2]

:) недавно столкнулся с похожей проблемой - может тебе поможет.
У меня была задача определить попала ли точка на линию, но...с заданной погрешностью, т.е. можно трактовать, что погрешность это и есть радиус окружности вокруг проверяемой точки.
Итак, у нас есть отрезок 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 подставляешь по очереди начало и конец отрезка
и проверяешь неравенство.
Успехов.


 
MBo ©   (2004-02-04 10:20) [3]

согласно определению круга достаточно вычислить расстояние от цетра до отрезка, например, как здесь:
http://algolist.manual.ru/maths/geom/distance/pointline.php


 
Wild   (2004-02-04 11:28) [4]

кста, VMcL - мне кажется твой метод не будет работать, если отрезок будет внутри круга, а ведь коллизия имеется....


 
VMcL ©   (2004-02-04 19:13) [5]

>>Wild  (04.02.04 11:28) [4]

Аргументируй.


 
Vertex   (2004-02-04 21:10) [6]

Блин MBo прав, че за геморой?
Проводим из центра окружности перпендикуляр к прямой, если он меньге равен радиусу окружности, значит коллизия есть.


 
MBo ©   (2004-02-05 06:15) [7]

>Vertex
Не только это, еще концы отрезка проверить.


 
Wild   (2004-02-05 12:26) [8]

>VMcL
сорри, :) прямая не может быть полностью внутри окружности - она ж бесконечная

НО! нам интересна не прямая, а отрезок. Читай сабж.


 
ArhangelM   (2004-02-05 18:14) [9]

>Vertex
Это коллизия с точкой!!


 
MBo ©   (2004-02-05 18:23) [10]

>ArhangelM   (05.02.04 18:14) [9]
>Это коллизия с точкой!!
Это ты о чем?


 
VMcL ©   (2004-02-06 15:05) [11]

>>Wild  (05.02.04 12:26) [8]
>НО! нам интересна не прямая, а отрезок. Читай сабж.

Прочитай сам: "линия"; что есть линия в пониманиии автора неизвестно. Может он имел в виду прямую, а может отрезок прямой.


 
Wild   (2004-02-06 15:32) [12]

блин, ну не сабж
 
> а параметры линии: x,y начальные и конечные.

Лан, пусть автор сам-то появится. Заделал пост и смылся :)


 
ArhangelM   (2004-02-08 21:15) [13]

Кхм... я просто уже решил эту проблему!!
Чё целую неделю коллизию писать чтоль???



Страницы: 1 вся ветка

Форум: "Игры";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.033 c
1-1085226128
Евгений
2004-05-22 15:42
2004.06.06
Парсинг


1-1085368608
SASH2
2004-05-24 07:16
2004.06.06
Сообщение о загрузке формы?


8-1080224905
Mihey
2004-03-25 17:28
2004.06.06
В поисках пикселя - benchmark


14-1084884223
Sergp
2004-05-18 16:43
2004.06.06
Какой это нехороший человек вытер ветку


14-1084783479
Искать и не сдаваться
2004-05-17 12:44
2004.06.06
Одна песенка из фабрики-4.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский