anchor.diff:  }
   ----
   
  -Notice the top and bottom of the function is exactly the same as the NoScale version. In the middle we calculate squared size, with an optional divide-by-small-number test.
  +この関数の最初と最後の部分はNoScaleバージョンと全く同じです。その間に、スケールの２乗を計算します。絶対必要ではないですが、０に近い数字との除算を回避するテストもあります。
   
   === General Matrix Inverse
   
  -For general matrix, things are getting complicated. You can find most of the theory part in the following wiki pages: 
  -https://en.wikipedia.org/wiki/Invertible_matrix[Invertible Matrix], https://en.wikipedia.org/wiki/Adjugate_matrix[Adjugate Matrix], https://en.wikipedia.org/wiki/Determinant#Relation_to_eigenvalues_and_trace[Determinant], https://en.wikipedia.org/wiki/Trace_(linear_algebra)[Trace].
  +一般の行列の計算は大分難しくなります。このあと使う理論の詳細は英語版のWikiページを参照してください。 
  +https://en.wikipedia.org/wiki/Invertible_matrix[逆行列　Invertible Matrix], https://en.wikipedia.org/wiki/Adjugate_matrix[随伴行列　Adjugate Matrix], https://en.wikipedia.org/wiki/Determinant#Relation_to_eigenvalues_and_trace[行列式　Determinant], https://en.wikipedia.org/wiki/Trace_(linear_algebra)[トレース　Trace].
   
   We will introduce some of them as we go. The method is based on the same block matrices method Intel used for its https://software.intel.com/en-us/articles/optimized-matrix-library-for-use-with-the-intel-pentiumr-4-processors-sse2-instructions/[Optimized Matrix Library].
   
  
positive.code: M=\left( \begin{matrix} a\vec{X} & 0 \\ b\vec{Y} & 0 \\ c\vec{Z} & 0 \\ \vec{T} & 1 \\ \end{matrix} \right) = \left( \begin{matrix} aX_0 & aX_1 & aX_2 & 0 \\ bY_0 & bY_1 & bY_2 & 0 \\ cZ_0 & cZ_1 & cZ_2 & 0 \\ T_0 & T_1 & T_2 & 1 \\ \end{matrix} \right)
  ++++
  
  最後の行の最初の3つの成分は位置stem:[\vec{T}]です。左上の３ｘ３小行列はスケール回転行列、その3行ともスケール変換した回転軸であります。つまりstem:[\vec{X}\cdot\vec{Y}=\vec{X}\cdot\vec{Z}=\vec{Y}\cdot\vec{Z}=0]、stem:[\left|\vec{X}\right|=\left|\vec{Y}\right|=\left|\vec{Z}\right|=1]、そしてスケールはstem:[(a,b,c)]です。 
  
  Most matrices in the game are of this form. For example, stem:[M] represents a local to world transform, stem:[\vec{X}], stem:[\vec{Y}], stem:[\vec{Z}] are your local space axes. If you have a point stem:[\vec{P}(P_0,P_1,P_2)], and you want to transform it from local space to world space, you do this:
  
  [stem]
  ++++
  \vec{P'}=P_0a\vec{X}+P_1b\vec{Y}+P_2c\vec{Z}+\vec{T}
  ++++
  
  This is the same as extend stem:[\vec{P}] to a 4 component vector stem:[\vec{P}(P_0,P_1,P_2,1)] and multiply by matrix stem:[M]. Now what does inverse matrix stem:[M^{-1}] mean? In this case it represents a world to local transform, so if we multiply stem:[\vec{P'}] by stem:[M^{-1}], we should get stem:[\vec{P}] back. How do we transform the point stem:[\vec{P'}] from world space back in local space? We subtract the local space origin (aka the translation stem:[\vec{T}]), then dot each axes to get its local space coordinate and rescale it:
  
  [stem]
  ++++
  
negative.code: #define VecShuffle_2323(vec1, vec2)        _mm_movehl_ps(vec2, vec1)
  ----
  
  下記はスケール１のトランスフォーム行列の逆行列を求める関数です。
  
  [source,cpp]
  ----
  