Главная страница
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.062 c
14-1100504823
ИМХО
2004-11-15 10:47
2004.12.05
Россия - Эстония: ваш прогноз


1-1101282818
Yozch1
2004-11-24 10:53
2004.12.05
Глюки при отображении кнопок при XPmanifeste


3-1099983146
denis24
2004-11-09 09:52
2004.12.05
редактирование в гриде


1-1101111515
BaDeVlad
2004-11-22 11:18
2004.12.05
Непечатаемые символы в RichEdit


1-1100783805
opoloXAI
2004-11-18 16:16
2004.12.05
печать TStrings в TQuickRep.