Софтуерно Инженерство
Loading...
+ Нов въпрос
gvanastasov avatar gvanastasov 52 Точки

[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

Надявам се да съм помогнал и да ви е интересно. Би трябвало да работи със каквато и фигура да се построй от правоъгълници в равнината, но не съм го тествал. Ако някой намери начин да се намали още решението да споделя. :)

Тагове:
-1
Основи на програмирането 10/02/2016 15:51:31
yasen6275 avatar yasen6275 18 Точки

Защо трябва да проверяваш всяко "кубче в равнината" по отделно, а не на право синия и зеления правоъгълник?

-1
10/02/2016 15:41:18
gvanastasov avatar gvanastasov 52 Точки

не съм се изразил правилно явно, аз не проверявам всяко кубче, а всеки правоъгълник, дефиниран от неговия долен ляв и горен десен ъгъл - тоест, провервам точно синия и зеления, като съм си оставил вратичка да си добавям и други ако искам. Идеята с forloop-а, е че мога да оптимизирам if проверките

edit: :D сега видях глупостта, която съм написал с КУБ - така е като не излизам от Unity

-1
10/02/2016 15:52:16
yasen6275 avatar yasen6275 18 Точки

И аз имах подобна идея, но ме мързеше да пиша цялостен код и се изхитрих да си полззвам кода от предишните задачи.

http://pastebin.com/buphGpHn

-1
10/02/2016 16:03:41
KaloyanGanchev avatar KaloyanGanchev 12 Точки

Евала за решението - оригинално и работещо.

А аз написах толкова много логически съюзи... Браво!

1