Текущий архив: 2005.06.06;
Скачать: CL | DM;
Вниз
возведение в квадрат Найти похожие ветки
← →
Думкин © (2005-05-20 09:31) [40]> [39] Кщд © (20.05.05 09:29)
Разве он это заметил? Не только. Квалрат может целиком лежать в круге и центр второго не лежать в квадрате.
← →
Думкин © (2005-05-20 09:34) [41]> [36] SergP © (20.05.05 09:25)
А рисунок так делается:
1. Берем квадрат. Ставим его на сторону.
2. Сверху на угол - колесо, так чтобы его цент не лежал на продолжении диагонали.
3. Соединяем центры - пересечения с фигурами в соседях не лежат.
4. Немного увеличиваем радиус.
← →
Кщд © (2005-05-20 09:35) [42]Думкин © (20.05.05 09:27) [37]
>И после нахождения пересечений надо проверить, что они принадлежат >не только прямым образующим квадрат, но и его стороне.
вот поэтому и неравенста
в общем, частный, элементарный случай геом. vs алг. подхода, имхо.
господин Думкин, матфак?
← →
Defunct © (2005-05-20 09:35) [43]> Подскажите пожалуйста способ самого оптимального определения пересекаются ли круг и прямоугольник.
1. Сделать грубую проверку. Круг представить в виде квадрата. Алгоритм определения пересечений двух прямоугольников прост и быстр.
2. Если грубая проверка пройдена и прямоугольники пересекаются, тогда делать более тщательную.
← →
Кщд © (2005-05-20 09:37) [44]Думкин © (20.05.05 09:31) [40]
да, поторопился.
конечно же, там взаимная проверка.
← →
Думкин © (2005-05-20 09:39) [45]> [42] Кщд © (20.05.05 09:35)
Ну понятно. Бум считать что решили.
И он тоже - ММФ. Ты вроде там же? Я тебе в Асю стучусь.
← →
Кщд © (2005-05-20 09:40) [46]ещё вариант:
1. Проверка на вложенность друг в друга
2. 4 выражения на кратчайшее расстояние от прямой до точки
3. если минимум одно <= радиусу, то пересечение
← →
Чапаев © (2005-05-20 10:35) [47]> Думкин
> Defunct
Sqr(x) лучше x*x в данном случае потому, что доступ к полям Predator & Prey осуществляется ОДИН раз...
← →
Green_Templar © (2005-05-20 12:58) [48]Поправочка: прямоугольник паралелен сторонам экрана.
Мой алгоритм самый крутой :)
Ищем минимальное расстояние до прямоугольника, если оно меньше или равно радиусу, то пересекаются, иначе нет. Впрочем, лучше сами посмотрите :)
function intersectcandrect(var top,right,bottom,left,x,y,r:integer):boolean;
var minx,miny:integer;
begin
if (top<=y) and (bottom>=y) then miny:=0 else if abs(y-top)<abs(bottom-y) then miny:=abs(y-top) else miny:=abs(bottom-y);
if (left>=x) and (right<=x) then minx:=0 else if abs(x-left)<abs(right-x) then minx:=abs(x-left) else minx:=abs(right-x);
if sqrt(sqr(minx)+sqr(miny))<=r then intersectcandrect:=true else intersectcandrect:=false;
end;
Кому нужно могу выслать пример, иллюстрирующий работоспособность алгоритма.
← →
Думкин © (2005-05-20 15:36) [49]> [47] Чапаев © (20.05.05 10:35)
Этого же эффекта можно достичь иным способом. Речь была все-таки видимо не о данном конкретном случае со сложным выражением. Во-всяком случае, в нашей с Defunct"ом дискуссии.
> Поправочка: прямоугольник паралелен сторонам экрана.
> Мой алгоритм самый крутой :)
Расстояние от центра окружности?
Рассмотрим случай, когда окружность опирается на угол и центр окружности, вершина соответствующая и центр квадрата - на одной прямой. Потом немного сдвинем окружность в сторону центра. Пересечение налицо. Но что скажет ваш алгоритм? А ведь истинное расстояние от вашего - отличается.
← →
SergP. (2005-05-20 17:00) [50]Кстати хотелось бы уточнить:
Имеется ввиду пересечение контуров или наличие обших площадей?
Вобще-то по тому что в условии было сказано "круг" а не "окружность" я так понял что имеется ввиду все-таки наличие общих площадей.
Но кто его знает что хотел автор... Вдруг он неправильно выразился?
← →
Green_Templar © (2005-05-20 18:49) [51]Расстояние от центра окружности?
Да.
Но что скажет ваш алгоритм?
Мой алгоритм скажет "пересекаются". Специально для вас высылаю на мыло :)
Имеется ввиду пересечение контуров или наличие обших площадей?
Площадей.
← →
Думкин © (2005-05-21 04:35) [52]> Green_Templar © (20.05.05 18:49) [51]
Вчера видимо был майский перегрев. Осознал. Каюсь. Посыпаю голову пеплом. :)
В отпуск пора - народ вон в Потрепаться хвастает. А ждать июля. :)
← →
ferr © (2005-05-21 13:30) [53]
if sqrt(sqr(minx)+sqr(miny))<=r then intersectcandrect:=true else intersectcandrect:=false;
фтопку...Result:=sqr(minx)+sqr(miny)<=r*r;
Посчитайтей выйгрыш...
Страницы: 1 2 вся ветка
Текущий архив: 2005.06.06;
Скачать: CL | DM;
Память: 0.56 MB
Время: 0.026 c