﻿<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://wiki.blender.jp/index.php?action=history&amp;feed=atom&amp;title=Dev%3ASource%2FMathematics%2FMath_Library</id>
	<title>Dev:Source/Mathematics/Math Library - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.blender.jp/index.php?action=history&amp;feed=atom&amp;title=Dev%3ASource%2FMathematics%2FMath_Library"/>
	<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=Dev:Source/Mathematics/Math_Library&amp;action=history"/>
	<updated>2026-06-10T19:41:48Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.31.0</generator>
	<entry>
		<id>https://wiki.blender.jp/index.php?title=Dev:Source/Mathematics/Math_Library&amp;diff=114489&amp;oldid=prev</id>
		<title>Yamyam: 1版 をインポートしました</title>
		<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=Dev:Source/Mathematics/Math_Library&amp;diff=114489&amp;oldid=prev"/>
		<updated>2018-06-28T19:52:03Z</updated>

		<summary type="html">&lt;p&gt;1版 をインポートしました&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ja&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← 古い版&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;2018年6月28日 (木) 19:52時点における版&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;ja&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(相違点なし)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Yamyam</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.blender.jp/index.php?title=Dev:Source/Mathematics/Math_Library&amp;diff=114488&amp;oldid=prev</id>
		<title>2011年12月16日 (金) 22:58にwiki&gt;Brechtによる</title>
		<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=Dev:Source/Mathematics/Math_Library&amp;diff=114488&amp;oldid=prev"/>
		<updated>2011-12-16T22:58:25Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Math Library =&lt;br /&gt;
&lt;br /&gt;
There are various math libraries in Blender, the one used in all C code is located in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
source/blender/blenlib/BLI_math.h&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Gotchas ==&lt;br /&gt;
&lt;br /&gt;
==== Matrix Storage ====&lt;br /&gt;
&lt;br /&gt;
Matrices are stored in column major order, following OpenGL. Note that this is different than the standard mathematical notation, which is row major. That means Blender matrices are indexed as follows:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
element = M[column][row];&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
| M[0][0] M[1][0] M[2][0] M[3][0] | &lt;br /&gt;
| M[0][1] M[1][1] M[2][1] M[3][1] |&lt;br /&gt;
| M[0][2] M[1][2] M[2][2] M[3][2] |&lt;br /&gt;
| M[0][3] M[1][3] M[2][3] M[3][3] |&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And for example the translation component of a 4x4 transformation matrix is:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
translation = M[3];&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that some of the C++ math libraries use row major convention.&lt;br /&gt;
&lt;br /&gt;
==== Matrix-Vector Multiplication ====&lt;br /&gt;
&lt;br /&gt;
Spatial points and vectors are assumed to be column vectors, so that matrix-vector multiplication is written as:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
mul_v3_m3v3(a, M, b); // a = M * b&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is also an implicit use of homogenous coordinates when multiplying 4x4 matrices with 3 dimensional vectors, we then assume there is w component with value 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
mul_v3_m4v3(a, M, b); // a = M * b&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
| a[0] |   | M[0][0] M[1][0] M[2][0] M[3][0] |  | b[0] |&lt;br /&gt;
| a[1] |   | M[0][1] M[1][1] M[2][1] M[3][1] |  | b[1] |&lt;br /&gt;
| a[2] | = | M[0][2] M[1][2] M[2][2] M[3][2] |  | b[2] |&lt;br /&gt;
| 1.0  |   | M[0][3] M[1][3] M[2][3] M[3][3] |  | 1.0  |&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Matrix-Matrix Multiplication ====&lt;br /&gt;
&lt;br /&gt;
Matrix multiplication follows typical math notation:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
mult_m4_m4m4(R, A, B); // R = A * B&lt;br /&gt;
mult_m3_m3m4(R, A, B); // R = A * B&lt;br /&gt;
mul_m3_m3m3(R, A, B); // R = A * B&lt;br /&gt;
mul_serie_m4(R, A, B, 0, 0, 0, 0, 0, 0); // R = A * B&lt;br /&gt;
mul_serie_m4(R, A, B, C, D, 0, 0, 0, 0); // R = A * B * C * D&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So that:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
(A * B) * v = A * (B * v)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is some inconsistency in the naming (mult_ vs mul_), this is due to a fix for previously wrong argument order. &lt;br /&gt;
&lt;br /&gt;
==== Quaternion Storage ====&lt;br /&gt;
&lt;br /&gt;
Quaternions are stored in order (w, x, y, z), e.g.:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float sine = sin(angle);&lt;br /&gt;
float cosine = cos(angle);&lt;br /&gt;
float quat[4] = {sine, cosine*x, cosine*y, cosine*z};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Abbreviations ==&lt;br /&gt;
&lt;br /&gt;
==== Types ====&lt;br /&gt;
&lt;br /&gt;
* fl = float&lt;br /&gt;
* db = double&lt;br /&gt;
* v2 = vec2 = vector 2&lt;br /&gt;
* v3 = vec3 = vector 3&lt;br /&gt;
* v4 = vec4 = vector 4&lt;br /&gt;
* qt = quat = quaternion&lt;br /&gt;
* dq = dquat = dual quaternion&lt;br /&gt;
* m2 = mat2 = matrix 2x2&lt;br /&gt;
* m3 = mat3 = matrix 3x3&lt;br /&gt;
* m4 = mat4 = matrix 4x4&lt;br /&gt;
* eul = euler rotation&lt;br /&gt;
* eulO = euler with order&lt;br /&gt;
&lt;br /&gt;
==== Operations ====&lt;br /&gt;
&lt;br /&gt;
* sub = subtract&lt;br /&gt;
* mul = multiply&lt;br /&gt;
* madd = multiply &amp;amp; add&lt;br /&gt;
* div = divide&lt;br /&gt;
* len = length&lt;br /&gt;
* interp = interpolate&lt;br /&gt;
* mid = middle&lt;/div&gt;</summary>
		<author><name>wiki&gt;Brecht</name></author>
		
	</entry>
</feed>