Как да внедрим Area.contains(Area)?

Има 2 области (java.awt.geom.Area) област1 и област2. Трябва да проверя дали област2 е вътре в област1? (област1 съдържа област2).

Опитах:

areaDelta = (Area)area1.clone();
areaDelta.add(area2);
return areaDelta.equals(area1);

Но не винаги работи както трябва (Ако границите на area2 са в границите на area1, връща true, трябва да върне false).

Всъщност имам 2 полигона (java.awt.Polygon) и имам нужда от метода Polygon.contains(Polygon), може би това може да е по-лесно, отколкото за области.

Някакви идеи?

Многоъгълниците могат да бъдат изпъкнали и неизпъкнали.


person Cenius    schedule 18.01.2012    source източник
comment
Проверете за stackoverflow.com/questions /4833802/ и stackoverflow.com/questions /3017872/   -  person Napte    schedule 18.01.2012
comment
можеш ли да се измъкнеш с проверка на ограничаващ правоъгълник?   -  person Randy    schedule 18.01.2012
comment
Намерих го - как да го направя без никакви допълнителни библиотеки: направете проверка на пресичането на линии за всяка двойка линии на многоъгълник, не е трудно да се направи със стандартна библиотека на Java. Но това не е най-ефективното решение.   -  person Cenius    schedule 18.01.2012


Отговори (1)


Тъй като имате Polygon.contains(Point), можете да постигнете това, от което се нуждаете, като тествате дали всяка точка от вашия втори многоъгълник е вътре в първия многоъгълник (мечтая за версия на JDK, която би реализирала всяка основна нужда на програмист, като .NET ).

РЕДАКТИРАНЕ: За да работите с вдлъбнати многоъгълници, първо трябва да разделите многоъгълниците си на изпъкнали, след което ще можете правилно да използвате метода, споменат по-горе. Използвах два различни алгоритъма за разлагане на полигони в едно от моите приложения и бих ви препоръчал да погледнете техния код:

person Aurelien Ribon    schedule 18.01.2012
comment
Не става, защото многоъгълниците могат да бъдат както изпъкнали, така и неизпъкнали. Мислил съм за това. За една забележка - благодаря, но го знам, някой ми е редактирал поста... - person Cenius; 18.01.2012
comment
Работи, ако също проверите дали всеки връх на първия многоъгълник е извън втория многоъгълник. - person Joni; 18.01.2012
comment
Можете също така да конвертирате многоъгълниците си в изпъкнали, тогава тестът е тривиален. Вижте моето издание. - person Aurelien Ribon; 18.01.2012
comment
Благодаря ви, но това означава пълно пренаписване на стандартната библиотека (няма функция за разлагане) или използване на допълнителни библиотеки. Както и да е, работи, това, от което имах нужда. Ще се опитам да свържа това със стандартната версия на Java. - person Cenius; 19.01.2012