Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   www.boolean.name > Программирование в широком смысле слова > Математика

Математика Методы математического моделлирования, программирование математических концепций, роль математики в создании игр

Ответ
 
Опции темы
Старый 05.07.2008, 16:40   #1
Belamore
Оператор ЭВМ
 
Регистрация: 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, 17:33   #2
Tadeus
Троллота
 
Регистрация: 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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Belamore (05.07.2008)
Старый 05.07.2008, 17:59   #3
Belamore
Оператор ЭВМ
 
Регистрация: 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 в 00:01.
(Offline)
 
Ответить с цитированием
Старый 08.07.2008, 09:01   #4
moka
.
 
Регистрация: 04.08.2006
Сообщений: 10,429
Написано 3,453 полезных сообщений
(для 6,859 пользователей)
Ответ: Тригонометрия

Вот давненько писал:

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 в 15:03.
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо moka за это полезное сообщение:
-=Jack=- (04.03.2009), HolyDel (08.07.2008), impersonalis (08.07.2008)
Старый 08.07.2008, 14:55   #5
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 03.09.2005
Сообщений: 14,014
Написано 6,795 полезных сообщений
(для 20,916 пользователей)
Ответ: Тригонометрия

2MoKa
надо уточнить - что nx,ny,nz - отнормированные значения компонент вектора
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
moka (08.07.2008)
Старый 08.07.2008, 15:08   #6
moka
.
 
Регистрация: 04.08.2006
Сообщений: 10,429
Написано 3,453 полезных сообщений
(для 6,859 пользователей)
Ответ: Тригонометрия

impersonalis, спасибо поправил
Да кстати простой способ но он черезуоперный, как получить вектор исходя из градусов или наоборот.

Создаём 2 Pivot'a, P0 и P1. P1 привязываем к P0 и двигаем на 1 единицу вперёд (0,0,1). Далее чтобы первести градусы в вектор, крутим P0, и координаты P1 будут вектором. А наоборот нужно позиционировать (глобально) на координаты вектора P1, и направить (PointEntity) P0 на P1, градус P0 и будет переведённый вектор.
Варриант ужастно черезуоперный и корявый, а всё по причине отсутсвий нормальной работы с матрицами в б3д, хотя там есть пару функций, и вроде очень хороших и с ними можно орудовать, но я не вникал..
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
impersonalis (09.07.2008)
Старый 09.07.2008, 23:05   #7
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 03.09.2005
Сообщений: 14,014
Написано 6,795 полезных сообщений
(для 20,916 пользователей)
Ответ: Тригонометрия

Сообщение от 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, 09:44   #8
WISHMASTER35
Бывалый
 
Аватар для WISHMASTER35
 
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений
(для 357 пользователей)
Ответ: Тригонометрия

Скажите как перемещать позиции в 3д пространстве в направлении углов X и Y. Если быть точнее, то мне надо в Mascot Capsule двигать камеру вперёд, тоесть туда куда она смотрит.
(Offline)
 
Ответить с цитированием
Старый 02.07.2010, 17:30   #9
Kolobok
Оператор ЭВМ
 
Аватар для Kolobok
 
Регистрация: 02.07.2010
Сообщений: 30
Написано 0 полезных сообщений
(для 7 пользователей)
Ответ: Тригонометрия

Помогите найти a
Миниатюры
Нажмите на изображение для увеличения
Название: a.png
Просмотров: 262
Размер:	10.6 Кб
ID:	10545  
(Offline)
 
Ответить с цитированием
Старый 02.07.2010, 17:34   #10
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,921
Написано 3,411 полезных сообщений
(для 9,319 пользователей)
Ответ: Тригонометрия

Atan(y2-y1, x2-x1 )
*как то так, по памяти пишу.
__________________
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Kolobok (02.07.2010)
Старый 02.07.2010, 17:45   #11
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 03.09.2005
Сообщений: 14,014
Написано 6,795 полезных сообщений
(для 20,916 пользователей)
Ответ: Тригонометрия

попралю Жокера, atan2, ток как парвило называют эту функцию с двухаргументым интерфейсом
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Kolobok (02.07.2010)
Старый 02.07.2010, 18:06   #12
Kolobok
Оператор ЭВМ
 
Аватар для Kolobok
 
Регистрация: 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, 18:24   #13
Kolobok
Оператор ЭВМ
 
Аватар для Kolobok
 
Регистрация: 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, 18:40   #14
Kolobok
Оператор ЭВМ
 
Аватар для Kolobok
 
Регистрация: 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)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +1, время: 18:37.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com