Главная страница
    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.47 MB
Время: 0.039 c
1-1101297047
Nox
2004-11-24 14:50
2004.12.05
Тип переменной вмещающей число с 30 нулями


14-1100595933
Igorek
2004-11-16 12:05
2004.12.05
БД - редактирование записи как в Object Inspectore


1-1100702931
Анатолий
2004-11-17 17:48
2004.12.05
Ресурсы в больших проектах.


1-1101054614
Bobby Digital
2004-11-21 19:30
2004.12.05
Формы и ф-ции


3-1099569880
Term
2004-11-04 15:04
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский