<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Rob Siegwart - Mathematics</title><link href="https://www.robsiegwart.com/" rel="alternate"/><link href="https://www.robsiegwart.com/feeds/mathematics.atom.xml" rel="self"/><id>https://www.robsiegwart.com/</id><updated>2020-07-07T00:00:00-05:00</updated><entry><title>Change of Basis and the Transformation Matrix</title><link href="https://www.robsiegwart.com/change-of-basis-and-the-transformation-matrix.html" rel="alternate"/><published>2019-02-15T00:00:00-06:00</published><updated>2020-07-07T00:00:00-05:00</updated><author><name>Rob Siegwart</name></author><id>tag:www.robsiegwart.com,2019-02-15:/change-of-basis-and-the-transformation-matrix.html</id><summary type="html">&lt;p class="first last"&gt;Basics of transformation matrices&lt;/p&gt;
</summary><content type="html">&lt;p&gt;A vector is represented traditionally with respect to a coordinate system. More
generally it is represented by a set of basis vectors - two vectors which are
linearly independent and form a vector subspace. A vector is therefore a linear
combination of these basis vectors. In a global cartesian coordinate system
these are the unit vectors &lt;span class="math"&gt;\(\hat{x}\)&lt;/span&gt;, &lt;span class="math"&gt;\(\hat{y}\)&lt;/span&gt;, and &lt;span class="math"&gt;\(\hat{z}\)&lt;/span&gt;.
A vector can be represented in another coordinate system by changing its basis
vectors.&lt;/p&gt;
&lt;div class="section" id="definitions"&gt;
&lt;h2&gt;Definitions&lt;/h2&gt;
&lt;p&gt;With:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;span class="math"&gt;\(M\)&lt;/span&gt;, a basis matrix containing the basis vectors as columns&lt;/li&gt;
&lt;li&gt;&lt;span class="math"&gt;\(\vec{v}\)&lt;/span&gt;, a column vector in the basis vector space &lt;span class="math"&gt;\(M\)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When written as:&lt;/p&gt;
&lt;div class="math"&gt;
\begin{equation*}
\vec{a} = M\vec{v}
\end{equation*}
&lt;/div&gt;
&lt;p&gt;the vector &lt;span class="math"&gt;\(\hat{a}\)&lt;/span&gt; is the vector in global coordinates.&lt;/p&gt;
&lt;p&gt;The reverse can be achieved to determine a vector defined by a different basis:&lt;/p&gt;
&lt;div class="math"&gt;
\begin{equation*}
\vec{v}=M^{-1}\vec{a}
\end{equation*}
&lt;/div&gt;
&lt;p&gt;This works both for 2-D and 3-D vectors.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="example"&gt;
&lt;h2&gt;Example&lt;/h2&gt;
&lt;p&gt;Let a set of basis vectors be defined as:&lt;/p&gt;
&lt;div class="math"&gt;
\begin{equation*}
\begin{bmatrix}1&amp;amp;3\end{bmatrix}
\end{equation*}
&lt;/div&gt;
&lt;p&gt;and&lt;/p&gt;
&lt;div class="math"&gt;
\begin{equation*}
\begin{bmatrix}-1&amp;amp;4\end{bmatrix}
\end{equation*}
&lt;/div&gt;
&lt;p&gt;The basis matrix being:&lt;/p&gt;
&lt;div class="math"&gt;
\begin{equation*}
M=\begin{bmatrix}1&amp;amp;-1\\4&amp;amp;4\end{bmatrix}
\end{equation*}
&lt;/div&gt;
&lt;p&gt;These basis vectors result in the following grid when plotted:&lt;/p&gt;
&lt;img alt="" src="https://robsiegwart.nyc3.digitaloceanspaces.com/Images/change-of-basis-and-the-transformation-matrix/Basis_csys%20-%20b.jpg" /&gt;
&lt;/div&gt;
&lt;div class="section" id="conversion-to-global-coordinates"&gt;
&lt;h2&gt;Conversion to Global Coordinates&lt;/h2&gt;
&lt;p&gt;Set a vector in this space &amp;nbsp;equal to &lt;span class="math"&gt;\(\begin{bmatrix}-2&amp;amp;3\end{bmatrix}\)&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;This vector using basis coordinates is plotted as the following:&lt;/p&gt;
&lt;img alt="" src="https://robsiegwart.nyc3.digitaloceanspaces.com/Images/change-of-basis-and-the-transformation-matrix/Basis%20to%20global%201.jpg" /&gt;
&lt;p&gt;The vector &lt;span class="math"&gt;\(\vec{a}\)&lt;/span&gt; (in global coordinates) is calculated with Eq 1. and
is therefore equal to&lt;/p&gt;
&lt;div class="math"&gt;
\begin{equation*}
\vec{a}=\begin{bmatrix}1&amp;amp;-1\\3&amp;amp;4\end{bmatrix}\begin{bmatrix}-2\\3\end{bmatrix}=\begin{bmatrix}-5&amp;amp;6\end{bmatrix}
\end{equation*}
&lt;/div&gt;
&lt;img alt="" src="https://robsiegwart.nyc3.digitaloceanspaces.com/Images/change-of-basis-and-the-transformation-matrix/Basis%20to%20global%202%20-%20b.jpg" /&gt;
&lt;/div&gt;
&lt;div class="section" id="converstion-to-basis-coordinates"&gt;
&lt;h2&gt;Converstion to Basis Coordinates&lt;/h2&gt;
&lt;p&gt;Using a vector in global coordinates of:&lt;/p&gt;
&lt;div class="math"&gt;
\begin{equation*}
a=\begin{bmatrix}3&amp;amp;-1\end{bmatrix}
\end{equation*}
&lt;/div&gt;
&lt;p&gt;we have:&lt;/p&gt;
&lt;img alt="" src="https://robsiegwart.nyc3.digitaloceanspaces.com/Images/change-of-basis-and-the-transformation-matrix/Global%20to%20basis%201%20-%20b.jpg" /&gt;
&lt;p&gt;And to convert it to the basis space, we multiply the vector by the inverse of
the basis matrix.&lt;/p&gt;
&lt;div class="math"&gt;
\begin{equation*}
v=\begin{bmatrix}1&amp;amp;-1\\3&amp;amp;4\end{bmatrix}^{-1}\begin{bmatrix}3\\1\end{bmatrix}=\begin{bmatrix}0.571&amp;amp;0.143\\-0.429&amp;amp;0.143\end{bmatrix}\begin{bmatrix}3\\1\end{bmatrix}=\begin{bmatrix}1.571\\-1.429\end{bmatrix}
\end{equation*}
&lt;/div&gt;
&lt;img alt="" src="https://robsiegwart.nyc3.digitaloceanspaces.com/Images/change-of-basis-and-the-transformation-matrix/Global%20to%20basis%202%20-%20b.jpg" /&gt;
&lt;/div&gt;
&lt;div class="section" id="transformation-matrix"&gt;
&lt;h2&gt;Transformation Matrix&lt;/h2&gt;
&lt;p&gt;Change of basis can be used to derive transformation matices.&lt;/p&gt;
&lt;div class="section" id="rotation"&gt;
&lt;h3&gt;Rotation&lt;/h3&gt;
&lt;p&gt;Counter-clockwise rotation by an angle &lt;span class="math"&gt;\(\theta\)&lt;/span&gt; is developed using unit
vectors established by this angle:&lt;/p&gt;
&lt;div class="math"&gt;
\begin{equation*}
\hat{x}=\begin{bmatrix}\cos{\theta}&amp;amp;\sin{\theta}\end{bmatrix}
\end{equation*}
&lt;/div&gt;
&lt;div class="math"&gt;
\begin{equation*}
\hat{y}=\begin{bmatrix}-\sin{\theta}&amp;amp;\cos{\theta}\end{bmatrix}
\end{equation*}
&lt;/div&gt;
&lt;div class="math"&gt;
\begin{equation*}
M_{rotate}=\begin{bmatrix}\cos{\theta}&amp;amp;-\sin{\theta}\\\sin{\theta}&amp;amp;\cos{\theta}\end{bmatrix}
\end{equation*}
&lt;/div&gt;
&lt;img alt="" src="https://robsiegwart.nyc3.digitaloceanspaces.com/Images/change-of-basis-and-the-transformation-matrix/Rotation.png" /&gt;
&lt;/div&gt;
&lt;div class="section" id="scale"&gt;
&lt;h3&gt;Scale&lt;/h3&gt;
&lt;p&gt;With scaling, the global unit vectors maintain the same orientation but are
scaled in length by a scale factor, &lt;span class="math"&gt;\(s\)&lt;/span&gt;. The new basis vectors are then the
following:&lt;/p&gt;
&lt;div class="math"&gt;
\begin{equation*}
\hat{x}=\begin{bmatrix}s_x&amp;amp;1\end{bmatrix}
\end{equation*}
&lt;/div&gt;
&lt;div class="math"&gt;
\begin{equation*}
\hat{y}=\begin{bmatrix}1&amp;amp;s_y\end{bmatrix}
\end{equation*}
&lt;/div&gt;
&lt;div class="math"&gt;
\begin{equation*}
M_{scale}=\begin{bmatrix}s_x&amp;amp;1\\1&amp;amp;s_y\end{bmatrix}
\end{equation*}
&lt;/div&gt;
&lt;img alt="" src="https://robsiegwart.nyc3.digitaloceanspaces.com/Images/change-of-basis-and-the-transformation-matrix/Scale.png" /&gt;
&lt;/div&gt;
&lt;div class="section" id="shear"&gt;
&lt;h3&gt;Shear&lt;/h3&gt;
&lt;p&gt;Shearing along a principal axis may be derived as follows, for example when
along the x-axis:&lt;/p&gt;
&lt;div class="math"&gt;
\begin{equation*}
\hat{x}=\begin{bmatrix}1&amp;amp;0\end{bmatrix}
\end{equation*}
&lt;/div&gt;
&lt;div class="math"&gt;
\begin{equation*}
\hat{y}=\begin{bmatrix}\sin{\theta}&amp;amp;1\end{bmatrix}
\end{equation*}
&lt;/div&gt;
&lt;div class="math"&gt;
\begin{equation*}
M_{shear,x}=\begin{bmatrix}1&amp;amp;\sin{\theta}\\0&amp;amp;1\end{bmatrix}
\end{equation*}
&lt;/div&gt;
&lt;img alt="" src="https://robsiegwart.nyc3.digitaloceanspaces.com/Images/change-of-basis-and-the-transformation-matrix/Shear.png" /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="polygon-transformation"&gt;
&lt;h2&gt;Polygon Transformation&lt;/h2&gt;
&lt;p&gt;As an example of transformation matrices, let's create and transform a generic
polygon using Python and matplotlib.&lt;/p&gt;
&lt;p&gt;Using the following points as definition:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;xy&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;array&lt;/span&gt;&lt;span class="p"&gt;([[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;],[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;],[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;],[&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;],[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;],[&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]])&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;we obtain this polygon:&lt;/p&gt;
&lt;img alt="" src="https://robsiegwart.nyc3.digitaloceanspaces.com/Images/change-of-basis-and-the-transformation-matrix/Poly.png" /&gt;
&lt;div class="section" id="rotation-1"&gt;
&lt;h3&gt;Rotation&lt;/h3&gt;
&lt;p&gt;For a rotation of 45 degrees, counter-clockwise about the origin, the
transformation matrix becomes:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;rotation&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;radians&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;45&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;array&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;  &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rotation&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rotation&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;array&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rotation&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rotation&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="n"&gt;M&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;hstack&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reshape&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reshape&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&amp;gt;&amp;gt;&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;print&lt;span class="o"&gt;(&lt;/span&gt;M&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;[[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.70710678&lt;span class="w"&gt; &lt;/span&gt;-0.70710678&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.70710678&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.70710678&lt;span class="o"&gt;]]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The new polygon points are then calculated with:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;xy_new&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;M&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;xy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Adding the rotated polygon to the plot:&lt;/p&gt;
&lt;img alt="" src="https://robsiegwart.nyc3.digitaloceanspaces.com/Images/change-of-basis-and-the-transformation-matrix/Rotate_poly.png" /&gt;
&lt;/div&gt;
&lt;div class="section" id="scale-1"&gt;
&lt;h3&gt;Scale&lt;/h3&gt;
&lt;p&gt;Using scale factors of 1.9 and 1.4 for the x and y axis, respectively:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;sx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;1.9&lt;/span&gt;
&lt;span class="n"&gt;sy&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;1.4&lt;/span&gt;

&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;array&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt; &lt;span class="n"&gt;sx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;array&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sy&lt;/span&gt; &lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="n"&gt;M&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;hstack&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reshape&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reshape&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&amp;gt;&amp;gt;&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;print&lt;span class="o"&gt;(&lt;/span&gt;M&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;[[&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;.9&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;.4&lt;span class="o"&gt;]]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;We calculate the points for the scaled polygon the same way:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;xy_new&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;M&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;xy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;poly_scaled&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Polygon&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;xy_new&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fill&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;edgecolor&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;blue&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;And plotting:&lt;/p&gt;
&lt;img alt="" src="https://robsiegwart.nyc3.digitaloceanspaces.com/Images/change-of-basis-and-the-transformation-matrix/Scale_poly.png" /&gt;
&lt;/div&gt;
&lt;div class="section" id="shear-1"&gt;
&lt;h3&gt;Shear&lt;/h3&gt;
&lt;p&gt;Here we will shear along the x-axis by 45 degrees. The transformation matrix is:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;angle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;45&lt;/span&gt;

&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;array&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;array&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;radians&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;angle&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="n"&gt;M&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;hstack&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reshape&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reshape&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&amp;gt;&amp;gt;&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;print&lt;span class="o"&gt;(&lt;/span&gt;M&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;[[&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;.&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.70710678&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;.&lt;span class="w"&gt;         &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;.&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;]]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;And the sheared polygon is calculated using matrix multiplication again:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;xy_new&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;M&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;xy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;poly_scaled&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Polygon&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;xy_new&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fill&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;edgecolor&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;blue&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;img alt="" src="https://robsiegwart.nyc3.digitaloceanspaces.com/Images/change-of-basis-and-the-transformation-matrix/Shear_poly.png" /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;script type='text/javascript'&gt;if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
    var align = "center",
        indent = "0em",
        linebreak = "false";

    if (false) {
        align = (screen.width &lt; 768) ? "left" : align;
        indent = (screen.width &lt; 768) ? "0em" : indent;
        linebreak = (screen.width &lt; 768) ? 'true' : linebreak;
    }

    var mathjaxscript = document.createElement('script');
    mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
    mathjaxscript.type = 'text/javascript';
    mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';

    var configscript = document.createElement('script');
    configscript.type = 'text/x-mathjax-config';
    configscript[(window.opera ? "innerHTML" : "text")] =
        "MathJax.Hub.Config({" +
        "    config: ['MMLorHTML.js']," +
        "    TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
        "    jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
        "    extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
        "    displayAlign: '"+ align +"'," +
        "    displayIndent: '"+ indent +"'," +
        "    showMathMenu: true," +
        "    messageStyle: 'normal'," +
        "    tex2jax: { " +
        "        inlineMath: [ ['\\\\(','\\\\)'] ], " +
        "        displayMath: [ ['$$','$$'] ]," +
        "        processEscapes: true," +
        "        preview: 'TeX'," +
        "    }, " +
        "    'HTML-CSS': { " +
        "        availableFonts: ['STIX', 'TeX']," +
        "        preferredFont: 'STIX'," +
        "        styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
        "        linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
        "    }, " +
        "}); " +
        "if ('default' !== 'default') {" +
            "MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
                "var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
                "VARIANT['normal'].fonts.unshift('MathJax_default');" +
                "VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
                "VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
                "VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
            "});" +
            "MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
                "var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
                "VARIANT['normal'].fonts.unshift('MathJax_default');" +
                "VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
                "VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
                "VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
            "});" +
        "}";

    (document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
    (document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}
&lt;/script&gt;</content><category term="Mathematics"/><category term="python"/></entry></feed>