Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.09.2009, 16:18   #1
Malkovich
Пользователь
 
Регистрация: 09.07.2009
Сообщений: 16
По умолчанию Вопрос по поводу регионов

Здрасте всем.

Задача: два шарика летают по экрану и ессно сталкиваются.
В GDI есть функция: BOOL RectInRegion(HRGN hrgn, const RECT* lprc)
С ее помощью я заставил летать и сталкиваться шарик и квадрат.

Вопрос такой: а есть ли функция что то типа
BOOL EllipsInRegion(HRGN hrgn_1, HRGN hrgn_2)

Или подскажите подходящее решение.
Всем спасибо за внимание.
Malkovich вне форума Ответить с цитированием
Старый 11.09.2009, 20:04   #2
0nni
Форумчанин
 
Аватар для 0nni
 
Регистрация: 24.07.2008
Сообщений: 279
По умолчанию

Вот так вроде правильно считает.
Код:
Function CheckRgn(rgn1, rgn2 : HRGN) : boolean;
var
  ResRgn : HRGN;
  res : Integer;
begin
  ResRgn := CreateRectRgn(0, 0, 0, 0);
    res := CombineRgn(ResRgn, rgn1, rgn2, RGN_AND);
    Result := res in [SIMPLEREGION, COMPLEXREGION];
  DeleteObject(ResRgn);
end;
А вообще, если у тебя круги, то проще найти расстояние между их центрами и сравнить и если оно меньше суммы их радиусов то шары сталкиваются.

Что то вроде этого.
Код:
Result := sqrt( sqr(x1- x2) + sqr(y1- y2) ) < r1 + r2
Сказал и загрустил от бесспорности своей правоты.
0nni вне форума Ответить с цитированием
Старый 11.09.2009, 20:04   #3
0nni
Форумчанин
 
Аватар для 0nni
 
Регистрация: 24.07.2008
Сообщений: 279
По умолчанию

Вот так вроде правильно считает.
Код:
Function CheckRgn(rgn1, rgn2 : HRGN) : boolean;
var
  ResRgn : HRGN;
  res : Integer;
begin
  ResRgn := CreateRectRgn(0, 0, 0, 0);
    res := CombineRgn(ResRgn, rgn1, rgn2, RGN_AND);
    Result := res in [SIMPLEREGION, COMPLEXREGION];
  DeleteObject(ResRgn);
end;
А вообще, если у тебя круги, то проще найти расстояние между их центрами и сравнить и если оно меньше суммы их радиусов то шары сталкиваются.

Что то вроде этого.
Код:
Result := sqrt( sqr(x1- x2) + sqr(y1- y2) ) < r1 + r2
Сказал и загрустил от бесспорности своей правоты.
0nni вне форума Ответить с цитированием
Старый 12.09.2009, 10:25   #4
Malkovich
Пользователь
 
Регистрация: 09.07.2009
Сообщений: 16
По умолчанию

Onni спасибо за ответ.
Malkovich вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по поводу Windows Vista ROD Безопасность, Шифрование 1 19.08.2009 18:16
Вопрос по поводу памяти! Slava12345 Компьютерное железо 13 04.07.2009 16:59
Вопрос по поводу сайтов. Saniller PHP 6 16.03.2008 12:51
Вопрос по поводу StringList(а) KAMENYKA Компоненты Delphi 4 07.12.2007 13:01
Вопрос по поводу типов werser Помощь студентам 4 23.06.2007 14:18