[Complex Conditional Statements] - Задача 12* - Универсално решение
Колеги,ето моето решение накратко - създавам си масив, който съдържа (x1,y1,x2,y2) координати за всеки един правоъгълник, който изгражда фигурата (може да се направят най-различни фигури, просто трябва да се въведат блокчетата в масива). След, което ползвам един forloop за да итерирам всяко блокче и да проверя, къде се намира точката спрямо него, позовавайки се на изброените възможни сценарий:
- ако точка е намерена INSIDE (1), няма нужда от понататъшно търсене -> излизане от forloop-а -> return INSIDE
- ако точка е намерена OUTSIDE (2), проверка дали преди не е била BORDER (3) за някой от другите блокчета (за да не презапишем BORDER стойност, т.е. ако за някое от блокчетата станем BORDER, резултатът няма как да бъде OUTSIDE)
- ако точката не е нито INSIDE, нито OUTSIDE, то тя остава да е BORDER (4). Тук има един тънък момент - ако точката преди е била BORDER за някой/и от блокчетата -> сме открили, че тя лежи на общ ръб, т.е. има два равиянта да е върху крайщата на ръба (VERT) или по самата му дължина (EDGE). Ако е първият случай - return BORDER (5), ako e вторият - return INSIDE (6)
Source code: http://pastebin.com/xXiCXugy
Надявам се да съм помогнал и да ви е интересно. Би трябвало да работи със каквато и фигура да се построй от правоъгълници в равнината, но не съм го тествал. Ако някой намери начин да се намали още решението да споделя. :)
не съм се изразил правилно явно, аз не проверявам всяко кубче, а всеки правоъгълник, дефиниран от неговия долен ляв и горен десен ъгъл - тоест, провервам точно синия и зеления, като съм си оставил вратичка да си добавям и други ако искам. Идеята с forloop-а, е че мога да оптимизирам if проверките
edit: :D сега видях глупостта, която съм написал с КУБ - така е като не излизам от Unity
И аз имах подобна идея, но ме мързеше да пиша цялостен код и се изхитрих да си полззвам кода от предишните задачи.
http://pastebin.com/buphGpHn