Поиск средней точки
| |
Krosos | Дата: Суббота, 10 Августа 2013, 02:53 | Сообщение # 1 |
постоянный участник
Сейчас нет на сайте
| В общем вот формула: maxX=max(global.UNI[1].x ,global.UNI[2].x,global.UNI[3].x,global.UNI[4].x,global.UNI[5].x,global.UNI[6].x,global.UNI[7].x,global.UNI[8].x,global.UNI[9].x,global.UNI[10].x) minX=min(global.UNI[1].x ,global.UNI[2].x,global.UNI[3].x,global.UNI[4].x,global.UNI[5].x,global.UNI[6].x,global.UNI[7].x,global.UNI[8].x,global.UNI[9].x,global.UNI[10].x) maxY=max(global.UNI[1].y ,global.UNI[2].y,global.UNI[3].y,global.UNI[4].y,global.UNI[5].y,global.UNI[6].y,global.UNI[7].y,global.UNI[8].y,global.UNI[9].y,global.UNI[10].y) minY=min(global.UNI[1].y ,global.UNI[2].y,global.UNI[3].y,global.UNI[4].y,global.UNI[5].y,global.UNI[6].y,global.UNI[7].y,global.UNI[8].y,global.UNI[9].y,global.UNI[10].y) tita.x=(mimX+maxX)/2 tita.y=(mimY+maxY)/2
Проблема заключается в том , что если один из ,global.UNI[O]=0 , то код считает это за минимум=( Как сделать так , чтобы если ,global.UNI[O]=0 , то он не учитывался бы как минимум?
Добавлено (10.08.2013, 02:53) --------------------------------------------- Я опять сам догадался
Код mxx=0 mxy=0 for (T=1 ;T<10 ; T+=1){ if global.UNI[T].x>=mxx and global.UNI[T].x>0 {mxx=global.UNI[T].x} } for (T=1 ;T<10 ; T+=1){ if global.UNI[T].x<mxx and global.UNI[T].x>0 {mnx=global.UNI[T].x} } for (T=1 ;T<10 ; T+=1){ if global.UNI[T].y>=mxy and global.UNI[T].y>0 {mxy=global.UNI[T].y} } for (T=1 ;T<10 ; T+=1){ if global.UNI[T].y<mxy and global.UNI[T].y>0 {mny=global.UNI[T].y} }
xxx=(mxx+mnx)/2 yyy=(mxy+mny)/2 tita.x=xxx tita.y=yyy
Мой проект
Сообщение отредактировал Krosos - Суббота, 10 Августа 2013, 03:11 |
|
| |
Kazerex | Дата: Суббота, 10 Августа 2013, 04:54 | Сообщение # 2 |
был не раз
Сейчас нет на сайте
| А не пойму) Что должен делать этот скрипт?)
Сообщение отредактировал Kazerex - Суббота, 10 Августа 2013, 04:57 |
|
| |
Krosos | Дата: Суббота, 10 Августа 2013, 05:22 | Сообщение # 3 |
постоянный участник
Сейчас нет на сайте
| Kazerex, напрмер ,global.UNI[1]=id И у нас тут 9 объектов и нужно найти среднюю точку между ними всеми , с учетом того , что некоторые объекты могут и не существовать.
Мой проект
|
|
| |
Kazerex | Дата: Суббота, 10 Августа 2013, 07:00 | Сообщение # 4 |
был не раз
Сейчас нет на сайте
| Небольшое замечание) В Вашем коде можно всё записать в один for, а ещё, данный механизм в игре я бы реализовал при помощи листов.
Код if ds_list_size(UNI)>0 { minx=ds_list_find_value(UNI,0).x maxx=ds_list_find_value(UNI,0).x miny=ds_list_find_value(UNI,0).y maxy=ds_list_find_value(UNI,0).y for(i=1 i<ds_list_size(UNI) i+=1) { minx=min(minx,ds_list_find_value(UNI,i).x) maxx=max(maxx,ds_list_find_value(UNI,i).x) miny=min(miny,ds_list_find_value(UNI,i).y) maxy=max(maxy,ds_list_find_value(UNI,i).y) } tita.x=(minx+maxx)/2 tita.y=(miny+maxy)/2 } Скачать пример.
Краткая инструкция по примеру: Правая кнопка мыши создаёт объект. Левая кнопка мыши может двигать созданные объекты. Средняя кнопка мыши удаляет объект.
Если листы не известны, то стоит почитать про них в справке, или если, что могу объяснить сам.
Сообщение отредактировал Kazerex - Суббота, 10 Августа 2013, 07:22 |
|
| |
Krosos | Дата: Суббота, 10 Августа 2013, 08:25 | Сообщение # 5 |
постоянный участник
Сейчас нет на сайте
| Kazerex, Спасибо.=) Правда , я сам листы не использую , но понимаю их. Мне больше нравятся очереди.
Мой проект
Сообщение отредактировал Krosos - Суббота, 10 Августа 2013, 08:34 |
|
| |
|