forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Математика (http://forum.boolean.name/forumdisplay.php?f=85)
-   -   Тригонометрия (http://forum.boolean.name/showthread.php?t=6082)

Belamore 05.07.2008 20:40

Тригонометрия
 
Собсно, сабж.
Когда у нас в одной плоскости есть угол и надо найти x и y то всё просто - x=cos ; y=sin (пока что радиус опустим, будем считать что точка крутится вокруг другой точки на расстоянии единицы)
А как быть в трёхмерном пространстве?
крутим по roll вычисляя x и y - всё замечательно.
крутим по pitch - вычисляем z... но ведь он и на y тоже влияет! А у нас уже есть значение y после roll-преобразования. Как быть? Сложить, вычесть, умножить? :dontknow: Пробовал, не помогает :wallbash:
Короче, как имея pitch,yaw и roll получить x,y и z и наоборот?
Заранее спасибо!

Tadeus 05.07.2008 21:33

Ответ: Тригонометрия
 
Имеем два угла - a и b. Отсюда:

x=sin(a)*cos(b)
y=sin(a)*sin(b)
z=cos(a)

По-моему так :)

ЗЫЖ вот еще нашел: http://ru.wikipedia.org/wiki/Сферические_координаты

Belamore 05.07.2008 21:59

Немного не так.

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 и сразу же назначает их объекту?
Заранее спасибо за ответ.

moka 08.07.2008 13:01

Ответ: Тригонометрия
 
Вот давненько писал:

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


impersonalis 08.07.2008 18:55

Ответ: Тригонометрия
 
2MoKa
надо уточнить - что nx,ny,nz - отнормированные значения компонент вектора

moka 08.07.2008 19:08

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

Создаём 2 Pivot'a, P0 и P1. P1 привязываем к P0 и двигаем на 1 единицу вперёд (0,0,1). Далее чтобы первести градусы в вектор, крутим P0, и координаты P1 будут вектором. А наоборот нужно позиционировать (глобально) на координаты вектора P1, и направить (PointEntity) P0 на P1, градус P0 и будет переведённый вектор.
Варриант ужастно черезуоперный и корявый, а всё по причине отсутсвий нормальной работы с матрицами в б3д, хотя там есть пару функций, и вроде очень хороших и с ними можно орудовать, но я не вникал..

impersonalis 10.07.2008 03:05

Ответ: Тригонометрия
 
Цитата:

Сообщение от MoKa (Сообщение 81944)
impersonalis, спасибо поправил :)
Да кстати простой способ но он черезуоперный, как получить вектор исходя из градусов или наоборот.

Создаём 2 Pivot'a, P0 и P1. P1 привязываем к P0 и двигаем на 1 единицу вперёд (0,0,1). Далее чтобы первести градусы в вектор, крутим P0, и координаты P1 будут вектором. А наоборот нужно позиционировать (глобально) на координаты вектора P1, и направить (PointEntity) P0 на P1, градус P0 и будет переведённый вектор.
Варриант ужастно черезуоперный и корявый, а всё по причине отсутсвий нормальной работы с матрицами в б3д, хотя там есть пару функций, и вроде очень хороших и с ними можно орудовать, но я не вникал..

имхо вариант с пивотами (в той или иной реализации) - оптимальный в большинстве случаев. Не стал публиковать лишь потому, что автор настоял на математике.

WISHMASTER35 15.02.2009 12:44

Ответ: Тригонометрия
 
Скажите как перемещать позиции в 3д пространстве в направлении углов X и Y. Если быть точнее, то мне надо в Mascot Capsule двигать камеру вперёд, тоесть туда куда она смотрит.

Kolobok 02.07.2010 21:30

Ответ: Тригонометрия
 
Вложений: 1
Помогите найти a :)

SBJoker 02.07.2010 21:34

Ответ: Тригонометрия
 
Atan(y2-y1, x2-x1 )
*как то так, по памяти пишу.

impersonalis 02.07.2010 21:45

Ответ: Тригонометрия
 
попралю Жокера, atan2, ток как парвило называют эту функцию с двухаргументым интерфейсом

Kolobok 02.07.2010 22:06

Ответ: Тригонометрия
 
Чёто не в какую...

PHP код:

$x1 0;
$y1 0;

$x2 = -6;
$y2 = -4;

$a atan2($y2-$y1$x2-$x1) ;

echo(
$a); 


Kolobok 02.07.2010 22:24

Ответ: Тригонометрия
 
Извиняюсь :) А на Blitz3D всё работает.
Код:

x1 = 0
y1 = 0

x2 = -6
y2 = -4

a = ATan2(y2-y1, x2-x1)

Print a

WaitKey()
End

Спасибо :) Очень помогли. Буду теперь выяснять почему на php не работатет.

Kolobok 02.07.2010 22:40

Ответ: Тригонометрия
 
Всё :) И с PHP разобрался.
В PHP функция ATan2 возвращает результат в радианах, так что надо ещё перевести в градусы:
PHP код:

$x1 0;
$y1 0;

$x2 = -6;
$y2 = -4;

$a ATan2($y2-$y1$x2-$x1);

print 
rad2deg($a); 



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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot