Среда, 13 Ноября 2024, 13:22

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Поиск средней точки
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 , то он не учитывался бы как минимум? wacko

Добавлено (10.08.2013, 02:53)
---------------------------------------------
Я опять сам догадался wacko bag

Код
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, surprised
Спасибо.=)
Правда , я сам листы не использую , но понимаю их.
Мне больше нравятся очереди.





Мой проект


Сообщение отредактировал Krosos - Суббота, 10 Августа 2013, 08:34
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг