Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

возведение в квадрат


Страницы:   1 2 3

Green_Templar ©   (2005-05-20 00:29:00) 

Как в делфи грамотно возводить в квадрат?
Что лучше?
if exp(2*ln(abs(predator.x-prey.x) shr 3))+exp(2*ln(abs(predator.y-prey.y) shr 3))<=predator.eye then cansee1:=true else cansee1:=false;
или
((predator.x-prey.x) shr 3)*((predator.x-prey.x) shr 3)+((predator.y-prey.y) shr 3)*((predator.y-prey.y) shr 3)<=predator.eye then cansee1:=true else cansee1:=false;

Подскажите пожалуйста способ самого оптимального определения пересекаются ли круг и прямоугольник.


ferr   (2005-05-21 13:30:00) [1]

if sqrt(sqr(minx)+sqr(miny))<=r then intersectcandrect:=true else intersectcandrect:=false;
фтопку...
 Result:=sqr(minx)+sqr(miny)<=r*r;
Посчитайтей выйгрыш...


Думкин   (2005-05-21 04:35:00) [2]

> Green_Templar ©   (20.05.05 18:49) [51]

Вчера видимо был майский перегрев. Осознал. Каюсь. Посыпаю голову пеплом. :)

В отпуск пора - народ вон в Потрепаться хвастает. А ждать июля. :)


Green_Templar   (2005-05-20 18:49:00) [3]

Расстояние от центра окружности?
Да.
Но что скажет ваш алгоритм?
Мой алгоритм скажет "пересекаются". Специально для вас высылаю на мыло :)
Имеется ввиду пересечение контуров или наличие обших площадей?
Площадей.


SergP.   (2005-05-20 17:00:00) [4]

Кстати хотелось бы уточнить:
Имеется ввиду пересечение контуров или наличие обших площадей?
Вобще-то по тому что в условии было сказано "круг" а не "окружность" я так понял что имеется ввиду все-таки наличие общих площадей.
Но кто его знает что хотел автор... Вдруг он неправильно выразился?


Думкин   (2005-05-20 15:36:00) [5]

> [47] Чапаев ©   (20.05.05 10:35)

Этого же эффекта можно достичь иным способом. Речь была все-таки видимо не о данном конкретном случае со сложным выражением. Во-всяком случае, в нашей с Defunct'ом дискуссии.

> Поправочка: прямоугольник паралелен сторонам экрана.
> Мой алгоритм самый крутой :)

Расстояние от центра окружности?
Рассмотрим случай, когда окружность опирается на угол и центр окружности, вершина соответствующая и центр квадрата - на одной прямой. Потом немного сдвинем окружность в сторону центра. Пересечение налицо. Но что скажет ваш алгоритм? А ведь истинное расстояние от вашего - отличается.


Green_Templar   (2005-05-20 12:58:00) [6]

Поправочка: прямоугольник паралелен сторонам экрана.
Мой алгоритм самый крутой :)
Ищем минимальное расстояние до прямоугольника, если оно меньше или равно радиусу, то пересекаются, иначе нет. Впрочем, лучше сами посмотрите :)

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 10:35:00) [7]

> Думкин
> Defunct
Sqr(x) лучше x*x в данном случае потому, что доступ к полям Predator & Prey осуществляется ОДИН раз...


Кщд   (2005-05-20 09:40:00) [8]

ещё вариант:
1. Проверка на вложенность друг в друга
2. 4 выражения на кратчайшее расстояние от прямой до точки
3. если минимум одно <= радиусу, то пересечение


Думкин   (2005-05-20 09:39:00) [9]

> [42] Кщд ©   (20.05.05 09:35)

Ну понятно. Бум считать что решили.
И он тоже - ММФ. Ты вроде там же? Я тебе в Асю стучусь.


Кщд   (2005-05-20 09:37:00) [10]

Думкин ©   (20.05.05 09:31) [40]
да, поторопился.
конечно же, там взаимная проверка.


Defunct   (2005-05-20 09:35:00) [11]

> Подскажите пожалуйста способ самого оптимального определения пересекаются ли круг и прямоугольник.

1. Сделать грубую проверку. Круг представить в виде квадрата. Алгоритм определения пересечений двух прямоугольников прост и быстр.

2. Если грубая проверка пройдена и прямоугольники пересекаются, тогда делать более тщательную.


Кщд   (2005-05-20 09:35:00) [12]

Думкин ©   (20.05.05 09:27) [37]
>И после нахождения пересечений надо проверить, что они принадлежат >не только прямым образующим квадрат, но и его стороне.

вот поэтому и неравенста

в общем, частный, элементарный случай геом. vs алг. подхода, имхо.
господин Думкин, матфак?


Думкин   (2005-05-20 09:34:00) [13]

> [36] SergP ©   (20.05.05 09:25)

А рисунок так делается:
1. Берем квадрат. Ставим его на сторону.
2. Сверху на угол - колесо, так чтобы его цент не лежал на продолжении диагонали.
3. Соединяем центры - пересечения с фигурами в соседях не лежат.
4. Немного увеличиваем радиус.


Думкин   (2005-05-20 09:31:00) [14]

>  [39] Кщд ©   (20.05.05 09:29)

Разве он это заметил? Не только. Квалрат может целиком лежать в круге и центр второго не лежать в квадрате.


Кщд   (2005-05-20 09:29:00) [15]

Кщд ©   (20.05.05 09:24) [35]
+ как верно заметил SergP, проверка на принадлежность центра круга - прямоугольнику. :)


Думкин   (2005-05-20 09:28:00) [16]

>  [36] SergP ©   (20.05.05 09:25)

Да я нарисовал уже. :) См.
> [32] Думкин ©   (20.05.05 09:18)


Думкин   (2005-05-20 09:27:00) [17]

> [35] Кщд ©   (20.05.05 09:24)

А... у тебя там про неравенства 4. Ясно.
Но если круг принадлежит квадрату или наоборот - то стороны не пересекуться, а пересечение есть.
И после нахождения пересечений надо проверить, что они принадлежат не только прямым образующим квадрат, но и его стороне.


SergP   (2005-05-20 09:25:00) [18]


>  [31] Думкин ©   (20.05.05 09:17)
> > [30] SergP ©   (20.05.05 09:16)
>
> ?
> Нарисуй если не трудно.


нарисовать проблематично... Выложить некуда..

Но описать - например такая ситуация:
Имеем квадрат и круг. Центр круга лежит на продолжении одной из сторон квадрата, причем расстояние от квадрата до центра круга только чуть (незначительно) меньше радиуса круга.
поллучится что квадрат и круг пересекаются, но толчка пересечения отрезка соединяющего центры с прямоугольником не будет принадлежать кругу


Кщд   (2005-05-20 09:24:00) [19]

Думкин ©   (20.05.05 09:04) [21]
возможно, я неточно выразился.
предлагал рещить четыре квадратных уравнения.
при наличии действительного корня(корней) у любого из них - пересечение имеет место.


Думкин   (2005-05-20 09:21:00) [20]

Тогда так.
01. Проверяем принадлежность центра квадрату
02. Одной из вершин кругу
Если ничего не вышло:
1. Ищем пересечения сторон квадрата с окружностью.

Вроде катит.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо