Пятница, 29 Марта 2024, 10:13

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Программирование » Скриптовые языки программирования » поворот (помогите понять)
поворот
allodsДата: Суббота, 17 Февраля 2018, 18:29 | Сообщение # 1
почти ветеран
Сейчас нет на сайте
Код
  x'=x
  y'=y*math.cos(math.rad(L))+ z*math.sin(math.rad(L))
  z'=-y*math.sin(math.rad(L))+ z*math.cos(math.rad(L))

  x'=x*math.cos(math.rad(L)) + z*math.sin(math.rad(L))
  y'=y
  z'=-x*math.sin(math.rad(L)) + z*math.cos(math.rad(L))

  x'=x*math.cos(math.rad(L)) - y*math.sin(math.rad(L))
  y'=x*math.sin(math.rad(L)) + y*math.cos(math.rad(L))
  z'=z


Ребят есть такой код для поворота. По оси X Y и Z.
Но я не могу понять что такое L ? Радиана чего ?


Сообщение отредактировал allods - Суббота, 17 Февраля 2018, 18:30
drcrackДата: Суббота, 17 Февраля 2018, 20:29 | Сообщение # 2
старожил
Сейчас нет на сайте
Полагаю что это угол на который тебе надо повернуться, в градусах
allodsДата: Суббота, 17 Февраля 2018, 23:39 | Сообщение # 3
почти ветеран
Сейчас нет на сайте
получается ерунда
drcrackДата: Воскресенье, 18 Февраля 2018, 07:38 | Сообщение # 4
старожил
Сейчас нет на сайте
Тем не менее это именно он
allodsДата: Воскресенье, 18 Февраля 2018, 21:30 | Сообщение # 5
почти ветеран
Сейчас нет на сайте
но как ? если мне надо повернуть сначала по Х а потом по Y как это сделать ? Какой из углов мне туда засунуть

допустим повернуть по Х на 15 градусов

x'=x
y'=y*math.cos(math.rad(15))+ z*math.sin(math.rad(15))
z'=-y*math.sin(math.rad(15))+ z*math.cos(math.rad(15))

а Х получается останется без изменения ? Чушь какая то


Сообщение отредактировал allods - Воскресенье, 18 Февраля 2018, 21:42
drcrackДата: Воскресенье, 18 Февраля 2018, 22:01 | Сообщение # 6
старожил
Сейчас нет на сайте
Цитата
а Х получается останется без изменения ? Чушь какая то

Почему чушь-то? При повороте вокруг оси X координата X не изменится.

Цитата
если мне надо повернуть сначала по Х а потом по Y как это сделать ? Какой из углов мне туда засунуть

Сначала один, потом другой, в чем проблема-то? У тебя 3 куска кода для поворотов вокруг разных осей.

PS Я бы на твоем месте не изобретал с нуля линейную алгебру, а взял бы готовые библиотеки.


Сообщение отредактировал drcrack - Воскресенье, 18 Февраля 2018, 22:04
allodsДата: Воскресенье, 18 Февраля 2018, 22:09 | Сообщение # 7
почти ветеран
Сейчас нет на сайте
Код
function Xrot(angle)
    local cos = math.cos(angle)
    local sin = math.sin(angle)
    local yy=y*cos - z*sin
    local zz=z*cos + y*sin
    y=yy
    z=zz
end


сделал такую функцию

вызываю так Xrot(0.05)

ничего не происходт

PS Я бы на твоем месте не изобретал с нуля линейную алгебру, а взял бы готовые библиотеки.

я просто хочу понять как
drcrackДата: Воскресенье, 18 Февраля 2018, 22:33 | Сообщение # 8
старожил
Сейчас нет на сайте
angle в радианах передаешь?
и кстати какого результата ты ждешь? этот метод не повернет обьект, а переместит его в новую позицию, получится как бы поворот вокруг глобальной оси, но без поворота. Если Y и Z равны нулю (т.е. точка лежит на оси X), то вообще ничего не произойдет

--
вижу что угол в радианах
скажи какие у тебя координаты X Y Z

и убедись что в твоем движке (ты его не назвал) cos и sin принимают угол именно в радианах, потому что иногда в градусах


Сообщение отредактировал drcrack - Воскресенье, 18 Февраля 2018, 22:40
allodsДата: Понедельник, 19 Февраля 2018, 00:25 | Сообщение # 9
почти ветеран
Сейчас нет на сайте
короче это не движок, просто lua . Все это для PS VITA

http://rinnegatamante.github.io/lpp-vita/ это документация в Render там есть Render.drawModel(mdl, 1.0, 1.0, -5.0, 1.0, 1.0, 0.0)
angleX - X rotation value of the model.
angleY - Y rotation value of the model.
angleZ - Z rotation value of the model.

это все в углах не в радианах.
То есть тот код это поворот вокруг точки, то есть сдвиг, меняет координату объекта?

А как тогда сделать именно вращение по своим осям а не мировым.

Добавлено (19 Февраля 2018, 00:15)
---------------------------------------------
то есть x y z это не угол а позиция ?

Добавлено (19 Февраля 2018, 00:25)
---------------------------------------------
Вот пример вращения
http://grafika.me/node/82 делал по нему
что не так

Сообщение отредактировал allods - Понедельник, 19 Февраля 2018, 00:03
drcrackДата: Понедельник, 19 Февраля 2018, 08:44 | Сообщение # 10
старожил
Сейчас нет на сайте
Цитата
Вот пример вращения
http://grafika.me/node/82 делал по нему
что не так

Все норм, тока это формула для вращения точки вокруг глобальных осей
(Хотя и нарисован кубик. Видимо предполагается что формула применяется к каждой точке этого кубика)

Цитата
А как тогда сделать именно вращение по своим осям а не мировым.

Я уже написал — не изобретай алгебру, все уже сделано до тебя :D
То что ты пытаешься сделать на самом деле делается с помощью матриц/кватернионов
Просто возьми готовую библиотеку, а лучше движок


Сообщение отредактировал drcrack - Понедельник, 19 Февраля 2018, 18:21
allodsДата: Понедельник, 19 Февраля 2018, 15:22 | Сообщение # 11
почти ветеран
Сейчас нет на сайте
ну так я смотрел эти ваши матрицы....
все 3 части :D

Но если по делу, то я уже начал писать себе свою библиотеку с матрицей. Но я не понял как потом полученные значения выводить в Углы. Поэтому подумал что через Углы Эйлера

Добавлено (19 Февраля 2018, 15:21)
---------------------------------------------

Код
function matrix4x4:SetRotation(flAngle,v)
    -- Normalize beforehand
    v = v:normalize()

    -- c = math.cos(angle), s = math.sin(angle), t = (1-c)
    -- [ xxt+c   xyt-zs  xzt+ys ]
    -- [ yxt+zs  yyt+c   yzt-xs ]
    -- [ zxt-ys  zyt+xs  zzt+c  ]

    local x = v.x
    local y = v.y
    local z = v.z
    local rot = math.rad(flAngle)
    local c = math.cos(rot)
    local s = math.sin(rot)
    local t = 1-c

    m[1].x = x*x*t + c
    m[2].x = x*y*t - z*s
    m[3].x = x*z*t + y*s

    m[1].y = y*x*t + z*s
    m[2].y = y*y*t + c
    m[3].y = y*z*t - x*s

    m[1].z = z*x*t - y*s
    m[2].z = z*y*t + x*s
    m[3].z = z*z*t + c
end

Добавлено (19 Февраля 2018, 15:22)
---------------------------------------------
как видно я получаю всего по 3. Какие X Y Z из 3 мне нужно возвращать для поворота

drcrackДата: Понедельник, 19 Февраля 2018, 18:22 | Сообщение # 12
старожил
Сейчас нет на сайте
Цитата
Но если по делу, то я уже начал писать себе свою библиотеку с матрицей.

Видимо тебя больше интересует математика, чем игры
В общем, через полгода расскажешь, как успехи :D
Форум игроделов » Программирование » Скриптовые языки программирования » поворот (помогите понять)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг