Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.05;
Скачать: CL | DM;

Вниз

Как определить включает ли один регион другой   Найти похожие ветки 

 
Frozzen   (2004-11-22 15:30) [0]

Здравствуйте
Встала новая задача:
Есть положим 2 масива точек, описывающих границы регионов, как определить включает ли один региоy другой. Регион,если лежит в другом, то полностью, без пересечений границ?


 
MBo ©   (2004-11-22 15:32) [1]

посмотреть на их пересечение и разность


 
TUser ©   (2004-11-22 15:35) [2]

регион А принадлежит региону Б := любая точка внутри региона А принадлежит региону Б

любая, т.е. в т.ч. и граничная.

Как проверить точку на принадлежность к региону - недавно тут обсуждалось. Проведи горизонтальную линию и посчитай ее пересечение с границей региона Б

Другой вариант решения, для выпуклых регионов - найти крайние верхнюю, нижнюю, правую и лувую точки региона А и Б. Еслит проекции А лежат внутри проекция Б, то из того, что границы не пересекаются бедет следовать, что А прин. Б.


 
Frozzen   (2004-11-22 15:57) [3]

Поискал по слову регион ничего не нашел


 
MBo ©   (2004-11-22 16:11) [4]

region functions в хелпе WinSDK


 
TUser ©   (2004-11-22 16:13) [5]


> MBo ©   (22.11.04 16:11) [4]

Не уверен, что "регионы" есть регионы в понимании АПИ


 
MBo ©   (2004-11-22 16:22) [6]

>TUser ©   (22.11.04 16:13) [5]
Если есть вершины - можно построить регионы.

Иначе придется с нетривиальной вычислительной геометрией работать.


 
Frozzen   (2004-11-22 17:03) [7]

if ( CombineRgn(hrgnDest, hrgnSrc1, hrgnSrc2, RGN_DIFF) = NULLREGION )

Как я понимаю нужно создать регионы,

HRGN CreatePolygonRgn(

CONST POINT *lppt, // pointer to array of points
int cPoints, // number of points in array
int f

у меня массив точек типа

TCoordPoint = class(TObject)
lat, long :real;
x, y :integer;
r :real;
можно его пользовать, или нужно к Point переходить


 
Frozzen   (2004-11-22 18:22) [8]

Ничего не выходит, я пишу

POINT = record
x : Word;
y : Word;
end;

arp = array of POINT;
type parp = ^arp;

var
pol1p, pol2p : arp;
p1, p2 : pArp;

SetLength(pol1p, 10);
SetLength(pol2p, 20);
p1 := @pol1p;
p2 := @pol2p;

Заполняю массивы

hrg1 := CreatePolygonRgn(p1, 10, WINDING);
if hrg1 = 0 then ShowMessage("2");

hrg2 := CreatePolygonRgn(p2, 20, WINDING);

if (CombineRgn(hrgD, hrg1, hrg2, RGN_DIFF) = NULLREGION ) then
ShowMessage("1");
Дак CreatePolygonRgn возвращает 0


 
MBo ©   (2004-11-23 07:22) [9]

А с чего ты решил, что CreatePolygonRgn будет работать с определенным тобой нестандартным типом?
Да и с указателями ты заморочился.


 
MBo ©   (2004-11-23 07:37) [10]

P.S. И третье: регион-приемник для CombineRgn должен уже быть создан


 
Frozzen   (2004-11-23 08:18) [11]

Спасибо все сделал



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

Текущий архив: 2004.12.05;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.023 c
1-1100868269
yura2
2004-11-19 15:44
2004.12.05
Как показать документ Word в окне своей программы?


4-1098203270
Grundic
2004-10-19 20:27
2004.12.05
!ПОЛНЫЙ! путь к .EXE через PID или его HANDLE - как?


4-1098606535
Ashle
2004-10-24 12:28
2004.12.05
Как перезапустить сессию Application ? сэмулировать перезапуск


4-1096658084
Ермак
2004-10-01 23:14
2004.12.05
Кассовый аппарат и сканер - ???


8-1094119325
Hman
2004-09-02 14:02
2004.12.05
Громкость в WinAmp е