- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
if( (Input.GetMouseX() >= 545 && Input.GetMouseX() <= 567 && Input.GetMouseY() >= 165 && Input.GetMouseY() <= 197) || (Input.GetMouseX() >= 545 && Input.GetMouseX() <= 567 && Input.GetMouseY() >= 205 && Input.GetMouseY() <= 237) ||
(Input.GetMouseX() >= 545 && Input.GetMouseX() <= 567 && Input.GetMouseY() >= 85 && Input.GetMouseY() <= 117) || (Input.GetMouseX() >= 545 && Input.GetMouseX() <= 567 && Input.GetMouseY() >= 125 && Input.GetMouseY() <= 157) ||
(Input.GetMouseX() >= 675 && Input.GetMouseX() <= 707 && Input.GetMouseY() >= 85 && Input.GetMouseY() <= 117) || (Input.GetMouseX() >= 675 && Input.GetMouseX() <= 707 && Input.GetMouseY() >= 145 && Input.GetMouseY() <= 177) ||
(Input.GetMouseX() >= 675 && Input.GetMouseX() <= 707 && Input.GetMouseY() >= 205 && Input.GetMouseY() <= 237)||
(Input.GetMouseX() >= 780 && Input.GetMouseX() <= 807 && Input.GetMouseY() >= 85 && Input.GetMouseY() <= 117) || (Input.GetMouseX() >= 780 && Input.GetMouseX() <= 807 && Input.GetMouseY() >= 125 && Input.GetMouseY() <= 157) ||
(Input.GetMouseX() >= 780 && Input.GetMouseX() <= 807 && Input.GetMouseY() >= 165 && Input.GetMouseY() <= 197) || (Input.GetMouseX() >= 780 && Input.GetMouseX() <= 807 && Input.GetMouseY() >= 205 && Input.GetMouseY() <= 237) ||
...
{
int i; int e;
if(Input.GetMouseX() >= 55 && Input.GetMouseX() <= 87 && Input.GetMouseY() >= 210 && Input.GetMouseY() <= 242) i = 0;
if(Input.GetMouseX() >= 95 && Input.GetMouseX() <= 127 && Input.GetMouseY() >= 210 && Input.GetMouseY() <= 242) i = 1;
if(Input.GetMouseX() >= 135 && Input.GetMouseX() <= 167 && Input.GetMouseY() >= 210 && Input.GetMouseY() <= 242) i = 2;
if(Input.GetMouseX() >= 175 && Input.GetMouseX() <= 207 && Input.GetMouseY() >= 210 && Input.GetMouseY() <= 242) i = 3;
if(Input.GetMouseX() >= 215 && Input.GetMouseX() <= 247 && Input.GetMouseY() >= 210 && Input.GetMouseY() <= 242) i = 4;
if(Input.GetMouseX() >= 255 && Input.GetMouseX() <= 287 && Input.GetMouseY() >= 210 && Input.GetMouseY() <= 242) i = 5;
if(Input.GetMouseX() >= 295 && Input.GetMouseX() <= 327 && Input.GetMouseY() >= 210 && Input.GetMouseY() <= 242) i = 6;
if(Input.GetMouseX() >= 335 && Input.GetMouseX() <= 367 && Input.GetMouseY() >= 210 && Input.GetMouseY() <= 242) i = 7;
if(Input.GetMouseX() >= 55 && Input.GetMouseX() <= 87 && Input.GetMouseY() >= 250 && Input.GetMouseY() <= 282) i = 8;
if(Input.GetMouseX() >= 95 && Input.GetMouseX() <= 127 && Input.GetMouseY() >= 250 && Input.GetMouseY() <= 282) i = 9;
if(Input.GetMouseX() >= 135 && Input.GetMouseX() <= 167 && Input.GetMouseY() >= 250 && Input.GetMouseY() <= 282) i = 10;
if(Input.GetMouseX() >= 175 && Input.GetMouseX() <= 207 && Input.GetMouseY() >= 250 && Input.GetMouseY() <= 282) i = 11;
if(Input.GetMouseX() >= 215 && Input.GetMouseX() <= 247 && Input.GetMouseY() >= 250 && Input.GetMouseY() <= 282) i = 12;
if(Input.GetMouseX() >= 255 && Input.GetMouseX() <= 287 && Input.GetMouseY() >= 250 && Input.GetMouseY() <= 282) i = 13;
if(Input.GetMouseX() >= 295 && Input.GetMouseX() <= 327 && Input.GetMouseY() >= 250 && Input.GetMouseY() <= 282) i = 14;
if(Input.GetMouseX() >= 335 && Input.GetMouseX() <= 367 && Input.GetMouseY() >= 250 && Input.GetMouseY() <= 282) i = 15;
...
if(Input.GetMouseX() >= 55 && Input.GetMouseX() <= 87 && Input.GetMouseY() >= 410 && Input.GetMouseY() <= 442) i = 40;
if(Input.GetMouseX() >= 95 && Input.GetMouseX() <= 127 && Input.GetMouseY() >= 410 && Input.GetMouseY() <= 442) i = 41;
if(Input.GetMouseX() >= 135 && Input.GetMouseX() <= 167 && Input.GetMouseY() >= 410 && Input.GetMouseY() <= 442) i = 42;
if(Input.GetMouseX() >= 175 && Input.GetMouseX() <= 207 && Input.GetMouseY() >= 410 && Input.GetMouseY() <= 442) i = 43;
if(Input.GetMouseX() >= 215 && Input.GetMouseX() <= 247 && Input.GetMouseY() >= 410 && Input.GetMouseY() <= 442) i = 44;
if(Input.GetMouseX() >= 255 && Input.GetMouseX() <= 287 && Input.GetMouseY() >= 410 && Input.GetMouseY() <= 442) i = 45;
if(Input.GetMouseX() >= 295 && Input.GetMouseX() <= 327 && Input.GetMouseY() >= 410 && Input.GetMouseY() <= 442) i = 46;
if(Input.GetMouseX() >= 335 && Input.GetMouseX() <= 367 && Input.GetMouseY() >= 410 && Input.GetMouseY() <= 442) i = 47;
if(Input.GetMouseX() >= 545 && Input.GetMouseX() <= 567 && Input.GetMouseY() >= 85 && Input.GetMouseY() <= 117) e = 0; // Bracers
if(Input.GetMouseX() >= 545 && Input.GetMouseX() <= 567 && Input.GetMouseY() >= 125 && Input.GetMouseY() <= 157) e = 1; // Hands
if(Input.GetMouseX() >= 545 && Input.GetMouseX() <= 567 && Input.GetMouseY() >= 165 && Input.GetMouseY() <= 197) e = 2; // Sword
if(Input.GetMouseX() >= 545 && Input.GetMouseX() <= 567 && Input.GetMouseY() >= 205 && Input.GetMouseY() <= 237) e = 3; // Off hand
if(Input.GetMouseX() >= 675 && Input.GetMouseX() <= 707 && Input.GetMouseY() >= 85 && Input.GetMouseY() <= 117) e = 4; // Helmet
if(Input.GetMouseX() >= 675 && Input.GetMouseX() <= 707 && Input.GetMouseY() >= 145 && Input.GetMouseY() <= 177) e = 5; // Chest
if(Input.GetMouseX() >= 675 && Input.GetMouseX() <= 707 && Input.GetMouseY() >= 205 && Input.GetMouseY() <= 237) e = 6; // Legs
https://github.com/LaurentGomila/SFML/wiki/Tutorial%3A-Basic-Inventory-System
dwarf_with_beer 11.12.2013 08:19 # +2
LispGovno 11.12.2013 08:26 # +1
bormand 11.12.2013 08:30 # +4
Им очень прикольно будет менять размер иконок в инвентаре ;)
LispGovno 11.12.2013 09:06 # −1
Без буста бы записал массив соответствия интервала и значения, а по нему бы сформировал boost::unordered_multimap<позиция, значение>, но это не экономно для длинных интервалов. В общем не оптимальный частный случай. Явно должно быть что-то лучше.
А вот с не дескретными интервалами это вообще жопа.
roman-kashitsyn 11.12.2013 09:53 # +1
LispGovno 11.12.2013 10:21 # −1
roman-kashitsyn 11.12.2013 10:48 # +2
LispGovno 13.12.2013 18:04 # 0
TarasB 13.12.2013 18:07 # +3
И O(1) у него на самом деле - это О(длина ключа). Но это очевидно для любой структуры - теоретический минимум, ибо как можно что-то найти по ключу, не считав все биты ключа?
3.14159265 13.12.2013 18:17 # +3
>>>Это бы настолько прибавило производительности.
Из разряда AssParallel хацкил всё сам нам паралеллит и наступит всеобщее многоядерное щастье.
Или достаточно использовать вычисления на видеокарте как замену CPU, вот только программеры - ленивые мудаки и не могут этого осилить. Это ведь так просто!
LispGovno 13.12.2013 18:31 # +1
3.14159265 13.12.2013 19:05 # +4
Если все элементы строки совпали с элементами строки ключа, то строка за О(1) выставляет на шине свой адрес. И того за О(1) работает для одного совпавшего ключа или за О(n) для n совпавших ключей. Можно писать на верилоге...
Так же чтобы в девайсе могли не только O(1) но и разрешать коллизии и если будет коллизия то будет O(N), так же передать содержимое но процессор может не перебирать а выбрать первый. Кешировать можно...
P.S. Я джва года хочу такой девайс.хеш-мапа. только аппаратная...
bormand 13.12.2013 19:56 # +2
bormand 13.12.2013 20:54 # 0
http://en.wikipedia.org/wiki/Content-addressable_memory
guest 13.12.2013 19:53 # −4
anonimb84a2f6fd141 16.12.2013 09:18 # −3
bormand 13.12.2013 19:54 # +1
Емнип, царь утверждал как раз обратное: что любая задача упрется именно в скорость памяти. Поэтому он даже покупал хасвелл, в надежде на новый, более шустрый, контроллер памяти.
anonimb84a2f6fd141 16.12.2013 09:18 # −1
TarasB 16.12.2013 09:39 # 0
Вычисления на видеокарте? Да там даже ифа нормального нету!
anonimb84a2f6fd141 16.12.2013 12:30 # −3
LispGovno 11.12.2013 10:19 # −1
TarasB 11.12.2013 10:07 # 0
3Doomer 11.12.2013 11:30 # −1
Psionic 11.12.2013 11:55 # −1
krypt 11.12.2013 13:02 # −1
istem 11.12.2013 21:00 # +1
Crazy_penguin 11.12.2013 22:41 # −1
Lure Of Chaos 12.12.2013 01:55 # +6
istem 12.12.2013 22:52 # +2
bormand 12.12.2013 22:59 # +7
Stertor 12.12.2013 23:12 # −5
Lure Of Chaos 11.12.2013 22:32 # 0
впрочем, если у нас прямоугольник, разрезанный на прямоугольник (а-ля сетка) [что, вроде, вариант сабжа], то можно схалтурить и так избавиться от многих проверок. [по сабжу:] если это вообще квадраты, то вообще можно обойтись двумя формулами с целочисленным делением и остатком.
в браузерках вообще видел халтуру: набор радиокнопок, что сводит сложность к константе (О(1))
Dummy00001 12.12.2013 01:47 # 0
это если прямоугольники не отсортированы, что в реальной жизни случается редко.
в случае неперекрывающихся отсортированых прямоугольников, задача решается в (почти) логарифмовое время. (в случае пекрывающихся, надо будет еще по z-order-у извращатся.)
Dummy00001 12.12.2013 01:49 # +1
хехе. в браузере уже кто-то сделал алгоритм нахождения элемента по которому кликнули.
Lure Of Chaos 12.12.2013 01:56 # 0
Dummy00001 12.12.2013 02:32 # +1
anonimb84a2f6fd141 12.12.2013 20:44 # 0
kyzi007 12.12.2013 03:41 # 0
govnomonad 12.12.2013 05:59 # 0
3Doomer 12.12.2013 08:09 # 0
Dummy00001 12.12.2013 23:23 # 0
один раз нечто подобное писал - но не знал что уже есть готовые теории. спасибо.
а как оно будет выглядеть для перекрывающихся объектов?
3Doomer 13.12.2013 10:04 # 0
bormand 13.12.2013 10:39 # 0
TarasB 13.12.2013 14:21 # +1