matrix.html 12 KB

123456789101112131415161718192021222324252627282930
  1. <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]--><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="Asciidoctor 1.5.4"><title>matrix</title><link rel="stylesheet" href="./asciidoctor.css">
  2. <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.5.0/css/font-awesome.min.css">
  3. <link rel="stylesheet" href="./coderay-asciidoctor.css"><link rel="stylesheet" href="https://cdn.jsdelivr.net/docsearch.js/2/docsearch.min.css"></head><body class="article toc2 toc-left"><div id="header"><div id="toolbar"><a href="https://github.com/jMonkeyEngine/wiki/edit/master/src/docs/asciidoc/jme3/matrix.adoc"><i class="fa fa-pencil-square" aria-hidden="true"></i></a><a href="https://github.com/jMonkeyEngine/wiki/new/master/src/docs/asciidoc/jme3/"><i class="fa fa-plus-square" aria-hidden="true"></i></a><input dir="auto" style="position: relative; vertical-align: top;" spellcheck="false" autocomplete="off" class="searchbox__input aa-input" id="doc-search" name="search" placeholder="Search in the doc" required="required" type="search"></div><h1>matrix</h1><div class="details"><span class="author" id="author"></span><br><span id="revnumber">version ,</span> <span id="revdate">2016/03/17 20:48</span></div><div id="toc" class="toc2"><div id="toctitle">Table of Contents</div><ul class="sectlevel1"><li><a href="#matrix">Matrix</a><ul class="sectlevel2"><li><a href="#definition">Definition</a></li><li><a href="#transformations">Transformations</a></li><li><a href="#jme-class">jME Class</a></li></ul></li></ul></div></div><div id="content"><div class="sect2"><h3 id="matrix">Matrix</h3><div class="paragraph"><p>See <a href="http://javadoc.jmonkeyengine.org/com/jme3/math/Matrix3f.html">Javadoc of Matrix3f</a> and <a href="http://javadoc.jmonkeyengine.org/com/jme3/math/Matrix4f.html">Javadoc of Matrix4f</a></p></div>
  4. <div class="sect2"><h3 id="definition">Definition</h3><div class="paragraph"><p>A Matrix is typically used as a <em>linear transformation</em> to map vectors to vectors. That is: Y = MX where X is a Vector and M is a Matrix applying any or all transformations (scale, rotate, translate).</p></div>
  5. <div class="paragraph"><p>There are a few special matrices:</p></div>
  6. <div class="paragraph"><p><em>zero matrix</em> is the Matrix with all zero entries.</p></div>
  7. <table class="tableblock frame-all grid-all spread"><colgroup><col style="width: 33.3333%;"><col style="width: 33.3333%;"><col style="width: 33.3334%;"></colgroup><thead><tr><th class="tableblock halign-left valign-top">0</th><th class="tableblock halign-left valign-top">0</th><th class="tableblock halign-left valign-top">0</th></tr></thead><tbody><tr><td class="tableblock halign-left valign-top"><div><div class="paragraph"><p>0</p></div></div></td><td class="tableblock halign-left valign-top"><div><div class="paragraph"><p>0</p></div></div></td><td class="tableblock halign-left valign-top"><div><div class="paragraph"><p>0</p></div></div></td></tr><tr><td class="tableblock halign-left valign-top"><div><div class="paragraph"><p>0</p></div></div></td><td class="tableblock halign-left valign-top"><div><div class="paragraph"><p>0</p></div></div></td><td class="tableblock halign-left valign-top"><div><div class="paragraph"><p>0</p></div></div></td></tr></tbody></table>
  8. <div class="paragraph"><p>The <em>Identity Matrix</em> is the matrix with 1 on the diagonal entries and 0 for all other entries.</p></div>
  9. <table class="tableblock frame-all grid-all spread"><colgroup><col style="width: 33.3333%;"><col style="width: 33.3333%;"><col style="width: 33.3334%;"></colgroup><thead><tr><th class="tableblock halign-left valign-top">1</th><th class="tableblock halign-left valign-top">0</th><th class="tableblock halign-left valign-top">0</th></tr></thead><tbody><tr><td class="tableblock halign-left valign-top"><div><div class="paragraph"><p>0</p></div></div></td><td class="tableblock halign-left valign-top"><div><div class="paragraph"><p>1</p></div></div></td><td class="tableblock halign-left valign-top"><div><div class="paragraph"><p>0</p></div></div></td></tr><tr><td class="tableblock halign-left valign-top"><div><div class="paragraph"><p>0</p></div></div></td><td class="tableblock halign-left valign-top"><div><div class="paragraph"><p>0</p></div></div></td><td class="tableblock halign-left valign-top"><div><div class="paragraph"><p>1</p></div></div></td></tr></tbody></table>
  10. <div class="paragraph"><p>A Matrix is <em>invertible</em> if there is a matrix <em>M<sup>-1</sup></em> where <em>MM<sup>-1</sup> = M<sup>-1</sup> = I</em>.</p></div>
  11. <div class="paragraph"><p>The <em>transpose</em> of a matrix <em>M = [m<sub>ij</sub>]</em> is <em>M<sup>T</sup> = [m<sub>ji</sub>]</em>. This causes the rows of <em>M</em> to become the columns of <em>M<sup>T</sup></em>.</p></div>
  12. <table class="tableblock frame-all grid-all spread"><colgroup><col style="width: 14.2857%;"><col style="width: 14.2857%;"><col style="width: 14.2857%;"><col style="width: 14.2857%;"><col style="width: 14.2857%;"><col style="width: 14.2857%;"><col style="width: 14.2858%;"></colgroup><thead><tr><th class="tableblock halign-left valign-top">1</th><th class="tableblock halign-left valign-top">1</th><th class="tableblock halign-left valign-top">1</th><th class="tableblock halign-left valign-top"></th><th class="tableblock halign-left valign-top">1</th><th class="tableblock halign-left valign-top">2</th><th class="tableblock halign-left valign-top">3</th></tr></thead><tbody><tr><td class="tableblock halign-left valign-top"><div><div class="paragraph"><p>2</p></div></div></td><td class="tableblock halign-left valign-top"><div><div class="paragraph"><p>2</p></div></div></td><td class="tableblock halign-left valign-top"><div><div class="paragraph"><p>2</p></div></div></td><td class="tableblock halign-left valign-top"><div><div class="paragraph"><p>⇒</p></div></div></td><td class="tableblock halign-left valign-top"><div><div class="paragraph"><p>1</p></div></div></td><td class="tableblock halign-left valign-top"><div><div class="paragraph"><p>2</p></div></div></td><td class="tableblock halign-left valign-top"><div><div class="paragraph"><p>3</p></div></div></td></tr><tr><td class="tableblock halign-left valign-top"><div><div class="paragraph"><p>3</p></div></div></td><td class="tableblock halign-left valign-top"><div><div class="paragraph"><p>3</p></div></div></td><td class="tableblock halign-left valign-top"><div><div class="paragraph"><p>3</p></div></div></td><td class="tableblock halign-left valign-top"><div></div></td><td class="tableblock halign-left valign-top"><div><div class="paragraph"><p>1</p></div></div></td><td class="tableblock halign-left valign-top"><div><div class="paragraph"><p>2</p></div></div></td><td class="tableblock halign-left valign-top"><div><div class="paragraph"><p>3</p></div></div></td></tr></tbody></table>
  13. <div class="paragraph"><p>A Matrix is symmetric if <em>M</em> = <em>M<sup>T</sup></em>.</p></div>
  14. <table class="tableblock frame-all grid-all spread"><colgroup><col style="width: 33.3333%;"><col style="width: 33.3333%;"><col style="width: 33.3334%;"></colgroup><thead><tr><th class="tableblock halign-left valign-top">X</th><th class="tableblock halign-left valign-top">A</th><th class="tableblock halign-left valign-top">B</th></tr></thead><tbody><tr><td class="tableblock halign-left valign-top"><div><div class="paragraph"><p>A</p></div></div></td><td class="tableblock halign-left valign-top"><div><div class="paragraph"><p>X</p></div></div></td><td class="tableblock halign-left valign-top"><div><div class="paragraph"><p>C</p></div></div></td></tr><tr><td class="tableblock halign-left valign-top"><div><div class="paragraph"><p>B</p></div></div></td><td class="tableblock halign-left valign-top"><div><div class="paragraph"><p>C</p></div></div></td><td class="tableblock halign-left valign-top"><div><div class="paragraph"><p>X</p></div></div></td></tr></tbody></table>
  15. <div class="paragraph"><p>Where X, A, B, and C equal numbers</p></div>
  16. <div class="paragraph"><p>jME includes two types of Matrix classes: Matrix3f and Matrix4f. Matrix3f is a 3x3 matrix and is the most commonly used (able to handle scaling and rotating), while Matrix4f is a 4x4 matrix that can also handle translation.</p></div></div>
  17. <div class="sect2"><h3 id="transformations">Transformations</h3><div class="paragraph"><p>Multiplying a <a href="../jme3/vector.html">Vector</a> with a Matrix allows the <a href="../jme3/vector.html">Vector</a> to be transformed. Either rotating, scaling or translating that <a href="../jme3/vector.html">Vector</a>.</p></div>
  18. <div class="sect3"><h4 id="scaling">Scaling</h4><div class="paragraph"><p>If a <em>diagonal Matrix</em>, defined by D = [d<sub>ij</sub>] and d<sub>ij</sub> = 0 for i != j, has all positive entries it is a <em>scaling matrix</em>. If d<sub>i</sub> is greater than 1 then the resulting <a href="../jme3/vector.html">Vector</a> will grow, while if d<sub>i</sub> is less than 1 it will shrink.</p></div></div>
  19. <div class="sect3"><h4 id="rotation">Rotation</h4><div class="paragraph"><p>A <em>rotation matrix</em> requires that the transpose and inverse are the same matrix (R<sup>-1</sup> = R<sup>T</sup>). The <em>rotation matrix</em> R can then be calculated as: R = I + (sin(angle)) S + (1 - cos(angle)S<sup>2</sup> where S is:</p></div>
  20. <table class="tableblock frame-all grid-all spread"><colgroup><col style="width: 33.3333%;"><col style="width: 33.3333%;"><col style="width: 33.3334%;"></colgroup><thead><tr><th class="tableblock halign-left valign-top">0</th><th class="tableblock halign-left valign-top">u<sub>2</sub></th><th class="tableblock halign-left valign-top">-u<sub>1</sub></th></tr></thead><tbody><tr><td class="tableblock halign-left valign-top"><div><div class="paragraph"><p>-u<sub>2</sub></p></div></div></td><td class="tableblock halign-left valign-top"><div><div class="paragraph"><p>0</p></div></div></td><td class="tableblock halign-left valign-top"><div><div class="paragraph"><p>u<sub>0</sub></p></div></div></td></tr><tr><td class="tableblock halign-left valign-top"><div><div class="paragraph"><p>u<sub>1</sub></p></div></div></td><td class="tableblock halign-left valign-top"><div><div class="paragraph"><p>-u<sub>0</sub></p></div></div></td><td class="tableblock halign-left valign-top"><div><div class="paragraph"><p>0</p></div></div></td></tr></tbody></table></div>
  21. <div class="sect3"><h4 id="translation">Translation</h4><div class="paragraph"><p>Translation requires a 4x4 matrix, where the <a href="../jme3/vector.html">Vector</a> (x,y,z) is mapped to (x,y,z,1) for multiplication. The <em>Translation Matrix</em> is then defined as:</p></div>
  22. <table class="tableblock frame-all grid-all spread"><colgroup><col style="width: 50%;"><col style="width: 50%;"></colgroup><thead><tr><th class="tableblock halign-left valign-top">M</th><th class="tableblock halign-left valign-top">T</th></tr></thead><tbody><tr><td class="tableblock halign-left valign-top"><div><div class="paragraph"><p>S<sup>T</sup></p></div></div></td><td class="tableblock halign-left valign-top"><div><div class="paragraph"><p>1</p></div></div></td></tr></tbody></table>
  23. <div class="paragraph"><p>where M is the 3x3 matrix (containing any rotation/scale information), T is the translation <a href="../jme3/vector.html">Vector</a> and S<sup>T</sup> is the transpose Vector of T. 1 is just a constant.</p></div></div></div>
  24. <div class="sect2"><h3 id="jme-class">jME Class</h3><div class="paragraph"><p>Both Matrix3f and Matrix4f store their values as floats and are publicly available as (m00, m01, m02, …, mNN) where N is either 2 or 3.</p></div>
  25. <div class="paragraph"><p>Most methods are straight forward, and I will leave documentation to the Javadoc.</p></div></div></div></div><div id="footer"><div id="footer-text">Version <br>Last updated 2018-02-28 16:23:40 +00:00</div></div><script type="text/javascript" src="https://cdn.jsdelivr.net/docsearch.js/2/docsearch.min.js"></script><script>docsearch({
  26. apiKey: 'a736b6d93de805e26ec2f49b55013fbd',
  27. indexName: 'jmonkeyengine',
  28. inputSelector: '#doc-search',
  29. debug: false // Set debug to true if you want to inspect the dropdown
  30. });</script></body></html>