Kenix Posted March 30, 2012 Share Posted March 30, 2012 Вообще появилась идея написать конвертер кватернионов в углы эйлера.( ipl -> mta ) getEulerFromQuaternion = function( tQuaternion ) local tResult = { 0, 0, 0 } local q0 = tQuaternion[1] local q1 = tQuaternion[2] local q2 = tQuaternion[3] local q3 = tQuaternion[4] tResult[1] = math.deg( math.atan2( 2 * ( q0 * q1 + q2 * q3 ), 1 - 2 * ( q1 ^ 2 + q2 ^ 2 ) ) ) tResult[2] = math.deg( math.asin( 2 * ( q0 * q2 - q3 * q1 ) ) ) tResult[3] = math.deg( math.atan2( 2 * ( q0 * q3 + q1 * q2 ), 1 - 2 * ( q2 ^ 2 + q3 ^ 2 ) ) ) return tResult end Всё бы хорошо, но углы не совсем правильные. Кватернионы 0, 0, -0.7398733497, 0.6727461815 Мап едитор: RX: 180 RY: 180 RZ: 275.441 Функция: RX: -95.44 RY: -0 RZ: 180 Разница очевидная. Помогите, математики Link to comment
MX_Master Posted March 30, 2012 Share Posted March 30, 2012 Помогите математики тогда уж ставь запятую между словами ((: я думаю, ты поймешь там все - http://www.euclideanspace.com/maths/geo ... onToEuler/ Link to comment
Fro Posted March 31, 2012 Share Posted March 31, 2012 function getEulerFromQuaternion5( tQuaternion ) local x, y, z = 0, 0, 0 local qx = tQuaternion[1] local qy = tQuaternion[2] local qz = tQuaternion[3] local qw = tQuaternion[4] local sqw = qw * qw local sqx = qx * qx local sqy = qy * qy local sqz = qz * qz local unit = sqx + sqy + sqz + sqw local test = qx * qw - qy * qz if test > 0.4999999 * unit then x = math.pi / 2 y = 2.0 * math.atan2( qy, qw ) z = 0 elseif test < -0.4999999 * unit then x = -( math.pi / 2 ) y = 2.0 * math.atan2( qy, qw ) z = 0 else x = math.asin( 2 * test ) y = math.atan2( 2 * ( qx * qz + qy * qw ), 1 - 2 * ( sqy + sqx ) ) z = math.atan2( 2 * ( qx * qy + qz * qw ), 1 - 2 * ( sqx + sqz ) ) end return math.deg( x ), math.deg( y ), math.deg( z ) end print( getEulerFromQuaternion5( { 0, 0, -0.7398733497, 0.6727461815 } ) ) В некоторых случаях надо использовать math.abs и прибавлять 180. Link to comment
[EFO]Kesha_F1 Posted September 17, 2012 Share Posted September 17, 2012 Тема так и заброшена? Нет ли готовых решений и самое главное - современных решений по конвертации ipl -> map? Link to comment
lil Toady Posted September 18, 2012 Share Posted September 18, 2012 На сколько я помню, проблема в том что нету единой формулы для конвертации. Порядок расчета зависит от системы координат и главной оси, не везде Z - это вверх. arc_ сто пудов знает как решать, он тот еще математик Link to comment
[EFO]Kesha_F1 Posted September 18, 2012 Share Posted September 18, 2012 На сколько я помню, проблема в том что нету единой формулы для конвертации. Порядок расчета зависит от системы координат и главной оси, не везде Z - это вверх.arc_ сто пудов знает как решать, он тот еще математик А как с ним связаться и сообщить о том, что это решение сильно поможет при конвертации карт в МТА? Link to comment
Other Languages Moderators Disinterpreter Posted September 18, 2012 Other Languages Moderators Share Posted September 18, 2012 На сколько я помню, проблема в том что нету единой формулы для конвертации. Порядок расчета зависит от системы координат и главной оси, не везде Z - это вверх.arc_ сто пудов знает как решать, он тот еще математик А как с ним связаться и сообщить о том, что это решение сильно поможет при конвертации карт в МТА? irc наверно, вся MTA Team там тусуется. Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now