<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.multitheftauto.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Alexaxel705</id>
	<title>Multi Theft Auto: Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.multitheftauto.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Alexaxel705"/>
	<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/wiki/Special:Contributions/Alexaxel705"/>
	<updated>2026-04-08T14:21:48Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.3</generator>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Quaternion&amp;diff=51366</id>
		<title>Quaternion</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Quaternion&amp;diff=51366"/>
		<updated>2017-06-26T11:45:47Z</updated>

		<summary type="html">&lt;p&gt;Alexaxel705: /* Syntax */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Useful Function}}&lt;br /&gt;
&amp;lt;lowercasetitle&amp;gt;Quaternion&amp;lt;/lowercasetitle&amp;gt;&lt;br /&gt;
__NOTOC__&lt;br /&gt;
Quaternion is used to define the rotation angle by GTA:SA game engine, which is different from MTASA which is based on Euler angle&lt;br /&gt;
This function returns the Euler angle(rotx,roty,rotz) from quaternion(rotx,roty,rotz,rotw).this is non-mtasa function, user need to put this function in your lua scripts.&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
float, float, float fromQuaternion(rotx,roty,rotz,rotw)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Required Arguments===&lt;br /&gt;
* '''rotx,roty,rotz,rotw''': The quaternion from IPL file&lt;br /&gt;
&lt;br /&gt;
===Returns===&lt;br /&gt;
* '''rotx,roty,rotz''': The Euler angle&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
&amp;lt;section name=&amp;quot;Server- and/or clientside Script&amp;quot; class=&amp;quot;both&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local identityMatrix = {&lt;br /&gt;
	[1] = {1, 0, 0},&lt;br /&gt;
	[2] = {0, 1, 0},&lt;br /&gt;
	[3] = {0, 0, 1}&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function QuaternionTo3x3(x,y,z,w)&lt;br /&gt;
	local matrix3x3 = {[1] = {}, [2] = {}, [3] = {}}&lt;br /&gt;
 &lt;br /&gt;
	local symetricalMatrix = {&lt;br /&gt;
		[1] = {(-(y*y)-(z*z)), x*y, x*z},&lt;br /&gt;
		[2] = {x*y, (-(x*x)-(z*z)), y*z},&lt;br /&gt;
		[3] = {x*z, y*z, (-(x*x)-(y*y))} &lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local antiSymetricalMatrix = {&lt;br /&gt;
		[1] = {0, -z, y},&lt;br /&gt;
		[2] = {z, 0, -x},&lt;br /&gt;
		[3] = {-y, x, 0}&lt;br /&gt;
	}&lt;br /&gt;
 &lt;br /&gt;
	for i = 1, 3 do &lt;br /&gt;
		for j = 1, 3 do&lt;br /&gt;
			matrix3x3[i][j] = identityMatrix[i][j]+(2*symetricalMatrix[i][j])+(2*w*antiSymetricalMatrix[i][j])&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return matrix3x3&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function getEulerAnglesFromMatrix(x1,y1,z1,x2,y2,z2,x3,y3,z3)&lt;br /&gt;
	local nz1,nz2,nz3&lt;br /&gt;
	nz3 = math.sqrt(x2*x2+y2*y2)&lt;br /&gt;
	nz1 = -x2*z2/nz3&lt;br /&gt;
	nz2 = -y2*z2/nz3&lt;br /&gt;
	local vx = nz1*x1+nz2*y1+nz3*z1&lt;br /&gt;
	local vz = nz1*x3+nz2*y3+nz3*z3&lt;br /&gt;
	return math.deg(math.asin(z2)),-math.deg(math.atan2(vx,vz)),-math.deg(math.atan2(x2,y2))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function fromQuaternion(x,y,z,w) &lt;br /&gt;
	local matrix = QuaternionTo3x3(x,y,z,w)&lt;br /&gt;
	local ox,oy,oz = getEulerAnglesFromMatrix(&lt;br /&gt;
		matrix[1][1], matrix[1][2], matrix[1][3], &lt;br /&gt;
		matrix[2][1], matrix[2][2], matrix[2][3],&lt;br /&gt;
		matrix[3][1], matrix[3][2], matrix[3][3]&lt;br /&gt;
	)&lt;br /&gt;
&lt;br /&gt;
	return ox,oy,oz&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
&amp;lt;section name=&amp;quot;Server- and/or clientside Script&amp;quot; class=&amp;quot;both&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local identityMatrix = {&lt;br /&gt;
	[1] = {1, 0, 0},&lt;br /&gt;
	[2] = {0, 1, 0},&lt;br /&gt;
	[3] = {0, 0, 1}&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function QuaternionTo3x3(x,y,z,w)&lt;br /&gt;
	local matrix3x3 = {[1] = {}, [2] = {}, [3] = {}}&lt;br /&gt;
 &lt;br /&gt;
	local symetricalMatrix = {&lt;br /&gt;
		[1] = {(-(y*y)-(z*z)), x*y, x*z},&lt;br /&gt;
		[2] = {x*y, (-(x*x)-(z*z)), y*z},&lt;br /&gt;
		[3] = {x*z, y*z, (-(x*x)-(y*y))} &lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local antiSymetricalMatrix = {&lt;br /&gt;
		[1] = {0, -z, y},&lt;br /&gt;
		[2] = {z, 0, -x},&lt;br /&gt;
		[3] = {-y, x, 0}&lt;br /&gt;
	}&lt;br /&gt;
 &lt;br /&gt;
	for i = 1, 3 do &lt;br /&gt;
		for j = 1, 3 do&lt;br /&gt;
			matrix3x3[i][j] = identityMatrix[i][j]+(2*symetricalMatrix[i][j])+(2*w*antiSymetricalMatrix[i][j])&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return matrix3x3&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function getEulerAnglesFromMatrix(x1,y1,z1,x2,y2,z2,x3,y3,z3)&lt;br /&gt;
	local nz1,nz2,nz3&lt;br /&gt;
	nz3 = math.sqrt(x2*x2+y2*y2)&lt;br /&gt;
	nz1 = -x2*z2/nz3&lt;br /&gt;
	nz2 = -y2*z2/nz3&lt;br /&gt;
	local vx = nz1*x1+nz2*y1+nz3*z1&lt;br /&gt;
	local vz = nz1*x3+nz2*y3+nz3*z3&lt;br /&gt;
	return math.deg(math.asin(z2)),-math.deg(math.atan2(vx,vz)),-math.deg(math.atan2(x2,y2))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function fromQuaternion(x,y,z,w) &lt;br /&gt;
	local matrix = QuaternionTo3x3(x,y,z,w)&lt;br /&gt;
	local ox,oy,oz = getEulerAnglesFromMatrix(&lt;br /&gt;
		matrix[1][1], matrix[1][2], matrix[1][3], &lt;br /&gt;
		matrix[2][1], matrix[2][2], matrix[2][3],&lt;br /&gt;
		matrix[3][1], matrix[3][2], matrix[3][3]&lt;br /&gt;
	)&lt;br /&gt;
&lt;br /&gt;
	return ox,oy,oz&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local rotx, roty, rotx, rotw = 0, 0, 0.190809, 0.9816272  -- you can read the Quaternion from IPL file&lt;br /&gt;
createObject(1337, 5540.6654, 1020.55122, 1240.545, fromQuaternion(rotx, roty, rotx, rotw))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Author: KawaNoII (http://www.chinesemta.com)&lt;br /&gt;
alexaxel705 (alexaxel705@gmail.com)&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
{{Useful_Functions}}&lt;/div&gt;</summary>
		<author><name>Alexaxel705</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=User:Alexaxel705&amp;diff=51365</id>
		<title>User:Alexaxel705</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=User:Alexaxel705&amp;diff=51365"/>
		<updated>2017-06-26T11:45:12Z</updated>

		<summary type="html">&lt;p&gt;Alexaxel705: Created page with &amp;quot;'''Привет!'''&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Привет!'''&lt;/div&gt;</summary>
		<author><name>Alexaxel705</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Quaternion&amp;diff=51364</id>
		<title>Quaternion</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Quaternion&amp;diff=51364"/>
		<updated>2017-06-26T11:42:53Z</updated>

		<summary type="html">&lt;p&gt;Alexaxel705: /* Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Useful Function}}&lt;br /&gt;
&amp;lt;lowercasetitle&amp;gt;Quaternion&amp;lt;/lowercasetitle&amp;gt;&lt;br /&gt;
__NOTOC__&lt;br /&gt;
Quaternion is used to define the rotation angle by GTA:SA game engine, which is different from MTASA which is based on Euler angle&lt;br /&gt;
This function returns the Euler angle(rotx,roty,rotz) from quaternion(rotx,roty,rotz,rotw).this is non-mtasa function, user need to put this function in your lua scripts.&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
float, float, float fromQuaternion ( rotx,roty,rotz,rotw)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Required Arguments===&lt;br /&gt;
* '''rotx,roty,rotz,rotw''': The quaternion from IPL file&lt;br /&gt;
&lt;br /&gt;
===Returns===&lt;br /&gt;
* '''rotx,roty,rotz''': The Euler angle&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
&amp;lt;section name=&amp;quot;Server- and/or clientside Script&amp;quot; class=&amp;quot;both&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local identityMatrix = {&lt;br /&gt;
	[1] = {1, 0, 0},&lt;br /&gt;
	[2] = {0, 1, 0},&lt;br /&gt;
	[3] = {0, 0, 1}&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function QuaternionTo3x3(x,y,z,w)&lt;br /&gt;
	local matrix3x3 = {[1] = {}, [2] = {}, [3] = {}}&lt;br /&gt;
 &lt;br /&gt;
	local symetricalMatrix = {&lt;br /&gt;
		[1] = {(-(y*y)-(z*z)), x*y, x*z},&lt;br /&gt;
		[2] = {x*y, (-(x*x)-(z*z)), y*z},&lt;br /&gt;
		[3] = {x*z, y*z, (-(x*x)-(y*y))} &lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local antiSymetricalMatrix = {&lt;br /&gt;
		[1] = {0, -z, y},&lt;br /&gt;
		[2] = {z, 0, -x},&lt;br /&gt;
		[3] = {-y, x, 0}&lt;br /&gt;
	}&lt;br /&gt;
 &lt;br /&gt;
	for i = 1, 3 do &lt;br /&gt;
		for j = 1, 3 do&lt;br /&gt;
			matrix3x3[i][j] = identityMatrix[i][j]+(2*symetricalMatrix[i][j])+(2*w*antiSymetricalMatrix[i][j])&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return matrix3x3&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function getEulerAnglesFromMatrix(x1,y1,z1,x2,y2,z2,x3,y3,z3)&lt;br /&gt;
	local nz1,nz2,nz3&lt;br /&gt;
	nz3 = math.sqrt(x2*x2+y2*y2)&lt;br /&gt;
	nz1 = -x2*z2/nz3&lt;br /&gt;
	nz2 = -y2*z2/nz3&lt;br /&gt;
	local vx = nz1*x1+nz2*y1+nz3*z1&lt;br /&gt;
	local vz = nz1*x3+nz2*y3+nz3*z3&lt;br /&gt;
	return math.deg(math.asin(z2)),-math.deg(math.atan2(vx,vz)),-math.deg(math.atan2(x2,y2))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function fromQuaternion(x,y,z,w) &lt;br /&gt;
	local matrix = QuaternionTo3x3(x,y,z,w)&lt;br /&gt;
	local ox,oy,oz = getEulerAnglesFromMatrix(&lt;br /&gt;
		matrix[1][1], matrix[1][2], matrix[1][3], &lt;br /&gt;
		matrix[2][1], matrix[2][2], matrix[2][3],&lt;br /&gt;
		matrix[3][1], matrix[3][2], matrix[3][3]&lt;br /&gt;
	)&lt;br /&gt;
&lt;br /&gt;
	return ox,oy,oz&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
&amp;lt;section name=&amp;quot;Server- and/or clientside Script&amp;quot; class=&amp;quot;both&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local identityMatrix = {&lt;br /&gt;
	[1] = {1, 0, 0},&lt;br /&gt;
	[2] = {0, 1, 0},&lt;br /&gt;
	[3] = {0, 0, 1}&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function QuaternionTo3x3(x,y,z,w)&lt;br /&gt;
	local matrix3x3 = {[1] = {}, [2] = {}, [3] = {}}&lt;br /&gt;
 &lt;br /&gt;
	local symetricalMatrix = {&lt;br /&gt;
		[1] = {(-(y*y)-(z*z)), x*y, x*z},&lt;br /&gt;
		[2] = {x*y, (-(x*x)-(z*z)), y*z},&lt;br /&gt;
		[3] = {x*z, y*z, (-(x*x)-(y*y))} &lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local antiSymetricalMatrix = {&lt;br /&gt;
		[1] = {0, -z, y},&lt;br /&gt;
		[2] = {z, 0, -x},&lt;br /&gt;
		[3] = {-y, x, 0}&lt;br /&gt;
	}&lt;br /&gt;
 &lt;br /&gt;
	for i = 1, 3 do &lt;br /&gt;
		for j = 1, 3 do&lt;br /&gt;
			matrix3x3[i][j] = identityMatrix[i][j]+(2*symetricalMatrix[i][j])+(2*w*antiSymetricalMatrix[i][j])&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return matrix3x3&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function getEulerAnglesFromMatrix(x1,y1,z1,x2,y2,z2,x3,y3,z3)&lt;br /&gt;
	local nz1,nz2,nz3&lt;br /&gt;
	nz3 = math.sqrt(x2*x2+y2*y2)&lt;br /&gt;
	nz1 = -x2*z2/nz3&lt;br /&gt;
	nz2 = -y2*z2/nz3&lt;br /&gt;
	local vx = nz1*x1+nz2*y1+nz3*z1&lt;br /&gt;
	local vz = nz1*x3+nz2*y3+nz3*z3&lt;br /&gt;
	return math.deg(math.asin(z2)),-math.deg(math.atan2(vx,vz)),-math.deg(math.atan2(x2,y2))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function fromQuaternion(x,y,z,w) &lt;br /&gt;
	local matrix = QuaternionTo3x3(x,y,z,w)&lt;br /&gt;
	local ox,oy,oz = getEulerAnglesFromMatrix(&lt;br /&gt;
		matrix[1][1], matrix[1][2], matrix[1][3], &lt;br /&gt;
		matrix[2][1], matrix[2][2], matrix[2][3],&lt;br /&gt;
		matrix[3][1], matrix[3][2], matrix[3][3]&lt;br /&gt;
	)&lt;br /&gt;
&lt;br /&gt;
	return ox,oy,oz&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local rotx, roty, rotx, rotw = 0, 0, 0.190809, 0.9816272  -- you can read the Quaternion from IPL file&lt;br /&gt;
createObject(1337, 5540.6654, 1020.55122, 1240.545, fromQuaternion(rotx, roty, rotx, rotw))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Author: KawaNoII (http://www.chinesemta.com)&lt;br /&gt;
alexaxel705 (alexaxel705@gmail.com)&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
{{Useful_Functions}}&lt;/div&gt;</summary>
		<author><name>Alexaxel705</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Quaternion&amp;diff=51363</id>
		<title>Quaternion</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Quaternion&amp;diff=51363"/>
		<updated>2017-06-26T11:40:51Z</updated>

		<summary type="html">&lt;p&gt;Alexaxel705: /* Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Useful Function}}&lt;br /&gt;
&amp;lt;lowercasetitle&amp;gt;Quaternion&amp;lt;/lowercasetitle&amp;gt;&lt;br /&gt;
__NOTOC__&lt;br /&gt;
Quaternion is used to define the rotation angle by GTA:SA game engine, which is different from MTASA which is based on Euler angle&lt;br /&gt;
This function returns the Euler angle(rotx,roty,rotz) from quaternion(rotx,roty,rotz,rotw).this is non-mtasa function, user need to put this function in your lua scripts.&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
float, float, float fromQuaternion ( rotx,roty,rotz,rotw)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Required Arguments===&lt;br /&gt;
* '''rotx,roty,rotz,rotw''': The quaternion from IPL file&lt;br /&gt;
&lt;br /&gt;
===Returns===&lt;br /&gt;
* '''rotx,roty,rotz''': The Euler angle&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
&amp;lt;section name=&amp;quot;Server- and/or clientside Script&amp;quot; class=&amp;quot;both&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local identityMatrix = {&lt;br /&gt;
	[1] = {1, 0, 0},&lt;br /&gt;
	[2] = {0, 1, 0},&lt;br /&gt;
	[3] = {0, 0, 1}&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function QuaternionTo3x3(x,y,z,w)&lt;br /&gt;
	local matrix3x3 = {[1] = {}, [2] = {}, [3] = {}}&lt;br /&gt;
 &lt;br /&gt;
	local symetricalMatrix = {&lt;br /&gt;
		[1] = {(-(y*y)-(z*z)), x*y, x*z},&lt;br /&gt;
		[2] = {x*y, (-(x*x)-(z*z)), y*z},&lt;br /&gt;
		[3] = {x*z, y*z, (-(x*x)-(y*y))} &lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local antiSymetricalMatrix = {&lt;br /&gt;
		[1] = {0, -z, y},&lt;br /&gt;
		[2] = {z, 0, -x},&lt;br /&gt;
		[3] = {-y, x, 0}&lt;br /&gt;
	}&lt;br /&gt;
 &lt;br /&gt;
	for i = 1, 3 do &lt;br /&gt;
		for j = 1, 3 do&lt;br /&gt;
			matrix3x3[i][j] = identityMatrix[i][j]+(2*symetricalMatrix[i][j])+(2*w*antiSymetricalMatrix[i][j])&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return matrix3x3&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function getEulerAnglesFromMatrix(x1,y1,z1,x2,y2,z2,x3,y3,z3)&lt;br /&gt;
	local nz1,nz2,nz3&lt;br /&gt;
	nz3 = math.sqrt(x2*x2+y2*y2)&lt;br /&gt;
	nz1 = -x2*z2/nz3&lt;br /&gt;
	nz2 = -y2*z2/nz3&lt;br /&gt;
	local vx = nz1*x1+nz2*y1+nz3*z1&lt;br /&gt;
	local vz = nz1*x3+nz2*y3+nz3*z3&lt;br /&gt;
	return math.deg(math.asin(z2)),-math.deg(math.atan2(vx,vz)),-math.deg(math.atan2(x2,y2))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function fromQuaternion(x,y,z,w) &lt;br /&gt;
	local matrix = QuaternionTo3x3(x,y,z,w)&lt;br /&gt;
	local ox,oy,oz = getEulerAnglesFromMatrix(&lt;br /&gt;
		matrix[1][1], matrix[1][2], matrix[1][3], &lt;br /&gt;
		matrix[2][1], matrix[2][2], matrix[2][3],&lt;br /&gt;
		matrix[3][1], matrix[3][2], matrix[3][3]&lt;br /&gt;
	)&lt;br /&gt;
&lt;br /&gt;
	return ox,oy,oz&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
&amp;lt;section name=&amp;quot;Server- and/or clientside Script&amp;quot; class=&amp;quot;both&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local identityMatrix = {&lt;br /&gt;
	[1] = {1, 0, 0},&lt;br /&gt;
	[2] = {0, 1, 0},&lt;br /&gt;
	[3] = {0, 0, 1}&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function QuaternionTo3x3(x,y,z,w)&lt;br /&gt;
	local matrix3x3 = {[1] = {}, [2] = {}, [3] = {}}&lt;br /&gt;
 &lt;br /&gt;
	local symetricalMatrix = {&lt;br /&gt;
		[1] = {(-(y*y)-(z*z)), x*y, x*z},&lt;br /&gt;
		[2] = {x*y, (-(x*x)-(z*z)), y*z},&lt;br /&gt;
		[3] = {x*z, y*z, (-(x*x)-(y*y))} &lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local antiSymetricalMatrix = {&lt;br /&gt;
		[1] = {0, -z, y},&lt;br /&gt;
		[2] = {z, 0, -x},&lt;br /&gt;
		[3] = {-y, x, 0}&lt;br /&gt;
	}&lt;br /&gt;
 &lt;br /&gt;
	for i = 1, 3 do &lt;br /&gt;
		for j = 1, 3 do&lt;br /&gt;
			matrix3x3[i][j] = identityMatrix[i][j]+(2*symetricalMatrix[i][j])+(2*w*antiSymetricalMatrix[i][j])&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return matrix3x3&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function getEulerAnglesFromMatrix(x1,y1,z1,x2,y2,z2,x3,y3,z3)&lt;br /&gt;
	local nz1,nz2,nz3&lt;br /&gt;
	nz3 = math.sqrt(x2*x2+y2*y2)&lt;br /&gt;
	nz1 = -x2*z2/nz3&lt;br /&gt;
	nz2 = -y2*z2/nz3&lt;br /&gt;
	local vx = nz1*x1+nz2*y1+nz3*z1&lt;br /&gt;
	local vz = nz1*x3+nz2*y3+nz3*z3&lt;br /&gt;
	return math.deg(math.asin(z2)),-math.deg(math.atan2(vx,vz)),-math.deg(math.atan2(x2,y2))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function fromQuaternion(x,y,z,w) &lt;br /&gt;
	local matrix = QuaternionTo3x3(x,y,z,w)&lt;br /&gt;
	local ox,oy,oz = getEulerAnglesFromMatrix(&lt;br /&gt;
		matrix[1][1], matrix[1][2], matrix[1][3], &lt;br /&gt;
		matrix[2][1], matrix[2][2], matrix[2][3],&lt;br /&gt;
		matrix[3][1], matrix[3][2], matrix[3][3]&lt;br /&gt;
	)&lt;br /&gt;
&lt;br /&gt;
	return ox,oy,oz&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local rotx, roty, rotx, rotw = 0, 0, 0.190809, 0.9816272  -- you can read the Quaternion from IPL file&lt;br /&gt;
createObject(1337, 5540.6654, 1020.55122, 1240.545,fromQuaternion(rotx, roty, rotx, rotw))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Author: KawaNoII (http://www.chinesemta.com)&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
{{Useful_Functions}}&lt;/div&gt;</summary>
		<author><name>Alexaxel705</name></author>
	</entry>
	<entry>
		<id>https://wiki.multitheftauto.com/index.php?title=Quaternion&amp;diff=51362</id>
		<title>Quaternion</title>
		<link rel="alternate" type="text/html" href="https://wiki.multitheftauto.com/index.php?title=Quaternion&amp;diff=51362"/>
		<updated>2017-06-26T11:39:36Z</updated>

		<summary type="html">&lt;p&gt;Alexaxel705: /* Code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Useful Function}}&lt;br /&gt;
&amp;lt;lowercasetitle&amp;gt;Quaternion&amp;lt;/lowercasetitle&amp;gt;&lt;br /&gt;
__NOTOC__&lt;br /&gt;
Quaternion is used to define the rotation angle by GTA:SA game engine, which is different from MTASA which is based on Euler angle&lt;br /&gt;
This function returns the Euler angle(rotx,roty,rotz) from quaternion(rotx,roty,rotz,rotw).this is non-mtasa function, user need to put this function in your lua scripts.&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
float, float, float fromQuaternion ( rotx,roty,rotz,rotw)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Required Arguments===&lt;br /&gt;
* '''rotx,roty,rotz,rotw''': The quaternion from IPL file&lt;br /&gt;
&lt;br /&gt;
===Returns===&lt;br /&gt;
* '''rotx,roty,rotz''': The Euler angle&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
&amp;lt;section name=&amp;quot;Server- and/or clientside Script&amp;quot; class=&amp;quot;both&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local identityMatrix = {&lt;br /&gt;
	[1] = {1, 0, 0},&lt;br /&gt;
	[2] = {0, 1, 0},&lt;br /&gt;
	[3] = {0, 0, 1}&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
function QuaternionTo3x3(x,y,z,w)&lt;br /&gt;
	local matrix3x3 = {[1] = {}, [2] = {}, [3] = {}}&lt;br /&gt;
 &lt;br /&gt;
	local symetricalMatrix = {&lt;br /&gt;
		[1] = {(-(y*y)-(z*z)), x*y, x*z},&lt;br /&gt;
		[2] = {x*y, (-(x*x)-(z*z)), y*z},&lt;br /&gt;
		[3] = {x*z, y*z, (-(x*x)-(y*y))} &lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local antiSymetricalMatrix = {&lt;br /&gt;
		[1] = {0, -z, y},&lt;br /&gt;
		[2] = {z, 0, -x},&lt;br /&gt;
		[3] = {-y, x, 0}&lt;br /&gt;
	}&lt;br /&gt;
 &lt;br /&gt;
	for i = 1, 3 do &lt;br /&gt;
		for j = 1, 3 do&lt;br /&gt;
			matrix3x3[i][j] = identityMatrix[i][j]+(2*symetricalMatrix[i][j])+(2*w*antiSymetricalMatrix[i][j])&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return matrix3x3&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function getEulerAnglesFromMatrix(x1,y1,z1,x2,y2,z2,x3,y3,z3)&lt;br /&gt;
	local nz1,nz2,nz3&lt;br /&gt;
	nz3 = math.sqrt(x2*x2+y2*y2)&lt;br /&gt;
	nz1 = -x2*z2/nz3&lt;br /&gt;
	nz2 = -y2*z2/nz3&lt;br /&gt;
	local vx = nz1*x1+nz2*y1+nz3*z1&lt;br /&gt;
	local vz = nz1*x3+nz2*y3+nz3*z3&lt;br /&gt;
	return math.deg(math.asin(z2)),-math.deg(math.atan2(vx,vz)),-math.deg(math.atan2(x2,y2))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function fromQuaternion(x,y,z,w) &lt;br /&gt;
	local matrix = QuaternionTo3x3(x,y,z,w)&lt;br /&gt;
	local ox,oy,oz = getEulerAnglesFromMatrix(&lt;br /&gt;
		matrix[1][1], matrix[1][2], matrix[1][3], &lt;br /&gt;
		matrix[2][1], matrix[2][2], matrix[2][3],&lt;br /&gt;
		matrix[3][1], matrix[3][2], matrix[3][3]&lt;br /&gt;
	)&lt;br /&gt;
&lt;br /&gt;
	return ox,oy,oz&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
&amp;lt;section name=&amp;quot;Server- and/or clientside Script&amp;quot; class=&amp;quot;both&amp;quot; show=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
function math.arad(number)&lt;br /&gt;
	if type(number) == &amp;quot;number&amp;quot; then&lt;br /&gt;
		return (number/(math.pi*2))*360&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function fromQuaternion(x,y,z,w)&lt;br /&gt;
	local heading = math.atan2(2*(w*x+y*z),1-2*(x^2+y^2))&lt;br /&gt;
	local attitude = math.asin(w*y-z*x) &lt;br /&gt;
	local bank = math.atan2(2*(w*z+x*y),1-2*(y^2+z^2))&lt;br /&gt;
	return math.arad(heading),math.arad(attitude),math.arad(bank)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local rotx, roty, rotx, rotw = 233,666,888,999  -- you can read the Quaternion from IPL file&lt;br /&gt;
createObject ( 1337, 5540.6654, 1020.55122, 1240.545,fromQuaternion(rotx, roty, rotx, rotw))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Author: KawaNoII (http://www.chinesemta.com)&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
{{Useful_Functions}}&lt;/div&gt;</summary>
		<author><name>Alexaxel705</name></author>
	</entry>
</feed>