Форум: "Основная";
Текущий архив: 2004.12.05;
Скачать: [xml.tar.bz2];
ВнизКак определить включает ли один регион другой Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.047 c