Среда, 24.04.2024, 16:26
Качественные скрипты, моды и дополнения для GTA без регистрации
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 10
  • 1
  • 2
  • 3
  • 9
  • 10
  • »
Форум » Игры серии ГТА » Скриптинг » Математические и механические задачи в GTA (Применение знаний математики и механики в моддинге)
Математические и механические задачи в GTA
Den_spbДата: Понедельник, 28.03.2011, 04:25 | Сообщение # 1
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Сообщения перенесены в отдельную тему
 
DK22PacДата: Понедельник, 28.03.2011, 04:25 | Сообщение # 2
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Денис, у тебя есть каие-то идеи по поводу того, как определить угол поверхности? Речь будет идти о наложении обьекта(плоскости) небольших размеров на динамический либо статистический обьект. Предполагается, что точка их соприкосновения уже найдена, и центр налаживаемой плоскости - эта точка. Остаётся толкьо развернуть эту плоскость относительно обьекта.
У меня есть идея, но немного бредовая smile


Сообщение отредактировал DK22Pac - Понедельник, 28.03.2011, 03:25
 
Den_spbДата: Понедельник, 28.03.2011, 04:25 | Сообщение # 3
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Чтобы построить касательную плоскость (я так понимаю, тебе нужно это), помимо точки касания надо знать направление нормали (прямая, которая будет перпендикулярна данной плоскости). Для объекта произвольной формы у меня есть только одна идея: 1.Прикрепить плоскость к объекту с произвольными углами 2. взять на плоскости несколько симметрично расположенных относительно центра касания точек (4 точки, расположенных по углам квадрата, центр которого - точка касания) 3. в цикле с помощью проверок no_obstacles вычислить расстояния от каждой из этих точек до объекта. 4. Если расстояние от одной из точек плоскости до объекта больше, чем от диаметрально противоположной (относительно точки касания) точки плоскости до объекта, то "доворачиеваем" плоскость в соответствующую сторону.
 
DK22PacДата: Суббота, 02.04.2011, 01:26 | Сообщение # 4
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Спасибо. У меня была идейка очень схожая. smile
Вопрос: правилен ли такой способ вычесления рандомной точки в опр. радиусе?
Code
0209: 3@ = random_int_in_ranges 15 40
for 4@ = 0 to 3@
      car.StorePos(0@, 6@, 7@, 8@)
      0209: 9@ = random_int_in_ranges 100 1000
      0208: 13@ = random_float_in_ranges .0 360.0
      0208: 16@ = random_float_in_ranges .0 4.0
      02F6: 14@ = sine 13@
      02F7: 15@ = cosine 13@
      mul(14@, 16@)
      mul(15@, 16@)
      inc(6@, 15@)
      inc(7@, 14@)
      inc(8@, 4.0)
      02CE: 10@ = ground_z_at 6@ 7@ 8@
      inc(10@, 0.5)
      02E1: 5@ = create_cash_pickup 9@ at 6@ 7@ 10@ permanence_flag true
end


Сообщение отредактировал DK22Pac - Суббота, 02.04.2011, 01:35
 
Den_spbДата: Суббота, 02.04.2011, 03:53 | Сообщение # 5
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Quote (DK22Pac)
Вопрос: правилен ли такой способ вычесления рандомной точки в опр. радиусе?
Да, способ правильный и самый быстрый. С теоремой Пифагора операций требуется больше:
Code
0209: 3@ = random_int_in_ranges 15 40  
for 4@ = 0 to 3@  
       car.StorePos(0@, 6@, 7@, 8@)  
       0209: 9@ = random_int_in_ranges 100 1000  
       0208: 13@ = random_float_in_ranges -4.0 4.0
       0AEE: 14@ = 13@ exp 2.0 //all floats
       14@ *= -1.0
       14@ += 16.0
       0AEE: 14@ = 14@ exp 0.5 //all floats
       0087: 15@ = 14@ // (float)  
       15@ *= -1.0
       0208: 15@ = random_float_in_ranges 15@ 14@  
       inc(6@, 15@)  
       inc(7@, 13@)  
       inc(8@, 4.0)  
       02CE: 10@ = ground_z_at 6@ 7@ 8@  
       inc(10@, 0.5)  
       02E1: 5@ = create_cash_pickup 9@ at 6@ 7@ 10@ permanence_flag true  
end
 
DK22PacДата: Суббота, 09.04.2011, 23:13 | Сообщение # 6
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Den_spb, вот такой простенький код для вычисления "координат пули"
http://pastebin.com/wMQHUBiM
Игра немного притормаживает. Хотелось бы это организовать так:
У нас есть начальная точка и конечная. Находим между ними середину. Проверяем - есть ли преграды в первом отрезке. Если есть - делим уже этот отрезок на 2... И т.д. ... А если нет - то делим второй отрезок... Думаю, это намного сократит кол-во операций для более точного вычисления нужных координат. Вот только не могу придумать, как это всё записать.


Сообщение отредактировал DK22Pac - Суббота, 09.04.2011, 23:28
 
Den_spbДата: Воскресенье, 10.04.2011, 01:10 | Сообщение # 7
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Quote (DK22Pac)
Думаю, это намного сократит кол-во операций для более точного вычисления нужных координат. Вот только не могу придумать, как это всё записать.

Да, пожалуй, такой способ - самый оптимальный. Он уже рассматривался здесь: http://sannybuilder.com/forums/viewtopic.php?id=629
 
DK22PacДата: Воскресенье, 10.04.2011, 01:28 | Сообщение # 8
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Спасибо огромное! Я кстати тоже недавно смотрел этот скрипт, accessory.cs, там это реализовано приблизительно так:
http://pastebin.com/9UvYa10b
Жаль только, что формы автомобиля немного неправильными получаются (обьект создаётся в воздухе около автомобиля)
Завтра попробую написать код для определения угла поверхности.


Сообщение отредактировал DK22Pac - Воскресенье, 10.04.2011, 01:28
 
Den_spbДата: Воскресенье, 10.04.2011, 02:35 | Сообщение # 9
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Quote (DK22Pac)
Жаль только, что формы автомобиля немного неправильными получаются (обьект создаётся в воздухе около автомобиля)

Наверно проверка no_obstacles работает с моделями коллизии.
 
DK22PacДата: Воскресенье, 10.04.2011, 17:00 | Сообщение # 10
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Quote (Den_spb)
Наверно проверка no_obstacles работает с моделями коллизии.

Да... Но ведь капли дождя, вроде бы, правильно "приземляются" на автомобиль...
Ещё раз спасибо)
Quote
 
Den_spbДата: Воскресенье, 10.04.2011, 17:08 | Сообщение # 11
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Quote (DK22Pac)
Но ведь капли дождя, вроде бы, правильно "приземляются" на автомобиль...
Возможно. Я подробно данные вопросы не изучал.

Quote (DK22Pac)
Ещё раз спасибо)
Незачто.
Следы от пуль хорошо получились up
 
DK22PacДата: Воскресенье, 10.04.2011, 23:47 | Сообщение # 12
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Попробовал такой код для вычисления угла поверхности. Суть такова - в цикле "рисуем" полукруг вокруг обьекта (обьект - квадрат, со стороной 0.06), всего должно быть 180 точек, проверяем, есть ли преграды между "поточной" и следующей" точкой. Почему-то не работает (угол каким был, таким и остался - вероятно, проверка сразу же срабатывает (пробовал начинать с 10 (for 0@ = 10 to 180), но не помогло).
Code
for 0@ = 0 to 180
     0A8E: 16@ = 0@ + 1 // int
     0093: 15@ = integer 0@ to_float
     0093: 17@ = integer 16@ to_float
     02F7: 13@ = cosine 15@ // (float)
     02F6: 14@ = sine 15@ // (float)
     02F7: 18@ = cosine 17@ // (float)
     02F6: 19@ = sine 17@ // (float)
     mul(13@, 0.03)
     mul(14@, 0.03)
     mul(18@, 0.03)
     mul(19@, 0.03)
     0400: store_coords_to 20@ 21@ 22@ from_object 30@ with_offset 13@ 14@ 0.0
     0400: store_coords_to 23@ 24@ 25@ from_object 30@ with_offset 18@ 19@ 0.0
     if
         86BD: not no_obstacles_between 20@ 21@ 22@ and 23@ 24@ 25@ solid 1 car 0 actor 0 object 0 particle 0
     then
         break
     end
end     
//0400: store_coords_to 20@ 21@ 22@ from_object 30@ with_offset 17@ 18@ 19@
0208: 29@ = random_float_in_ranges 0.0 360.0
0453: set_object 30@ XY_rotation 0.0 29@ angle 15@
 
Den_spbДата: Понедельник, 11.04.2011, 00:33 | Сообщение # 13
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Не понял принцип действия, объясни подробнее. Почему берётся полукруг, если задача пространственная?
Quote (DK22Pac)
0453: set_object 30@ XY_rotation 0.0 29@ angle 15@
Это что? Установка углов X, Y, Z?
Quote (DK22Pac)
0208: 29@ = random_float_in_ranges 0.0 360.0
Это зачем?
П.С. Счётчик цикла лучше сразу сделать дробным числом, чтобы не добавлять лишние команды.
 
DK22PacДата: Понедельник, 11.04.2011, 00:53 | Сообщение # 14
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Пока что мне надо найти только угол по оси Z. Для этого я беру точки от центра обьекта, на расстоянии 0.03. Сейчас открою ФШ постараюсь нарисовать.
Quote
Это что? Установка углов X, Y, Z?

Да.

Обьект в максе:

Обьект "двусторонний".


Сообщение отредактировал DK22Pac - Понедельник, 11.04.2011, 01:40
 
Den_spbДата: Понедельник, 11.04.2011, 01:40 | Сообщение # 15
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Теперь понятно. Но здесь тоже можно было бы использовать "метод деления на 2", а не проверять каждую пару точек.
 
Форум » Игры серии ГТА » Скриптинг » Математические и механические задачи в GTA (Применение знаний математики и механики в моддинге)
  • Страница 1 из 10
  • 1
  • 2
  • 3
  • 9
  • 10
  • »
Поиск: