Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.038 c
6-1095988913
xoms
2004-09-24 05:21
2004.12.05
Winsock


1-1100675286
Jay
2004-11-17 10:08
2004.12.05
Help Button


1-1100944536
Makc
2004-11-20 12:55
2004.12.05
матрица


1-1100579553
ККВ
2004-11-16 07:32
2004.12.05
Количество фом проекта


1-1100784321
Alex1
2004-11-18 16:25
2004.12.05
Контекстное меню





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский