• Добро пожаловать, Гость. Войдите или зарегистрируйтесь.

Автор Тема: Вращение  (Прочитано 684 раз)

Описание:

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Tazik

  • *
  • Сообщений: 4
  • Репутация: 0
  • Пол: Мужской
    • Просмотр профиля
Вращение
« : 13 Сентябрь, 2012, 17:26:16 »
0
Привет всем. Хочу написать скрипт на вращение одной сферы вокруг другой, но без использования всяких сторонних плагинов, типа ESM Math Library, только OBSE. Какие формулы нужно использовать для этого?

Оффлайн defmotion3

  • *
  • Сообщений: 165
  • Репутация: 0.1
  • Пол: Мужской
    • Просмотр профиля
Re: Вращение
« Ответ #1 : 13 Сентябрь, 2012, 22:16:06 »
0
Параметрические для окружности

Пример:
Опуская дефиницию для переменных:

   if ActorRef


               set f0  to Rcilinder*( cos t)
               set xxx to SPxxx+f0

               set f0  to Rcilinder*( sin t)
               set yyy to SPyyy+f0

               ActorRef.setPos x xxx
               ActorRef.setPos y yyy
               ActorRef.setPos z SPzzz

   endif
;
где t -параметр (угол) от которого зависит изменение координат,
если задать Rcilinder тоже как параметр , то получится движение по спирали.

Rcilinder - радиус окружности (у меня было винтовое движение),

SPxxx,... - стартовая позиция тела(у меня был актер),

f0 - временная переменная для вычислений

xxx,yyy,...- позиции после вычислений

Вот как это выглядит:
Oblivion - TESV.flv


(Для Скайрима такой скрипт не годится, там нельзя задать выполнение скрипта каждый фрейм, поэтому параметрические уравнения, для вычисления координат нужно использовать со спец.функциями кривых (там есть что-то вроде движение по дуге, степень кривизны - бла-бла-бла)
« Последнее редактирование: 13 Сентябрь, 2012, 22:33:21 от defmotion3 »

Оффлайн Мастер Ёда

  • *
  • Сообщений: 158
  • Репутация: 9.2
    • ICQ клиент - 403779071
    • Просмотр профиля
    • http://www.yandex.ru
Re: Вращение
« Ответ #2 : 14 Сентябрь, 2012, 00:01:20 »
0
Насколько я понял вопрос был про Обливион.

У меня где-то скрипт планетарки был. Косинусы и синусы без ОБСЕ замечательно воспроизводятся рядами Тейлора, юзал отсюда:

http://cs.elderscrolls.com/index.php/Trigonometry_Functions

пример:
if Wiki.ang < 0
  set Wiki.ang to (Wiki.ang + 360)
elseif Wiki.ang >= 360
  set Wiki.ang to (Wiki.ang - 360)
endif
set Wiki.ang to (Wiki.ang/Wiki.rad)

set Wiki.n to 1
if (Wiki.ang > 4.7123)
    Set Wiki.ang to (Wiki.ang - 6.2832)
elseif ( Wiki.ang > 1.5708 )
    Set Wiki.ang to (Wiki.ang - 3.1416)
    Set Wiki.n to -1
endif

set Wiki.t2 to (Wiki.ang * Wiki.ang)
set Wiki.sin to Wiki.n*(Wiki.ang*(1 - Wiki.t2*0.16605 + 0.00761*Wiki.t2*Wiki.t2))
set Wiki.cos to Wiki.n*(1 - Wiki.t2*0.4967 + 0.03705*Wiki.t2*Wiki.t2)

Если вращение в плоскости горизонта или в вертикальной плоскости то выше уже описали как. Если нужно под произвольным углом то будет раз в 5-6 больше кода.
« Последнее редактирование: 14 Сентябрь, 2012, 00:18:14 от Мастер Ёда »

Оффлайн Tazik

  • *
  • Сообщений: 4
  • Репутация: 0
  • Пол: Мужской
    • Просмотр профиля
Re: Вращение
« Ответ #3 : 17 Октябрь, 2012, 11:25:23 »
0
Спасибо, с этим разобрался. Появился такой вопрос: почему для вычисления позиции по X используют синус, а для Y - косинус? Ведь должно быть наоборот. А во многих скриптах такое видел. Как в этих, например: http://cs.bethsoft.com/index.php/Activation_Functions, http://cs.bethsoft.com/index.php/Summon_Object

Оффлайн defmotion3

  • *
  • Сообщений: 165
  • Репутация: 0.1
  • Пол: Мужской
    • Просмотр профиля
Re: Вращение
« Ответ #4 : 17 Октябрь, 2012, 12:15:09 »
0
Не знаю кто так использует,

Кривые и параметрические уравнения
http://www.netlib.narod.ru/library/book0039/ch05_08.htm

Оффлайн NAVYgator

  • *
  • Сообщений: 1472
  • Репутация: 30.7
  • Пол: Мужской
  • скрипты никому не пишу
    • Просмотр профиля
    • Email
Re: Вращение
« Ответ #5 : 17 Октябрь, 2012, 13:18:02 »
0
почему для вычисления позиции по X используют синус, а для Y - косинус?

Это утверждение, отчасти, верно, но не совсем корректно.
Все упирается в систему измерения углов в ТЕС.
Есть три системы (здесь рассмотрим только 2):
1) угловые координаты мира
2) тригонометрические углы.

В первом случае используется полярная система координат с точкой отсчета от Севера (для горизонтальных осей) или зенита (для вертикальной оси):
- направление "на север" (верх) = 00
- направление "на восток" (право) = 900
- направление "на юг" (низ) = 1800
- направление " на запад" (лево) = 2700

Здесь, как видим, изменение (увеличение) угла идет по часовой стрелке. И если рассчитывать значение Х в этой системе отсчета углов, то оно действительно будет определяться синусом угла, значение которого даст нам функция GetAngle:

(при расстоянии точки от центра = 1)

Во втором случае, отсчет углов идет в привычной системе координат (где 00 совпадает с направлением оси Х) и изменение (увеличение) угла происходит против часовой стрелки:
- направление вправо = 00
- направление вверх = 900
- направление влево = 1800
- направление вниз = 2700

В этом случае действуют привычные для декартовой системы координат зависимости:
Х - от cos Угла
Y - от sin Угла

Для перехода от одной (мировой) к другой (тригонометрической) системе определения углов можно произвести несложный расчет:
Цитировать (выделенное)
set xAngle to <угол, полученный функцией GetAngle>

if  xAngle <= 90
  set xTrigAngle  to 90 - xAngle
else
  set xTrigAngle to 450 - xAngle
endif

В связи с тем, что sin и cos "отличаются" на 900, можно подходить к определению координат "творчески"  ;)
Но применение OBSE облегчает эту задачу, т.к. в ней уже имеются функции Sin и Cos

Более подробно все эти дела описаны ЗДЕСЬ
 :PS:
Tazik, в приведенных примерах скриптов Activation_Functions и Summon_Object как раз тригонометрические функции из OBSE не используется, что вызывает необходимость "арифметического" вычисления величин синусов и косинусов углов.
« Последнее редактирование: 17 Октябрь, 2012, 14:59:04 от NAVYgator »
Награды Всем форумчанам, принимавшим участие в праздновании 10-летия Морровинд За создание новогоднего настроения Всем принявшим участие в 9-летии Тиарума За огромный вклад в развитие Румора

Оффлайн Tazik

  • *
  • Сообщений: 4
  • Репутация: 0
  • Пол: Мужской
    • Просмотр профиля
Re: Вращение
« Ответ #6 : 17 Октябрь, 2012, 20:28:44 »
0
NAVYgator, спасибо за исчерпывающий ответ. А с обратными тригонометрическими функциями тоже будет нужно учитывать эти различия?

Оффлайн NAVYgator

  • *
  • Сообщений: 1472
  • Репутация: 30.7
  • Пол: Мужской
  • скрипты никому не пишу
    • Просмотр профиля
    • Email
Re: Вращение
« Ответ #7 : 17 Октябрь, 2012, 23:00:20 »
0
NAVYgator, спасибо за исчерпывающий ответ. А с обратными тригонометрическими функциями тоже будет нужно учитывать эти различия?

Честно говоря, я не проверял. Но по сути - да, различия в отсчете "мировых" углов и "тригонометрических" углов сохраняются вне зависимости от используемой тригонометрической функции OBSE.
Вот ЗДЕСЬ - описание арксинуса и ссылки на другие тригонометрические функции.
Награды Всем форумчанам, принимавшим участие в праздновании 10-летия Морровинд За создание новогоднего настроения Всем принявшим участие в 9-летии Тиарума За огромный вклад в развитие Румора

Оффлайн Tazik

  • *
  • Сообщений: 4
  • Репутация: 0
  • Пол: Мужской
    • Просмотр профиля
Re: Вращение
« Ответ #8 : 22 Октябрь, 2012, 10:26:47 »
0
А как сделать, чтобы предмет находился в перекрестии игрока? Например, как при нажатии Z, когда перетаскиваешь что-либо. То есть куда бы ни посмотрел, предмет всегда следует за перекрестием ( вверх и вниз тоже)

Теги:
 

Wiki: Oblivion:Вращение одного объекта вокруг другого с помо

Автор WikiBotРаздел Мастерская TES IV

Ответов: 0
Просмотров: 382
Последний ответ 27 Ноябрь, 2011, 00:01:44
от WikiBot

Поиск

 
Top
SimplePortal 2.3.5 © 2008-2012, SimplePortal