|
Математика Методы математического моделлирования, программирование математических концепций, роль математики в создании игр |
05.07.2008, 20:40
|
#1
|
Оператор ЭВМ
Регистрация: 23.07.2007
Сообщений: 42
Написано 0 полезных сообщений (для 0 пользователей)
|
Тригонометрия
Собсно, сабж.
Когда у нас в одной плоскости есть угол и надо найти x и y то всё просто - x=cos ; y=sin (пока что радиус опустим, будем считать что точка крутится вокруг другой точки на расстоянии единицы)
А как быть в трёхмерном пространстве?
крутим по roll вычисляя x и y - всё замечательно.
крутим по pitch - вычисляем z... но ведь он и на y тоже влияет! А у нас уже есть значение y после roll-преобразования. Как быть? Сложить, вычесть, умножить? Пробовал, не помогает
Короче, как имея pitch,yaw и roll получить x,y и z и наоборот?
Заранее спасибо!
|
(Offline)
|
|
05.07.2008, 21:33
|
#2
|
Троллота
Регистрация: 09.07.2007
Сообщений: 1,829
Написано 554 полезных сообщений (для 1,772 пользователей)
|
Ответ: Тригонометрия
Имеем два угла - a и b. Отсюда:
x=sin(a)*cos(b)
y=sin(a)*sin(b)
z=cos(a)
По-моему так
ЗЫЖ вот еще нашел: http://ru.wikipedia.org/wiki/Сферические_координаты
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
05.07.2008, 21:59
|
#3
|
Оператор ЭВМ
Регистрация: 23.07.2007
Сообщений: 42
Написано 0 полезных сообщений (для 0 пользователей)
|
Немного не так.
roll = roll+1 ; крутим по roll
vx# = ( -1*Sin(roll));*3
vy# = (Cos(roll));*3
pitch = pitch+1
; тепер крутим по pitch
vz# = ( 1*Sin(pitch))*vy;*3
vy# = (Cos(pitch))*vy;*3
z тоже надо умножать на y
но всё равно спасибо что навёл на умную мысль
Ещё вопрос.
Имеется вектор x,y,z
Как математически получить pitch,yaw,roll по аналогии с командой AlignToVector, в которую пихаешь направление вектора, а она вычисляет нужные pitch,yaw,roll и сразу же назначает их объекту?
Заранее спасибо за ответ.
Последний раз редактировалось Randomize, 04.07.2010 в 04:01.
|
(Offline)
|
|
08.07.2008, 13:01
|
#4
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Тригонометрия
Вот давненько писал:
Entity% - объект.
nx# - нормализованный x компонент вектора.
ny# - нормализованный y компонент вектора.
nz# - нормализованный z компонент вектора.
Global% - глобально\локально манипулировать объектом.
Function mAlignEntity(Entity%,nx#,ny#,nz#,Global%=0)
RotateEntity Entity,ASin(ny)-90,ATan2(nz,nx)+90,0,Global
End Function
Последний раз редактировалось moka, 08.07.2008 в 19:03.
|
(Offline)
|
|
Эти 3 пользователя(ей) сказали Спасибо moka за это полезное сообщение:
|
|
08.07.2008, 18:55
|
#5
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: Тригонометрия
2MoKa
надо уточнить - что nx,ny,nz - отнормированные значения компонент вектора
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
08.07.2008, 19:08
|
#6
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Тригонометрия
impersonalis, спасибо поправил
Да кстати простой способ но он черезуоперный, как получить вектор исходя из градусов или наоборот.
Создаём 2 Pivot'a, P0 и P1. P1 привязываем к P0 и двигаем на 1 единицу вперёд (0,0,1). Далее чтобы первести градусы в вектор, крутим P0, и координаты P1 будут вектором. А наоборот нужно позиционировать (глобально) на координаты вектора P1, и направить (PointEntity) P0 на P1, градус P0 и будет переведённый вектор.
Варриант ужастно черезуоперный и корявый, а всё по причине отсутсвий нормальной работы с матрицами в б3д, хотя там есть пару функций, и вроде очень хороших и с ними можно орудовать, но я не вникал..
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
10.07.2008, 03:05
|
#7
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: Тригонометрия
Сообщение от MoKa
impersonalis, спасибо поправил
Да кстати простой способ но он черезуоперный, как получить вектор исходя из градусов или наоборот.
Создаём 2 Pivot'a, P0 и P1. P1 привязываем к P0 и двигаем на 1 единицу вперёд (0,0,1). Далее чтобы первести градусы в вектор, крутим P0, и координаты P1 будут вектором. А наоборот нужно позиционировать (глобально) на координаты вектора P1, и направить (PointEntity) P0 на P1, градус P0 и будет переведённый вектор.
Варриант ужастно черезуоперный и корявый, а всё по причине отсутсвий нормальной работы с матрицами в б3д, хотя там есть пару функций, и вроде очень хороших и с ними можно орудовать, но я не вникал..
|
имхо вариант с пивотами (в той или иной реализации) - оптимальный в большинстве случаев. Не стал публиковать лишь потому, что автор настоял на математике.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
15.02.2009, 12:44
|
#8
|
Бывалый
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений (для 357 пользователей)
|
Ответ: Тригонометрия
Скажите как перемещать позиции в 3д пространстве в направлении углов X и Y. Если быть точнее, то мне надо в Mascot Capsule двигать камеру вперёд, тоесть туда куда она смотрит.
|
(Offline)
|
|
02.07.2010, 21:30
|
#9
|
Оператор ЭВМ
Регистрация: 02.07.2010
Сообщений: 30
Написано 0 полезных сообщений (для 7 пользователей)
|
Ответ: Тригонометрия
Помогите найти a
|
(Offline)
|
|
02.07.2010, 21:34
|
#10
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Ответ: Тригонометрия
Atan(y2-y1, x2-x1 )
*как то так, по памяти пишу.
__________________
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
02.07.2010, 21:45
|
#11
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: Тригонометрия
попралю Жокера, atan2, ток как парвило называют эту функцию с двухаргументым интерфейсом
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
02.07.2010, 22:06
|
#12
|
Оператор ЭВМ
Регистрация: 02.07.2010
Сообщений: 30
Написано 0 полезных сообщений (для 7 пользователей)
|
Ответ: Тригонометрия
Чёто не в какую...
$x1 = 0; $y1 = 0; $x2 = -6; $y2 = -4; $a = atan2($y2-$y1, $x2-$x1) ; echo($a);
|
(Offline)
|
|
02.07.2010, 22:24
|
#13
|
Оператор ЭВМ
Регистрация: 02.07.2010
Сообщений: 30
Написано 0 полезных сообщений (для 7 пользователей)
|
Ответ: Тригонометрия
Извиняюсь А на Blitz3D всё работает.
x1 = 0
y1 = 0
x2 = -6
y2 = -4
a = ATan2(y2-y1, x2-x1)
Print a
WaitKey()
End
Спасибо Очень помогли. Буду теперь выяснять почему на php не работатет.
|
(Offline)
|
|
02.07.2010, 22:40
|
#14
|
Оператор ЭВМ
Регистрация: 02.07.2010
Сообщений: 30
Написано 0 полезных сообщений (для 7 пользователей)
|
Ответ: Тригонометрия
Всё И с PHP разобрался.
В PHP функция ATan2 возвращает результат в радианах, так что надо ещё перевести в градусы:
$x1 = 0; $y1 = 0; $x2 = -6; $y2 = -4; $a = ATan2($y2-$y1, $x2-$x1); print rad2deg($a);
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 04:22.
|