| Вопросы товарища Likantrop'а |
|
WertyXBOCT
| Дата: Понедельник, 24.08.2009, 15:11 | Сообщение # 41 |
Каждый 5й пост мой
Группа: Страж
Сообщений: 2467
Статус: Offline
|
Likantrop, верхний икс и игрек всегда меньше нижних. X1 = min(x0,x1); Y1 = min(y0,y1); X2 = max(x0,x1); Y2 = max(y0,y1);
Blog:www.WeslomPo.ru mailto: i@weslompo.ru
|
| |
| | |
|
Likantrop
| Дата: Понедельник, 24.08.2009, 15:40 | Сообщение # 42 |
Хрен заткнешь
Группа: Проверенные
Сообщений: 260
Статус: Offline
|
Quote (WertyXBOCT) Likantrop, верхний икс и игрек всегда меньше нижних. X1 = min(x0,x1); Y1 = min(y0,y1); X2 = max(x0,x1); Y2 = max(y0,y1); извини, не совсем понял тебя. сейчас поясню что нужно... вот нашел я два нужных игрека... но я не знаю, какой икс соответсвует игреку... Поэтому глюки вылазят...Я на нужных координатах отрисовывают примитив... Хм...Может попробовать использовать сетку?
|
| |
| | |
|
Ninja
| Дата: Понедельник, 24.08.2009, 15:43 | Сообщение # 43 |
Хоть палкой гони
Группа: Проверенные
Сообщений: 683
Статус: Offline
|
забей x и y всех точек в двумерный массив т.е. к примеру a[0,0]=x1;a[0,1]=y1 и т.д. потом вместе с максимумами храни индекс в массиве.
Oh, my God! You kill Kenny! You bastard!
|
| |
| | |
|
WertyXBOCT
| Дата: Понедельник, 24.08.2009, 15:58 | Сообщение # 44 |
Каждый 5й пост мой
Группа: Страж
Сообщений: 2467
Статус: Offline
|
Даже проще. Создай мап. map_x = ds_map_create(); внеси в мап значения, где в качестве ключа используй значение элемента по которому собираешься сортировать(например по Y), под значением храни X. Затем возьми первые два ключа в мапе, это будут самые большие(или меньшие, если меньшие бери самые последние) значения, ключ узнать можно, можно узнать и значения. Ч.Т.Н.айти
Blog:www.WeslomPo.ru mailto: i@weslompo.ru
|
| |
| | |
|
Likantrop
| Дата: Понедельник, 24.08.2009, 16:17 | Сообщение # 45 |
Хрен заткнешь
Группа: Проверенные
Сообщений: 260
Статус: Offline
|
Эм...В справке так таинственно написано... Карты можно по убыванию/возрастанию распологать или Quote (WertyXBOCT) Затем возьми первые два ключа в мапе, это будут самые большие(или меньшие, если меньшие бери самые последние) значения они сами располагаются как нужно? о_О
|
| |
| | |
|
WertyXBOCT
| Дата: Понедельник, 24.08.2009, 16:19 | Сообщение # 46 |
Каждый 5й пост мой
Группа: Страж
Сообщений: 2467
Статус: Offline
|
Они автоматически сортируются. Maps maintain such pairs, sorted by key
Blog:www.WeslomPo.ru mailto: i@weslompo.ru
|
| |
| | |
|
Likantrop
| Дата: Понедельник, 24.08.2009, 16:33 | Сообщение # 47 |
Хрен заткнешь
Группа: Проверенные
Сообщений: 260
Статус: Offline
|
Блин, что-то никак не пойму принцип их работы... Code map_x = ds_map_create(); ds_map_add(map_x,y1-yi,x1-xi); ds_map_add(map_x,y2-yi,x2-xi); ds_map_add(map_x,y1+yi,x1+xi); ds_map_add(map_x,y2+yi,x2+xi); val0=ds_map_find_value(map_x,0); val1=ds_map_find_value(map_x,1); ds_map_destroy(map_x); ds_map_find_value - тут под параметром key что указывать? Номер, как сейчас?
|
| |
| | |
|
WertyXBOCT
| Дата: Понедельник, 24.08.2009, 17:00 | Сообщение # 48 |
Каждый 5й пост мой
Группа: Страж
Сообщений: 2467
Статус: Offline
|
ds_map_find_value(mapname,KEY); Ты ключ должен указать. Функция не та которую я рекомендовал тебе использовать. С помощью этой фукции ты узнаешь значение хранящееся под ключом. Верная функция будет: ds_map_find_first(id); Где id это map_x; Теперь смотри как должно быть: val0=ds_map_find_value(map_x,ds_map_find_first(map_x)); val1=ds_map_find_value(map_x,ds_map_find_next(map_x,ds_map_find_first(map_x)));
Blog:www.WeslomPo.ru mailto: i@weslompo.ru
|
| |
| | |
|
Likantrop
| Дата: Понедельник, 24.08.2009, 17:07 | Сообщение # 49 |
Хрен заткнешь
Группа: Проверенные
Сообщений: 260
Статус: Offline
|
Quote (WertyXBOCT) val0=ds_map_find_value(map_x,ds_map_find_first(map_x)); val1=ds_map_find_value(map_x,ds_map_find_next(map_x,ds_map_find_first(map_x))); val0 и val1 - это мы получаем значения х при наибольших у? а как получить значение ключа? то есть у, который будет нашим иксам соответствовать?
|
| |
| | |
|
WertyXBOCT
| Дата: Понедельник, 24.08.2009, 17:28 | Сообщение # 50 |
Каждый 5й пост мой
Группа: Страж
Сообщений: 2467
Статус: Offline
|
Прикинь, попутал с ds_queue_priority. Меня как раз в мапах и бесит что ключ узнать нельзя. Используй их. Добавлено (24.08.2009, 17:28) ---------------------------------------------
Code map_x = ds_priority_create(); ds_priority_add(map_x,x1-xi,y1-yi); ds_priority_add(map_x,x2-xi,y2-yi); ds_priority_add(map_x,x1+xi,y1+yi); ds_priority_add(map_x,x2+xi,y2+yi); X0=ds_priority_find_max(map_x); Y0=ds_priority_find_priority(ds_priority_delete_max(map_x)); X1=ds_priority_find_max(map_x); Y1=ds_priority_find_priority(ds_priority_delete_max(map_x)); ds_priority_destroy(map_x);
Blog:www.WeslomPo.ru mailto: i@weslompo.ru
|
| |
| | |
|
Likantrop
| Дата: Понедельник, 24.08.2009, 20:59 | Сообщение # 51 |
Хрен заткнешь
Группа: Проверенные
Сообщений: 260
Статус: Offline
|
Мм, немного надо код изменить, чтоб работал: Code map_x = ds_priority_create(); ds_priority_add(map_x,x1-xi,y1-yi); ds_priority_add(map_x,x2-xi,y2-yi); ds_priority_add(map_x,x1+xi,y1+yi); ds_priority_add(map_x,x2+xi,y2+yi); X0=ds_priority_find_max(map_x); Y0=ds_priority_find_priority(map_x,X0); ds_priority_delete_value(map_x,X0) X1=ds_priority_find_max(map_x); Y1=ds_priority_find_priority(map_x,X1); ds_priority_destroy(map_x); Но теперь появляется баг, если есть два значения с одним приоритетом, одно почему-то не учитывается(удаляется?)..
|
| |
| | |
|
WertyXBOCT
| Дата: Понедельник, 24.08.2009, 22:00 | Сообщение # 52 |
Каждый 5й пост мой
Группа: Страж
Сообщений: 2467
Статус: Offline
|
Likantrop, скорее всего перезаписывается. Хотя вроде такого не может быть. Значит нужно другой напряжный метод искать...
Blog:www.WeslomPo.ru mailto: i@weslompo.ru
|
| |
| | |
|
Ninja
| Дата: Понедельник, 24.08.2009, 22:11 | Сообщение # 53 |
Хоть палкой гони
Группа: Проверенные
Сообщений: 683
Статус: Offline
|
а зачем вообще кучу юзать для 4-х элементов, помоему проще сделать обычными массивами, так например Code a[0,0]:=x1; a[0,1]:=y1; a[1,0]:=x2; a[1,1]:=y2; a[2,0]:=x3; a[2,1]:=y3; a[3,0]:=x4; a[3,1]:=y4; mx:=0; for(i:=0;i<=4;i+=1) { if (a[i,1]>mx) then { mx:=a[i,1]; mxind:=i; } } my1:=mx; mx1:=a[mxind,0]; for(i:=0;i<=4;i+=1) { if (a[i,1]>mx)and(i<>mxind) then { mx:=a[i,1]; mxind2:=i; } } my2:=mx; mx2:=a[mxind2,0]; mx1,my1 - пара с макс y mx2,my2 - пара с вторым макс y т.е. сначала ищется макс элемент и запоминается его индекс, а потом опять ищем максимум, не учитывая первый максимум
Oh, my God! You kill Kenny! You bastard!
|
| |
| | |
|
WertyXBOCT
| Дата: Понедельник, 24.08.2009, 22:19 | Сообщение # 54 |
Каждый 5й пост мой
Группа: Страж
Сообщений: 2467
Статус: Offline
|
Ninja, А зачем юзать статическую память для двух массивов, которые врядли используются каждый шаг?..
Blog:www.WeslomPo.ru mailto: i@weslompo.ru
|
| |
| | |
|
Ninja
| Дата: Понедельник, 24.08.2009, 22:46 | Сообщение # 55 |
Хоть палкой гони
Группа: Проверенные
Сообщений: 683
Статус: Offline
|
WertyXBOCT, можно через var объявить массив, если настолько память важна. куча делает много того, что в данной ситуации не нужно. для 4 элементов скорость не так важна, но если их будет хотябы 70, куча произведет n*log n =420 сравнений, а 2 пробега по массиву 2*n=140, т.е. в 3 раза меньше
Oh, my God! You kill Kenny! You bastard!
|
| |
| | |
|
WertyXBOCT
| Дата: Понедельник, 24.08.2009, 23:07 | Сообщение # 56 |
Каждый 5й пост мой
Группа: Страж
Сообщений: 2467
Статус: Offline
|
Ninja, я кароче обиделся. Пойду во флешь. Меня или не слушают, или я слишком туп.
Blog:www.WeslomPo.ru mailto: i@weslompo.ru
|
| |
| | |
|
Likantrop
| Дата: Вторник, 25.08.2009, 10:11 | Сообщение # 57 |
Хрен заткнешь
Группа: Проверенные
Сообщений: 260
Статус: Offline
|
Ну значит мне остаются либо сетки(остальные дата структуры не катят), либо двухмерные массивы... И то и другое пугает...о_О ща будем смотреть... Добавлено (25.08.2009, 10:11) --------------------------------------------- WertyXBOCT, Ninja, большое спасибо... при помощи массивов вроде бы получилось... как объявить массив через var?
|
| |
| | |
|
WertyXBOCT
| Дата: Вторник, 25.08.2009, 10:31 | Сообщение # 58 |
Каждый 5й пост мой
Группа: Страж
Сообщений: 2467
Статус: Offline
|
объяви переменную. А потом сделай из нее массив. после действия скрипта переменная(а значит и массив) уничтожится. var XX; XX[0]=0; XX[1]=1;
Blog:www.WeslomPo.ru mailto: i@weslompo.ru
|
| |
| | |
|
Likantrop
| Дата: Вторник, 25.08.2009, 17:54 | Сообщение # 59 |
Хрен заткнешь
Группа: Проверенные
Сообщений: 260
Статус: Offline
|
WertyXBOCT, благодарствую Еще проблемка: из animeditor'а взял кусочек кода для сохрания и загрузки...У меня кривовато было... Почему в вылезающем диалоге виндоуса видно все файлы, а не отфильтрованные по маске? код загрузки: Code global.name= get_open_filename('*.anlvl','test_lvl.anlvl'); if global.name = '' return -1; и так далее
|
| |
| | |
|
Ninja
| Дата: Вторник, 25.08.2009, 18:21 | Сообщение # 60 |
Хоть палкой гони
Группа: Проверенные
Сообщений: 683
Статус: Offline
|
get_open_filename('anlvl|*.anlvl','test_lvl.anlvl');
Oh, my God! You kill Kenny! You bastard!
|
| |
| |
|
|