Математические и механические задачи в GTA
|
|
izerli | Дата: Вторник, 10.01.2012, 16:21 | Сообщение # 46 |
Группа: Проверенные
Сообщений: 90
Статус: Offline
| ILYALION, можно проще Code 04C4: store_coords_to 0@ 1@ 2@ from_actor $PLAYER_ACTOR with_offset -20.0 70.0 0.0
Сообщение отредактировал izerli - Вторник, 10.01.2012, 16:22 |
|
| |
ILYALION | Дата: Вторник, 10.01.2012, 17:10 | Сообщение # 47 |
Группа: Проверенные
Сообщений: 325
Статус: Offline
| izerli, спасибо большое! А я сидел и вычислял...
|
|
| |
ILYALION | Дата: Четверг, 12.01.2012, 21:38 | Сообщение # 48 |
Группа: Проверенные
Сообщений: 325
Статус: Offline
| Мне известны x и y координаты всех трёх точек. y координаты точек A и B совпадают. Также известны длины отрезков AB и BC. Нужно найти угол ABC. Добавлено (12.01.2012, 21:38) --------------------------------------------- Можно ли из косинуса угла вычислить градусную меру этого угла?
Сообщение отредактировал ILYALION - Четверг, 12.01.2012, 21:36 |
|
| |
Den_spb | Дата: Пятница, 13.01.2012, 07:56 | Сообщение # 49 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Можно назвать несколько способов вычисления значений углов, но проще всего это сделать с помощью стандартных опкодов:
1) 0604: get_angle_between_vectors_{a,b} $a $b and_{0,1}_store_to $Angle Данный опкод вычисляет угол между вектором {a,b} (где a,b - это x,y , y,z или z,x) и единичным вектором {0,1} (соответственно ось Y, Z или X). Напоминаю, что для получения координат вектора нужно из координат точки конца вектора вычесть координаты точки начала вектора. Этот опкод можно использовать и для вычисления угла между двумя произвольно направленными векторами. Для этого сначала вычисляются углы между векторами и осью (угол1 и угол2). Угол между векторами будет равен: угол3 = угол2 - угол1 (см. правый рисунок).
2) 05A4: get_angle_between_vectors_origin_to 9@ 10@ and_origin_to 11@ 12@ store_to 26@ Данный опкод вычисляет значение меньшего из двух углов, образованных пересечением двух произвольно направленных векторов.
|
|
| |
BoPoH | Дата: Вторник, 24.01.2012, 22:49 | Сообщение # 50 |
Группа: Проверенные
Сообщений: 53
Статус: Offline
| Den_spb, как повернуть матрицу на определённые углы? Именно, как-бы прибавить к текущим. Как, например, в опкоде крепления авто к объекту, там можно указать углы "смещения". И, кстати, как сделать, чтобы корона не просвечивала сквозь игрока, авто и т.д., и можно ли как-то уменьшить радиус её действия, ибо когда камера близко к ней, то она не рендерится?
P.S. Извините за оффтоп)
First-Person mode 85% done Добро всегда побеждает зло. Кто победил, тот и добрый!
Сообщение отредактировал BoPoH - Вторник, 24.01.2012, 22:56 |
|
| |
Den_spb | Дата: Вторник, 24.01.2012, 23:46 | Сообщение # 51 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Quote (BoPoH) Den_spb, как повернуть матрицу на определённые углы? Именно, как-бы прибавить к текущим. Как, например, в опкоде крепления авто к объекту, там можно указать углы "смещения". Это пересчёт координат из одной системы в другую (в опкоде указывается не "смещение", а позиция автомобиля в системе координат объекта). http://modsforgta.ucoz.ru/forum/5-5-2891-16-1325445803 http://modsforgta.ucoz.ru/forum/12-62-2769-16-1324692231
Quote (BoPoH) И, кстати, как сделать, чтобы корона не просвечивала сквозь игрока, авто и т.д., "Проникающая способность" определяется одним из параметров в функции создания короны: http://sannybuilder.com/forums/viewtopic.php?pid=19139#p19139 В данном случае этот параметр (penetration) следует уменьшить.
Quote (BoPoH) P.S. Извините за оффтоп) Сообщение перенёс в другую тему.
|
|
| |
BoPoH | Дата: Среда, 25.01.2012, 00:03 | Сообщение # 52 |
Группа: Проверенные
Сообщений: 53
Статус: Offline
| Den_spb, А как перемножить матрицы?) Неужто просто перемножить координаты векторов?
First-Person mode 85% done Добро всегда побеждает зло. Кто победил, тот и добрый!
|
|
| |
Den_spb | Дата: Среда, 25.01.2012, 00:18 | Сообщение # 53 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Надо умножить элементы одной матрицы на элементы другой в соответствующем порядке. http://ru.wikipedia.org/wiki/Перемножение_матриц В exe наверное для этого есть специальные функции, хотя и без их использования алгоритм будет несложным.
Добавлено: Вот примерчик перемножения двух матриц:
Code 1 2 5 6 1*5+2*7 1*6+2*8 19 22 3 4 * 7 8 = 3*5+4*7 3*6+4*8 = 43 50
|
|
| |
BoPoH | Дата: Среда, 25.01.2012, 19:18 | Сообщение # 54 |
Группа: Проверенные
Сообщений: 53
Статус: Offline
| Quote (Den_spb) Вот примерчик перемножения двух матриц: Честно говоря не понял, зачем там сложение вообще... Можно на примере матрицы из GTA SA?
First-Person mode 85% done Добро всегда побеждает зло. Кто победил, тот и добрый!
|
|
| |
Den_spb | Дата: Среда, 25.01.2012, 19:25 | Сообщение # 55 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Quote (BoPoH) Честно говоря не понял, зачем там сложение вообще... Такое правило. В википедии всё подробно написано, надо только внимательно прочитать. Если просто умножить элементы одной матрицы на соответствующие элементы другой, то результат будет неверным.
Quote (BoPoH) Можно на примере матрицы из GTA SA? Перемножение будет осуществляться по тому же принципу, только матрицы будут размером не 2х2, а 3х3: Code RightX RightY RightZ TopX TopY TopZ AtX AtY AtZ
|
|
| |
BoPoH | Дата: Среда, 25.01.2012, 21:32 | Сообщение # 56 |
Группа: Проверенные
Сообщений: 53
Статус: Offline
| Quote (Den_spb) Если просто умножить элементы одной матрицы на соответствующие элементы другой, то результат будет неверным. Я об этом догадывался. Quote (Den_spb) Перемножение будет осуществляться по тому же принципу Вот я этот самый принцип и не могу понять, что поделать, я учусь на реальных примерах, просто теорию мне тяжело понять. Попробую всё же разобрать статью из википедии...
First-Person mode 85% done Добро всегда побеждает зло. Кто победил, тот и добрый!
|
|
| |
Den_spb | Дата: Среда, 25.01.2012, 22:46 | Сообщение # 57 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Ничего сложного нет - простая арифметика. Элемент N-строки M-столбца матрицы-произведения равен сумме произведений элементов N-строки первой матрицы и элементов M-столбца второй матрицы. Отсюда следует вывод, что матрицы можно перемножать только в том случае, если количество столбцов первой матрицы равно количеству строк второй матрицы.
|
|
| |
BoPoH | Дата: Среда, 25.01.2012, 23:00 | Сообщение # 58 |
Группа: Проверенные
Сообщений: 53
Статус: Offline
| Den_spb, т.е. RightX_Mul = RightX_1 * RightX_2 + RightY_1 * TopX_2 + RightZ_1 * AtX_2?
First-Person mode 85% done Добро всегда побеждает зло. Кто победил, тот и добрый!
Сообщение отредактировал BoPoH - Среда, 25.01.2012, 23:01 |
|
| |
Den_spb | Дата: Среда, 25.01.2012, 23:03 | Сообщение # 59 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Да, верно.
|
|
| |
BoPoH | Дата: Среда, 25.01.2012, 23:05 | Сообщение # 60 |
Группа: Проверенные
Сообщений: 53
Статус: Offline
| Den_spb, спасибо большое, проверю и отпишусь, всё ли работает) Кстати, адресок матрицы авто не подскажешь? А то вот это не совсем то: Quote Для каждой машины в пуле: +20 = [byte] Содержит указатель на матрицу вращения/позиционирования (84 байта): +0 = [float] X-axis Rotation (Grad) +4 = [float] Y-axis Rotation (Grad) +8 = [float] Z-axis Rotation (Grad) +16 = [float] X-axis Rotation (Looking) +20 = [float] Y-axis Rotation (Looking) +24 = [float] Z-axis Rotation (Looking) +48 = [float] X-axis Position +52 = [float] Y-axis Position +56 = [float] Z-axis Position В базе что-то тоже не смог отыскать...
First-Person mode 85% done Добро всегда побеждает зло. Кто победил, тот и добрый!
Сообщение отредактировал BoPoH - Четверг, 26.01.2012, 00:47 |
|
| |