add issequence function to data and plot functions and examples for geometry

This commit is contained in:
2019-12-26 10:56:33 +01:00
parent 3be9e2f20f
commit 4b42d7b508
49 changed files with 2845 additions and 628 deletions

View File

@@ -40,6 +40,7 @@
<li><a href="pylib/geometry.html">pylib.geometry</a></li>
<li><a href="pylib/geometry2d.html">pylib.geometry2d</a></li>
<li><a href="pylib/geometry2d_plot.html">pylib.geometry2d_plot</a></li>
<li><a href="pylib/geometry_plot_pylab.html">pylib.geometry_plot_pylab</a></li>
<li><a href="pylib/mathematics.html">pylib.mathematics</a></li>
<li><a href="pylib/numerical/fit.html">pylib.numerical.fit</a></li>
<li><a href="pylib/numerical/integration.html">pylib.numerical.integration</a></li>

View File

@@ -47,6 +47,36 @@
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">math</span>
<span class="kn">import</span> <span class="nn">pickle</span>
<span class="kn">import</span> <span class="nn">collections</span>
<div class="viewcode-block" id="issequence"><a class="viewcode-back" href="../../pylib.data.html#pylib.data.issequence">[docs]</a><span class="k">def</span> <span class="nf">issequence</span><span class="p">(</span><span class="n">obj</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> True for tuple, list, str</span>
<span class="sd"> False for int, dict, set</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; issequence(())</span>
<span class="sd"> True</span>
<span class="sd"> &gt;&gt;&gt; issequence((3, ))</span>
<span class="sd"> True</span>
<span class="sd"> &gt;&gt;&gt; issequence([])</span>
<span class="sd"> True</span>
<span class="sd"> &gt;&gt;&gt; issequence([1])</span>
<span class="sd"> True</span>
<span class="sd"> &gt;&gt;&gt; issequence([1, 2])</span>
<span class="sd"> True</span>
<span class="sd"> &gt;&gt;&gt; issequence(&#39;&#39;)</span>
<span class="sd"> True</span>
<span class="sd"> &gt;&gt;&gt; issequence((3))</span>
<span class="sd"> False</span>
<span class="sd"> &gt;&gt;&gt; issequence({})</span>
<span class="sd"> False</span>
<span class="sd"> &gt;&gt;&gt; issequence(set())</span>
<span class="sd"> False</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">collections</span><span class="o">.</span><span class="n">abc</span><span class="o">.</span><span class="n">Sequence</span><span class="p">)</span></div>
<div class="viewcode-block" id="read"><a class="viewcode-back" href="../../pylib.data.html#pylib.data.read">[docs]</a><span class="k">def</span> <span class="nf">read</span><span class="p">(</span><span class="n">file_name</span><span class="p">,</span> <span class="n">x_column</span><span class="p">,</span> <span class="n">y_column</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Read ascii data file.</span>

View File

@@ -235,7 +235,7 @@
<span class="sd"> &gt;&gt;&gt; x, y, theta_end = hyotrochoid(20, 6, 6)</span>
<span class="sd"> .. seealso::</span>
<span class="sd"> :meth:`mathematics.lcm`</span>
<span class="sd"> :meth:`pylib.mathematics.lcm`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">x</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">theta</span><span class="p">:</span> <span class="p">(</span><span class="n">R</span><span class="o">-</span><span class="n">r</span><span class="p">)</span><span class="o">*</span><span class="n">math</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span> <span class="o">+</span> <span class="n">d</span><span class="o">*</span><span class="n">math</span><span class="o">.</span><span class="n">cos</span><span class="p">((</span><span class="n">R</span><span class="o">-</span><span class="n">r</span><span class="p">)</span><span class="o">/</span><span class="n">r</span> <span class="o">*</span> <span class="n">theta</span><span class="p">)</span>
<span class="n">y</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">theta</span><span class="p">:</span> <span class="p">(</span><span class="n">R</span><span class="o">-</span><span class="n">r</span><span class="p">)</span><span class="o">*</span><span class="n">math</span><span class="o">.</span><span class="n">sin</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span> <span class="o">-</span> <span class="n">d</span><span class="o">*</span><span class="n">math</span><span class="o">.</span><span class="n">sin</span><span class="p">((</span><span class="n">R</span><span class="o">-</span><span class="n">r</span><span class="p">)</span><span class="o">/</span><span class="n">r</span> <span class="o">*</span> <span class="n">theta</span><span class="p">)</span>
@@ -412,7 +412,7 @@
<span class="sd"> .. seealso::</span>
<span class="sd"> :meth:`pylib.function.transformation`</span>
<span class="sd"> :meth:`transformation`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># scale function to used chars and dots/pixel in y direction (4 for braille characters): from [0, 1] to [0, chars*4-1]</span>
<span class="c1"># negate the function because the y axis is pointing downwards: from [0, 1] to [-1, 0] or from [0, chars*4-1] to [-(chars*4-1), 0]</span>
@@ -437,7 +437,7 @@
<span class="c1">#frame = canvas.frame(min_x=a*pixel_per_char, min_y=1, max_x=b*pixel_per_char, max_y=21)</span>
<span class="n">frame</span> <span class="o">=</span> <span class="n">canvas</span><span class="o">.</span><span class="n">frame</span><span class="p">()</span>
<span class="k">elif</span> <span class="n">char_set</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">&quot;histogram&quot;</span><span class="p">,</span> <span class="s2">&quot;block&quot;</span><span class="p">]:</span>
<span class="kn">import</span> <span class="nn">drawblock</span>
<span class="kn">from</span> <span class="nn">.drawblock</span> <span class="kn">import</span> <span class="n">histogram</span>
<span class="n">pixels_horizontal</span> <span class="o">=</span> <span class="mi">1</span>
<span class="n">pixels_vertical</span> <span class="o">=</span> <span class="mi">8</span>
@@ -447,7 +447,7 @@
<span class="n">density</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="n">density</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> <span class="c1"># density max 1!</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">seq</span><span class="p">(</span><span class="n">x_0</span><span class="o">*</span><span class="n">window_factor</span><span class="p">,</span> <span class="n">x_1</span><span class="o">*</span><span class="n">window_factor</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="n">pixels_horizontal</span><span class="o">/</span><span class="n">density</span><span class="p">)</span>
<span class="n">f</span> <span class="o">=</span> <span class="p">[</span><span class="n">f</span><span class="p">(</span><span class="n">xi</span><span class="p">,</span> <span class="n">t</span><span class="p">)</span> <span class="k">for</span> <span class="n">xi</span> <span class="ow">in</span> <span class="n">x</span><span class="p">]</span>
<span class="n">frame</span> <span class="o">=</span> <span class="n">drawblock</span><span class="o">.</span><span class="n">histogram</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span>
<span class="n">frame</span> <span class="o">=</span> <span class="n">histogram</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span>
<span class="k">return</span> <span class="n">frame</span></div>
</pre></div>

View File

@@ -35,7 +35,7 @@
<h1>Source code for pylib.geometry</h1><div class="highlight"><pre>
<span></span><span class="ch">#!/usr/bin/env python</span>
<span class="c1"># -*- coding: utf-8 -*-</span>
<span class="sd">&quot;&quot;&quot;2D geometry objects.</span>
<span class="sd">&quot;&quot;&quot;Geometry objects.</span>
<span class="sd">:Date: 2019-12-21</span>
@@ -44,26 +44,37 @@
<span class="sd"> :synopsis: Geometry objects.</span>
<span class="sd">.. moduleauthor:: Daniel Weschke &lt;daniel.weschke@directbox.de&gt;</span>
<span class="sd">Affine transforms</span>
<span class="sd">-----------------</span>
<span class="sd">Functions in augmented space, in homogenous coordinates.</span>
<span class="sd">Points are augment to 4 dimensions, by adding a dummy coordinate.</span>
<span class="sd">For points the dummy coordinate is always normalized to 1.</span>
<span class="sd">With homogenous coordinates translation of points is repesentable</span>
<span class="sd">as a linear transformation.</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">math</span>
<span class="kn">import</span> <span class="nn">copy</span>
<span class="kn">from</span> <span class="nn">mathematics</span> <span class="kn">import</span> <span class="n">vector</span><span class="p">,</span> <span class="n">matrix</span>
<span class="kn">from</span> <span class="nn">.mathematics</span> <span class="kn">import</span> <span class="n">vector</span><span class="p">,</span> <span class="n">matrix</span>
<div class="viewcode-block" id="Direction"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Direction">[docs]</a><span class="k">class</span> <span class="nc">Direction</span><span class="p">(</span><span class="n">vector</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Direction in local coordinate system&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">z</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">([</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">z</span><span class="p">,</span> <span class="mi">0</span><span class="p">])</span>
<span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">xyz</span><span class="p">())</span></div>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">([</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">z</span><span class="p">,</span> <span class="mi">0</span><span class="p">])</span></div>
<div class="viewcode-block" id="Point"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Point">[docs]</a><span class="k">class</span> <span class="nc">Point</span><span class="p">(</span><span class="n">vector</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Point in local coordinate system&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">z</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">([</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">z</span><span class="p">,</span> <span class="mi">1</span><span class="p">])</span>
<span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">xyz</span><span class="p">())</span></div>
<span class="c1"># TODO</span>
<div class="viewcode-block" id="Point.projection"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Point.projection">[docs]</a> <span class="k">def</span> <span class="nf">projection</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Orthographic projection to the xy-plane</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># P = matrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]])</span>
<span class="c1">#return (P*self)[:2]</span>
<span class="k">return</span> <span class="bp">self</span><span class="p">[:</span><span class="mi">2</span><span class="p">]</span></div></div>
<div class="viewcode-block" id="CS"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.CS">[docs]</a><span class="k">class</span> <span class="nc">CS</span><span class="p">(</span><span class="n">matrix</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Coordinate system</span>
@@ -71,9 +82,6 @@
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="o">=</span><span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="n">y</span><span class="o">=</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="n">z</span><span class="o">=</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">]):</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">([[</span><span class="o">*</span><span class="n">x</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="p">[</span><span class="o">*</span><span class="n">y</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="p">[</span><span class="o">*</span><span class="n">z</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">]])</span>
<span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s1">&#39;[&#39;</span> <span class="o">+</span> <span class="s1">&#39;, &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="nb">str</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_coordinates</span><span class="p">()])</span> <span class="o">+</span> <span class="s1">&#39;]&#39;</span>
<div class="viewcode-block" id="CS.x90"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.CS.x90">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">x90</span><span class="p">():</span>
<span class="k">return</span> <span class="n">CS</span><span class="p">((</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span></div>
@@ -94,7 +102,133 @@
<span class="sd">&quot;&quot;&quot;Get coordinates in 3d space&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="p">[:</span><span class="mi">3</span><span class="p">,:</span><span class="mi">3</span><span class="p">]</span></div></div>
<div class="viewcode-block" id="World"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.World">[docs]</a><span class="k">class</span> <span class="nc">World</span><span class="p">():</span>
<span class="c1"># TODO: Wireframe(list) or Wireframe(matrix) ?</span>
<span class="c1"># list of Points</span>
<div class="viewcode-block" id="Wireframe"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Wireframe">[docs]</a><span class="k">class</span> <span class="nc">Wireframe</span><span class="p">:</span>
<span class="sd">&quot;&quot;&quot;Open and closed wireframe object in local coordinate system</span>
<span class="sd"> This class create its own points (copy).</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">points</span><span class="p">,</span> <span class="n">closed</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_points</span> <span class="o">=</span> <span class="p">[</span><span class="n">copy</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">points</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">closed</span> <span class="o">=</span> <span class="n">closed</span>
<div class="viewcode-block" id="Wireframe.__str__"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Wireframe.__str__">[docs]</a> <span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s1">&#39;[&#39;</span> <span class="o">+</span> <span class="s1">&#39;, &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="nb">str</span><span class="p">(</span><span class="n">point</span><span class="p">)</span> <span class="k">for</span> <span class="n">point</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_points</span><span class="p">])</span> <span class="o">+</span> <span class="s1">&#39;]&#39;</span></div>
<div class="viewcode-block" id="Wireframe.__iter__"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Wireframe.__iter__">[docs]</a> <span class="k">def</span> <span class="fm">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Returns the Iterator object&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">points</span><span class="p">())</span></div>
<div class="viewcode-block" id="Wireframe.points"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Wireframe.points">[docs]</a> <span class="k">def</span> <span class="nf">points</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Get coordinates in 3d space&quot;&quot;&quot;</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">[</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_points</span><span class="p">]</span>
<span class="k">return</span> <span class="n">result</span> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">closed</span> <span class="k">else</span> <span class="n">result</span> <span class="o">+</span> <span class="p">[</span><span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span></div>
<div class="viewcode-block" id="Wireframe.xy"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Wireframe.xy">[docs]</a> <span class="k">def</span> <span class="nf">xy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Get coordinates in 3d space&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="p">[</span><span class="n">i</span><span class="p">[:</span><span class="mi">2</span><span class="p">]</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">points</span><span class="p">()]))</span></div>
<div class="viewcode-block" id="Wireframe.xyz"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Wireframe.xyz">[docs]</a> <span class="k">def</span> <span class="nf">xyz</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Get coordinates in 3d space&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="p">[</span><span class="n">i</span><span class="p">[:</span><span class="mi">3</span><span class="p">]</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">points</span><span class="p">()]))</span></div>
<div class="viewcode-block" id="Wireframe.rotate_x"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Wireframe.rotate_x">[docs]</a> <span class="k">def</span> <span class="nf">rotate_x</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">theta</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_points</span> <span class="o">=</span> <span class="p">[</span><span class="n">point</span><span class="o">.</span><span class="n">rotate_x</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span> <span class="k">for</span> <span class="n">point</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_points</span><span class="p">]</span>
<span class="k">return</span> <span class="bp">self</span></div>
<div class="viewcode-block" id="Wireframe.rotate_y"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Wireframe.rotate_y">[docs]</a> <span class="k">def</span> <span class="nf">rotate_y</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">theta</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_points</span> <span class="o">=</span> <span class="p">[</span><span class="n">point</span><span class="o">.</span><span class="n">rotate_y</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span> <span class="k">for</span> <span class="n">point</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_points</span><span class="p">]</span>
<span class="k">return</span> <span class="bp">self</span></div>
<div class="viewcode-block" id="Wireframe.rotate_z"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Wireframe.rotate_z">[docs]</a> <span class="k">def</span> <span class="nf">rotate_z</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">theta</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_points</span> <span class="o">=</span> <span class="p">[</span><span class="n">point</span><span class="o">.</span><span class="n">rotate_z</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span> <span class="k">for</span> <span class="n">point</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_points</span><span class="p">]</span>
<span class="k">return</span> <span class="bp">self</span></div>
<div class="viewcode-block" id="Wireframe.translate"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Wireframe.translate">[docs]</a> <span class="k">def</span> <span class="nf">translate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tx</span><span class="p">,</span> <span class="n">ty</span><span class="p">,</span> <span class="n">tz</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_points</span> <span class="o">=</span> <span class="p">[</span><span class="n">point</span><span class="o">.</span><span class="n">translate</span><span class="p">(</span><span class="n">tx</span><span class="p">,</span> <span class="n">ty</span><span class="p">,</span> <span class="n">tz</span><span class="p">)</span> <span class="k">for</span>
<span class="n">point</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_points</span><span class="p">]</span>
<span class="k">return</span> <span class="bp">self</span></div>
<div class="viewcode-block" id="Wireframe.scale"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Wireframe.scale">[docs]</a> <span class="k">def</span> <span class="nf">scale</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sx</span><span class="p">,</span> <span class="n">sy</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">sz</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="c1"># if not sy is not suitable because 0 is also false</span>
<span class="k">if</span> <span class="n">sy</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">sy</span> <span class="o">=</span> <span class="n">sx</span>
<span class="n">sz</span> <span class="o">=</span> <span class="n">sx</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_points</span> <span class="o">=</span> <span class="p">[</span><span class="n">point</span><span class="o">.</span><span class="n">scale</span><span class="p">(</span><span class="n">sx</span><span class="p">,</span> <span class="n">sy</span><span class="p">,</span> <span class="n">sz</span><span class="p">)</span> <span class="k">for</span>
<span class="n">point</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_points</span><span class="p">]</span>
<span class="k">return</span> <span class="bp">self</span></div>
<div class="viewcode-block" id="Wireframe.ch_cs"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Wireframe.ch_cs">[docs]</a> <span class="k">def</span> <span class="nf">ch_cs</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cs</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_points</span> <span class="o">=</span> <span class="p">[</span><span class="n">point</span><span class="o">.</span><span class="n">ch_cs</span><span class="p">(</span><span class="n">cs</span><span class="p">)</span> <span class="k">for</span> <span class="n">point</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_points</span><span class="p">]</span>
<span class="k">return</span> <span class="bp">self</span></div></div>
<div class="viewcode-block" id="Line"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Line">[docs]</a><span class="k">class</span> <span class="nc">Line</span><span class="p">(</span><span class="n">Wireframe</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Line a open wireframe object in local coordinate system&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">point1</span><span class="o">=</span><span class="n">Point</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">point2</span><span class="o">=</span><span class="n">Point</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)):</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">point1</span><span class="p">,</span> <span class="n">point2</span><span class="p">)</span></div>
<div class="viewcode-block" id="Polygon"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Polygon">[docs]</a><span class="k">class</span> <span class="nc">Polygon</span><span class="p">(</span><span class="n">Wireframe</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Polygon as closed wireframe object in local coordinate system&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">points</span><span class="p">):</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">points</span><span class="p">,</span> <span class="n">closed</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></div>
<div class="viewcode-block" id="Circle"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Circle">[docs]</a><span class="k">class</span> <span class="nc">Circle</span><span class="p">(</span><span class="n">Polygon</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Circle a closed wireframe object in local coordinate system&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">radius</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">n</span><span class="o">=</span><span class="mi">10</span><span class="p">):</span>
<span class="n">points</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">n</span><span class="p">):</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">radius</span> <span class="o">*</span> <span class="n">math</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="n">i</span><span class="o">*</span><span class="mi">2</span><span class="o">*</span><span class="n">math</span><span class="o">.</span><span class="n">pi</span><span class="o">/</span><span class="n">n</span><span class="p">)</span>
<span class="n">y</span> <span class="o">=</span> <span class="n">radius</span> <span class="o">*</span> <span class="n">math</span><span class="o">.</span><span class="n">sin</span><span class="p">(</span><span class="n">i</span><span class="o">*</span><span class="mi">2</span><span class="o">*</span><span class="n">math</span><span class="o">.</span><span class="n">pi</span><span class="o">/</span><span class="n">n</span><span class="p">)</span>
<span class="n">points</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">Point</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">points</span><span class="p">)</span></div>
<div class="viewcode-block" id="Solid"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Solid">[docs]</a><span class="k">class</span> <span class="nc">Solid</span><span class="p">:</span>
<span class="sd">&quot;&quot;&quot;Solid object in local coordinate system</span>
<span class="sd"> This class lists Wireframe objects.</span>
<span class="sd"> The Wireframe class create its own points (copy).</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">wireframes</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_wireframes</span> <span class="o">=</span> <span class="n">wireframes</span>
<div class="viewcode-block" id="Solid.wireframes"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Solid.wireframes">[docs]</a> <span class="k">def</span> <span class="nf">wireframes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_wireframes</span></div>
<div class="viewcode-block" id="Solid.translate"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Solid.translate">[docs]</a> <span class="k">def</span> <span class="nf">translate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tx</span><span class="p">,</span> <span class="n">ty</span><span class="p">,</span> <span class="n">tz</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_wireframes</span> <span class="o">=</span> <span class="p">[</span><span class="n">wireframe</span><span class="o">.</span><span class="n">translate</span><span class="p">(</span><span class="n">tx</span><span class="p">,</span> <span class="n">ty</span><span class="p">,</span> <span class="n">tz</span><span class="p">)</span> <span class="k">for</span>
<span class="n">wireframe</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_wireframes</span><span class="p">]</span>
<span class="k">return</span> <span class="bp">self</span></div>
<div class="viewcode-block" id="Solid.scale"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Solid.scale">[docs]</a> <span class="k">def</span> <span class="nf">scale</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sx</span><span class="p">,</span> <span class="n">sy</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">sz</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="c1"># if not sy is not suitable because 0 is also false</span>
<span class="k">if</span> <span class="n">sy</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">sy</span> <span class="o">=</span> <span class="n">sx</span>
<span class="n">sz</span> <span class="o">=</span> <span class="n">sx</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_wireframes</span> <span class="o">=</span> <span class="p">[</span><span class="n">wireframe</span><span class="o">.</span><span class="n">scale</span><span class="p">(</span><span class="n">sx</span><span class="p">,</span> <span class="n">sy</span><span class="p">,</span> <span class="n">sz</span><span class="p">)</span> <span class="k">for</span>
<span class="n">wireframe</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_wireframes</span><span class="p">]</span>
<span class="k">return</span> <span class="bp">self</span></div>
<div class="viewcode-block" id="Solid.ch_cs"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Solid.ch_cs">[docs]</a> <span class="k">def</span> <span class="nf">ch_cs</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cs</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_wireframes</span> <span class="o">=</span> <span class="p">[</span><span class="n">wireframe</span><span class="o">.</span><span class="n">ch_cs</span><span class="p">(</span><span class="n">cs</span><span class="p">)</span> <span class="k">for</span>
<span class="n">wireframe</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_wireframes</span><span class="p">]</span>
<span class="k">return</span> <span class="bp">self</span></div></div>
<div class="viewcode-block" id="Hexahedron"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Hexahedron">[docs]</a><span class="k">class</span> <span class="nc">Hexahedron</span><span class="p">(</span><span class="n">Solid</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Line a open wireframe object in local coordinate system&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span>
<span class="n">point1</span><span class="o">=</span><span class="n">Point</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">),</span> <span class="n">point2</span><span class="o">=</span><span class="n">Point</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">),</span>
<span class="n">point3</span><span class="o">=</span><span class="n">Point</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">),</span> <span class="n">point4</span><span class="o">=</span><span class="n">Point</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">),</span>
<span class="n">point5</span><span class="o">=</span><span class="n">Point</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">point6</span><span class="o">=</span><span class="n">Point</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
<span class="n">point7</span><span class="o">=</span><span class="n">Point</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">point8</span><span class="o">=</span><span class="n">Point</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">)):</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span>
<span class="n">Polygon</span><span class="p">(</span><span class="n">point1</span><span class="p">,</span> <span class="n">point2</span><span class="p">,</span> <span class="n">point3</span><span class="p">,</span> <span class="n">point4</span><span class="p">),</span>
<span class="n">Polygon</span><span class="p">(</span><span class="n">point5</span><span class="p">,</span> <span class="n">point6</span><span class="p">,</span> <span class="n">point7</span><span class="p">,</span> <span class="n">point8</span><span class="p">),</span>
<span class="n">Polygon</span><span class="p">(</span><span class="n">point1</span><span class="p">,</span> <span class="n">point2</span><span class="p">,</span> <span class="n">point6</span><span class="p">,</span> <span class="n">point5</span><span class="p">),</span>
<span class="n">Polygon</span><span class="p">(</span><span class="n">point3</span><span class="p">,</span> <span class="n">point4</span><span class="p">,</span> <span class="n">point8</span><span class="p">,</span> <span class="n">point7</span><span class="p">)</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="World"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.World">[docs]</a><span class="k">class</span> <span class="nc">World</span><span class="p">:</span>
<span class="sd">&quot;&quot;&quot;World-space with world-space coordinates</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
@@ -102,12 +236,13 @@
<span class="bp">self</span><span class="o">.</span><span class="n">_objects</span> <span class="o">=</span> <span class="p">[]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_store_init</span><span class="p">()</span>
<span class="k">def</span> <span class="fm">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<div class="viewcode-block" id="World.__iter__"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.World.__iter__">[docs]</a> <span class="k">def</span> <span class="fm">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Returns the Iterator object&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">objects</span><span class="p">())</span>
<span class="k">return</span> <span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">objects</span><span class="p">())</span></div>
<span class="k">def</span> <span class="nf">_store_init</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Initialize or reset calculated values, because a new object was added.</span>
<span class="sd">&quot;&quot;&quot;Initialize or reset calculated values, because a new object</span>
<span class="sd"> was added.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_bb</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_sd</span> <span class="o">=</span> <span class="kc">None</span>
@@ -141,6 +276,33 @@
<span class="bp">self</span><span class="o">.</span><span class="n">_cs</span><span class="o">.</span><span class="n">scale</span><span class="p">(</span><span class="n">sx</span><span class="p">,</span> <span class="n">sy</span><span class="p">,</span> <span class="n">sz</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span></div>
<div class="viewcode-block" id="World.wireframes"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.World.wireframes">[docs]</a> <span class="k">def</span> <span class="nf">wireframes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">objects</span><span class="p">():</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">Wireframe</span><span class="p">):</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">i</span><span class="o">.</span><span class="n">points</span><span class="p">())</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">Solid</span><span class="p">):</span>
<span class="p">[</span><span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">j</span><span class="o">.</span><span class="n">points</span><span class="p">())</span> <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="n">i</span><span class="o">.</span><span class="n">wireframes</span><span class="p">()]</span>
<span class="k">return</span> <span class="n">result</span></div>
<div class="viewcode-block" id="World.wireframes_xy"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.World.wireframes_xy">[docs]</a> <span class="k">def</span> <span class="nf">wireframes_xy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">objects</span><span class="p">():</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">Wireframe</span><span class="p">):</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">i</span><span class="o">.</span><span class="n">xy</span><span class="p">())</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">Solid</span><span class="p">):</span>
<span class="p">[</span><span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">j</span><span class="o">.</span><span class="n">xy</span><span class="p">())</span> <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="n">i</span><span class="o">.</span><span class="n">wireframes</span><span class="p">()]</span>
<span class="k">return</span> <span class="n">result</span></div>
<div class="viewcode-block" id="World.wireframes_xyz"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.World.wireframes_xyz">[docs]</a> <span class="k">def</span> <span class="nf">wireframes_xyz</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">objects</span><span class="p">():</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">Wireframe</span><span class="p">):</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">i</span><span class="o">.</span><span class="n">xyz</span><span class="p">())</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">Solid</span><span class="p">):</span>
<span class="p">[</span><span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">j</span><span class="o">.</span><span class="n">xyz</span><span class="p">())</span> <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="n">i</span><span class="o">.</span><span class="n">wireframes</span><span class="p">()]</span>
<span class="k">return</span> <span class="n">result</span></div>
<div class="viewcode-block" id="World.objects"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.World.objects">[docs]</a> <span class="k">def</span> <span class="nf">objects</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="p">[</span><span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="n">i</span><span class="p">)</span><span class="o">.</span><span class="n">ch_cs</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_cs</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_objects</span><span class="p">]</span></div>
@@ -159,10 +321,9 @@
<span class="n">xmax</span> <span class="o">=</span> <span class="o">-</span><span class="n">math</span><span class="o">.</span><span class="n">inf</span>
<span class="n">ymax</span> <span class="o">=</span> <span class="o">-</span><span class="n">math</span><span class="o">.</span><span class="n">inf</span>
<span class="n">zmax</span> <span class="o">=</span> <span class="o">-</span><span class="n">math</span><span class="o">.</span><span class="n">inf</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_objects</span><span class="p">:</span>
<span class="n">xi</span><span class="p">,</span> <span class="n">yi</span><span class="p">,</span> <span class="n">zi</span> <span class="o">=</span> <span class="nb">map</span><span class="p">(</span><span class="nb">min</span><span class="p">,</span> <span class="n">i</span><span class="o">.</span><span class="n">xyz</span><span class="p">())</span>
<span class="n">xs</span><span class="p">,</span> <span class="n">ys</span><span class="p">,</span> <span class="n">zs</span> <span class="o">=</span> <span class="nb">map</span><span class="p">(</span><span class="nb">max</span><span class="p">,</span> <span class="n">i</span><span class="o">.</span><span class="n">xyz</span><span class="p">())</span>
<span class="c1">#xmax = x if x &gt; xmax: xmax = x</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">wireframes_xyz</span><span class="p">():</span>
<span class="n">xi</span><span class="p">,</span> <span class="n">yi</span><span class="p">,</span> <span class="n">zi</span> <span class="o">=</span> <span class="nb">map</span><span class="p">(</span><span class="nb">min</span><span class="p">,</span> <span class="n">i</span><span class="p">)</span>
<span class="n">xs</span><span class="p">,</span> <span class="n">ys</span><span class="p">,</span> <span class="n">zs</span> <span class="o">=</span> <span class="nb">map</span><span class="p">(</span><span class="nb">max</span><span class="p">,</span> <span class="n">i</span><span class="p">)</span>
<span class="n">xmin</span> <span class="o">=</span> <span class="n">xi</span> <span class="k">if</span> <span class="n">xi</span> <span class="o">&lt;</span> <span class="n">xmin</span> <span class="k">else</span> <span class="n">xmin</span>
<span class="n">ymin</span> <span class="o">=</span> <span class="n">yi</span> <span class="k">if</span> <span class="n">yi</span> <span class="o">&lt;</span> <span class="n">ymin</span> <span class="k">else</span> <span class="n">ymin</span>
<span class="n">zmin</span> <span class="o">=</span> <span class="n">zi</span> <span class="k">if</span> <span class="n">zi</span> <span class="o">&lt;</span> <span class="n">zmin</span> <span class="k">else</span> <span class="n">zmin</span>
@@ -183,81 +344,11 @@
<div class="viewcode-block" id="World.center"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.World.center">[docs]</a> <span class="k">def</span> <span class="nf">center</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">bb</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">bounding_box</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">ch_cs</span><span class="p">([[</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="o">-</span><span class="p">(</span><span class="n">bb</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">bb</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="o">/</span><span class="mi">2</span><span class="p">],[</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="o">-</span><span class="p">(</span><span class="n">bb</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="n">bb</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">/</span><span class="mi">2</span><span class="p">],[</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="p">(</span><span class="n">bb</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span><span class="o">-</span><span class="n">bb</span><span class="p">[</span><span class="mi">4</span><span class="p">])</span><span class="o">/</span><span class="mi">2</span><span class="p">],[</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">]])</span>
<span class="bp">self</span><span class="o">.</span><span class="n">ch_cs</span><span class="p">([[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="p">(</span><span class="n">bb</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="n">bb</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span><span class="o">/</span><span class="mi">2</span><span class="p">],</span>
<span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="p">(</span><span class="n">bb</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">+</span><span class="n">bb</span><span class="p">[</span><span class="mi">3</span><span class="p">])</span><span class="o">/</span><span class="mi">2</span><span class="p">],</span>
<span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="p">(</span><span class="n">bb</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span><span class="o">+</span><span class="n">bb</span><span class="p">[</span><span class="mi">5</span><span class="p">])</span><span class="o">/</span><span class="mi">2</span><span class="p">],</span>
<span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">]])</span>
<span class="k">return</span> <span class="bp">self</span></div></div>
<span class="c1"># TODO: Wireframe(list) or Wireframe(matrix) ?</span>
<span class="c1"># list of Points</span>
<div class="viewcode-block" id="Wireframe"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Wireframe">[docs]</a><span class="k">class</span> <span class="nc">Wireframe</span><span class="p">():</span>
<span class="sd">&quot;&quot;&quot;Open and closed wireframe object in local coordinate system</span>
<span class="sd"> This class create its own points (copy).</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">points</span><span class="p">,</span> <span class="n">closed</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_points</span> <span class="o">=</span> <span class="p">[</span><span class="n">copy</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">points</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">closed</span> <span class="o">=</span> <span class="n">closed</span>
<span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s1">&#39;[&#39;</span> <span class="o">+</span> <span class="s1">&#39;, &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="nb">str</span><span class="p">(</span><span class="n">point</span><span class="p">)</span> <span class="k">for</span> <span class="n">point</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_points</span><span class="p">])</span> <span class="o">+</span> <span class="s1">&#39;]&#39;</span>
<span class="k">def</span> <span class="fm">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Returns the Iterator object&quot;&quot;&quot;</span>
<span class="k">return</span> <span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">points</span><span class="p">())</span>
<div class="viewcode-block" id="Wireframe.points"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Wireframe.points">[docs]</a> <span class="k">def</span> <span class="nf">points</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Get coordinates in 3d space&quot;&quot;&quot;</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">[</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_points</span><span class="p">]</span>
<span class="k">return</span> <span class="n">result</span> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">closed</span> <span class="k">else</span> <span class="n">result</span> <span class="o">+</span> <span class="p">[</span><span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span></div>
<div class="viewcode-block" id="Wireframe.xyz"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Wireframe.xyz">[docs]</a> <span class="k">def</span> <span class="nf">xyz</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="p">[</span><span class="n">i</span><span class="o">.</span><span class="n">xyz</span><span class="p">()</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">points</span><span class="p">()])</span></div>
<div class="viewcode-block" id="Wireframe.rotate_x"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Wireframe.rotate_x">[docs]</a> <span class="k">def</span> <span class="nf">rotate_x</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">theta</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_points</span> <span class="o">=</span> <span class="p">[</span><span class="n">point</span><span class="o">.</span><span class="n">rotate_x</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span> <span class="k">for</span> <span class="n">point</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_points</span><span class="p">]</span>
<span class="k">return</span> <span class="bp">self</span></div>
<div class="viewcode-block" id="Wireframe.rotate_y"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Wireframe.rotate_y">[docs]</a> <span class="k">def</span> <span class="nf">rotate_y</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">theta</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_points</span> <span class="o">=</span> <span class="p">[</span><span class="n">point</span><span class="o">.</span><span class="n">rotate_y</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span> <span class="k">for</span> <span class="n">point</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_points</span><span class="p">]</span>
<span class="k">return</span> <span class="bp">self</span></div>
<div class="viewcode-block" id="Wireframe.rotate_z"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Wireframe.rotate_z">[docs]</a> <span class="k">def</span> <span class="nf">rotate_z</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">theta</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_points</span> <span class="o">=</span> <span class="p">[</span><span class="n">point</span><span class="o">.</span><span class="n">rotate_z</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span> <span class="k">for</span> <span class="n">point</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_points</span><span class="p">]</span>
<span class="k">return</span> <span class="bp">self</span></div>
<div class="viewcode-block" id="Wireframe.translate"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Wireframe.translate">[docs]</a> <span class="k">def</span> <span class="nf">translate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tx</span><span class="p">,</span> <span class="n">ty</span><span class="p">,</span> <span class="n">tz</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_points</span> <span class="o">=</span> <span class="p">[</span><span class="n">point</span><span class="o">.</span><span class="n">translate</span><span class="p">(</span><span class="n">tx</span><span class="p">,</span> <span class="n">ty</span><span class="p">,</span> <span class="n">tz</span><span class="p">)</span> <span class="k">for</span> <span class="n">point</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_points</span><span class="p">]</span>
<span class="k">return</span> <span class="bp">self</span></div>
<div class="viewcode-block" id="Wireframe.scale"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Wireframe.scale">[docs]</a> <span class="k">def</span> <span class="nf">scale</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sx</span><span class="p">,</span> <span class="n">sy</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">sz</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">sy</span><span class="p">:</span>
<span class="n">sy</span> <span class="o">=</span> <span class="n">sx</span>
<span class="n">sz</span> <span class="o">=</span> <span class="n">sx</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_points</span> <span class="o">=</span> <span class="p">[</span><span class="n">point</span><span class="o">.</span><span class="n">scale</span><span class="p">(</span><span class="n">sx</span><span class="p">,</span> <span class="n">sy</span><span class="p">,</span> <span class="n">sz</span><span class="p">)</span> <span class="k">for</span> <span class="n">point</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_points</span><span class="p">]</span>
<span class="k">return</span> <span class="bp">self</span></div>
<div class="viewcode-block" id="Wireframe.ch_cs"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Wireframe.ch_cs">[docs]</a> <span class="k">def</span> <span class="nf">ch_cs</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cs</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_points</span> <span class="o">=</span> <span class="p">[</span><span class="n">point</span><span class="o">.</span><span class="n">ch_cs</span><span class="p">(</span><span class="n">cs</span><span class="p">)</span> <span class="k">for</span> <span class="n">point</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_points</span><span class="p">]</span>
<span class="k">return</span> <span class="bp">self</span></div></div>
<div class="viewcode-block" id="Line"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Line">[docs]</a><span class="k">class</span> <span class="nc">Line</span><span class="p">(</span><span class="n">Wireframe</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Line a open wireframe object in local coordinate system&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">point1</span><span class="o">=</span><span class="n">Point</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">point2</span><span class="o">=</span><span class="n">Point</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)):</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">point1</span><span class="p">,</span> <span class="n">point2</span><span class="p">)</span></div>
<div class="viewcode-block" id="Polygon"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Polygon">[docs]</a><span class="k">class</span> <span class="nc">Polygon</span><span class="p">(</span><span class="n">Wireframe</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Polygon as closed wireframe object in local coordinate system&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">points</span><span class="p">):</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">points</span><span class="p">,</span> <span class="n">closed</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></div>
<div class="viewcode-block" id="Circle"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Circle">[docs]</a><span class="k">class</span> <span class="nc">Circle</span><span class="p">(</span><span class="n">Polygon</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Circle a closed wireframe object in local coordinate system&quot;&quot;&quot;</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">radius</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">n</span><span class="o">=</span><span class="mi">10</span><span class="p">):</span>
<span class="n">points</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">n</span><span class="p">):</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">radius</span> <span class="o">*</span> <span class="n">math</span><span class="o">.</span><span class="n">sin</span><span class="p">(</span><span class="n">i</span><span class="o">*</span><span class="mi">2</span><span class="o">*</span><span class="n">math</span><span class="o">.</span><span class="n">pi</span><span class="o">/</span><span class="n">n</span><span class="p">)</span>
<span class="n">y</span> <span class="o">=</span> <span class="n">radius</span> <span class="o">*</span> <span class="n">math</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="n">i</span><span class="o">*</span><span class="mi">2</span><span class="o">*</span><span class="n">math</span><span class="o">.</span><span class="n">pi</span><span class="o">/</span><span class="n">n</span><span class="p">)</span>
<span class="n">points</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">Point</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">points</span><span class="p">)</span></div>
</pre></div>
</div>

View File

@@ -46,7 +46,7 @@
<span class="sd">.. moduleauthor:: Daniel Weschke &lt;daniel.weschke@directbox.de&gt;</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">pylab</span>
<span class="kn">from</span> <span class="nn">geometry2d</span> <span class="kn">import</span> <span class="p">(</span>
<span class="kn">from</span> <span class="nn">.geometry2d</span> <span class="kn">import</span> <span class="p">(</span>
<span class="n">distance</span><span class="p">,</span> <span class="n">angle</span><span class="p">,</span> <span class="n">line</span><span class="p">,</span> <span class="n">interpolate_hermite</span><span class="p">,</span> <span class="n">rotate_xy</span><span class="p">,</span> <span class="n">translate_xy</span>
<span class="p">)</span>

View File

@@ -0,0 +1,346 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>pylib.geometry_plot_pylab &#8212; pylib 2019.12.21 documentation</title>
<link rel="stylesheet" href="../../_static/alabaster.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
<script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script>
<script type="text/javascript" src="../../_static/jquery.js"></script>
<script type="text/javascript" src="../../_static/underscore.js"></script>
<script type="text/javascript" src="../../_static/doctools.js"></script>
<script type="text/javascript" src="../../_static/language_data.js"></script>
<script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
<link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<h1>Source code for pylib.geometry_plot_pylab</h1><div class="highlight"><pre>
<span></span><span class="ch">#!/usr/bin/env python</span>
<span class="c1"># -*- coding: utf-8 -*-</span>
<span class="sd">&quot;&quot;&quot;Geometry plotter using pylab (matplotlib).</span>
<span class="sd">:Date: 2019-12-23</span>
<span class="sd">.. module:: geometry_plot_pylab</span>
<span class="sd"> :platform: *nix, Windows</span>
<span class="sd"> :synopsis: Geometry plotting (pylab).</span>
<span class="sd">.. moduleauthor:: Daniel Weschke &lt;daniel.weschke@directbox.de&gt;</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">math</span>
<span class="c1"># This import registers the 3D projection, but is otherwise unused.</span>
<span class="kn">from</span> <span class="nn">mpl_toolkits.mplot3d</span> <span class="kn">import</span> <span class="n">Axes3D</span>
<span class="k">assert</span> <span class="n">Axes3D</span> <span class="c1"># silence pyflakes</span>
<span class="kn">import</span> <span class="nn">pylab</span>
<span class="n">pylab</span><span class="o">.</span><span class="n">style</span><span class="o">.</span><span class="n">use</span><span class="p">(</span><span class="s1">&#39;dark_background&#39;</span><span class="p">)</span>
<span class="n">pylab</span><span class="o">.</span><span class="n">rcParams</span><span class="p">[</span><span class="s1">&#39;text.color&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;grey&#39;</span> <span class="c1"># lightgrey</span>
<span class="n">pylab</span><span class="o">.</span><span class="n">rcParams</span><span class="p">[</span><span class="s1">&#39;axes.edgecolor&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;grey&#39;</span> <span class="c1"># lightgrey</span>
<span class="n">pylab</span><span class="o">.</span><span class="n">rcParams</span><span class="p">[</span><span class="s1">&#39;grid.color&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;grey&#39;</span> <span class="c1"># lightgrey</span>
<span class="n">pylab</span><span class="o">.</span><span class="n">rcParams</span><span class="p">[</span><span class="s1">&#39;xtick.color&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;grey&#39;</span> <span class="c1"># lightgrey</span>
<span class="n">pylab</span><span class="o">.</span><span class="n">rcParams</span><span class="p">[</span><span class="s1">&#39;ytick.color&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;grey&#39;</span> <span class="c1"># lightgrey</span>
<span class="n">pylab</span><span class="o">.</span><span class="n">rcParams</span><span class="p">[</span><span class="s1">&#39;axes3d.grid&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">False</span>
<span class="c1"># default for dark_background cycler(</span>
<span class="c1"># &#39;color&#39;, [&#39;#1f77b4&#39;, &#39;#ff7f0e&#39;, &#39;#2ca02c&#39;, &#39;#d62728&#39;, &#39;#9467bd&#39;,</span>
<span class="c1"># &#39;#8c564b&#39;, &#39;#e377c2&#39;, &#39;#7f7f7f&#39;, &#39;#bcbd22&#39;, &#39;#17becf&#39;])</span>
<span class="n">pylab</span><span class="o">.</span><span class="n">rcParams</span><span class="p">[</span><span class="s1">&#39;axes.prop_cycle&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">pylab</span><span class="o">.</span><span class="n">cycler</span><span class="p">(</span>
<span class="s2">&quot;color&quot;</span><span class="p">,</span> <span class="p">[</span><span class="s1">&#39;#3498DB&#39;</span><span class="p">,</span> <span class="s1">&#39;#ff7f0e&#39;</span><span class="p">,</span> <span class="s1">&#39;#2ca02c&#39;</span><span class="p">,</span> <span class="s1">&#39;#d62728&#39;</span><span class="p">,</span> <span class="s1">&#39;#9467bd&#39;</span><span class="p">,</span>
<span class="s1">&#39;#8c564b&#39;</span><span class="p">,</span> <span class="s1">&#39;#e377c2&#39;</span><span class="p">,</span> <span class="s1">&#39;#7f7f7f&#39;</span><span class="p">,</span> <span class="s1">&#39;#bcbd22&#39;</span><span class="p">,</span> <span class="s1">&#39;#17becf&#39;</span><span class="p">])</span>
<span class="c1"># remove f for fullscreen toggle, default [&#39;f&#39;, &#39;ctrl+f&#39;]</span>
<span class="n">pylab</span><span class="o">.</span><span class="n">rcParams</span><span class="p">[</span><span class="s1">&#39;keymap.fullscreen&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;ctrl+f&#39;</span><span class="p">]</span>
<span class="c1"># remove L for log/lin toggle, default [&#39;k&#39;, &#39;L&#39;]</span>
<span class="n">pylab</span><span class="o">.</span><span class="n">rcParams</span><span class="p">[</span><span class="s1">&#39;keymap.xscale&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;k&#39;</span><span class="p">]</span>
<span class="c1"># remove l for log/lin toggle, default [&#39;l&#39;]</span>
<span class="n">pylab</span><span class="o">.</span><span class="n">rcParams</span><span class="p">[</span><span class="s1">&#39;keymap.yscale&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
<span class="kn">from</span> <span class="nn">pylab</span> <span class="kn">import</span> <span class="n">mean</span>
<span class="kn">from</span> <span class="nn">.geometry</span> <span class="kn">import</span> <span class="n">CS</span>
<span class="c1"># type of ax</span>
<span class="c1"># - matplotlib.axes._subplots.Axes3DSubplot)</span>
<span class="c1"># - matplotlib.axes.Axes</span>
<span class="c1"># - pylab.Axes</span>
<div class="viewcode-block" id="set_aspect_equal"><a class="viewcode-back" href="../../pylib.geometry_plot_pylab.html#pylib.geometry_plot_pylab.set_aspect_equal">[docs]</a><span class="k">def</span> <span class="nf">set_aspect_equal</span><span class="p">(</span><span class="n">ax</span><span class="p">):</span>
<span class="sd">&#39;&#39;&#39;Make axes of 3D plot have equal scale so that spheres appear as</span>
<span class="sd"> spheres, cubes as cubes, etc.. This is one possible solution to</span>
<span class="sd"> Matplotlib&#39;s ax.set_aspect(&#39;equal&#39;) and ax.axis(&#39;equal&#39;) not</span>
<span class="sd"> working for 3D.</span>
<span class="sd"> :param ax: a pylab axis</span>
<span class="sd"> :type ax: pylab.Axes</span>
<span class="sd"> Source: https://stackoverflow.com/a/35126679</span>
<span class="sd"> &#39;&#39;&#39;</span>
<span class="k">if</span> <span class="n">ax</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s1">&#39;3d&#39;</span><span class="p">:</span>
<span class="n">xlim</span> <span class="o">=</span> <span class="n">ax</span><span class="o">.</span><span class="n">get_xlim3d</span><span class="p">()</span>
<span class="n">ylim</span> <span class="o">=</span> <span class="n">ax</span><span class="o">.</span><span class="n">get_ylim3d</span><span class="p">()</span>
<span class="n">zlim</span> <span class="o">=</span> <span class="n">ax</span><span class="o">.</span><span class="n">get_zlim3d</span><span class="p">()</span>
<span class="n">xmean</span> <span class="o">=</span> <span class="n">mean</span><span class="p">(</span><span class="n">xlim</span><span class="p">)</span>
<span class="n">ymean</span> <span class="o">=</span> <span class="n">mean</span><span class="p">(</span><span class="n">ylim</span><span class="p">)</span>
<span class="n">zmean</span> <span class="o">=</span> <span class="n">mean</span><span class="p">(</span><span class="n">zlim</span><span class="p">)</span>
<span class="n">plot_radius</span> <span class="o">=</span> <span class="nb">max</span><span class="p">([</span><span class="nb">abs</span><span class="p">(</span><span class="n">lim</span> <span class="o">-</span> <span class="n">mean_</span><span class="p">)</span>
<span class="k">for</span> <span class="n">lims</span><span class="p">,</span> <span class="n">mean_</span> <span class="ow">in</span> <span class="p">((</span><span class="n">xlim</span><span class="p">,</span> <span class="n">xmean</span><span class="p">),</span>
<span class="p">(</span><span class="n">ylim</span><span class="p">,</span> <span class="n">ymean</span><span class="p">),</span>
<span class="p">(</span><span class="n">zlim</span><span class="p">,</span> <span class="n">zmean</span><span class="p">))</span>
<span class="k">for</span> <span class="n">lim</span> <span class="ow">in</span> <span class="n">lims</span><span class="p">])</span>
<span class="n">ax</span><span class="o">.</span><span class="n">set_xlim3d</span><span class="p">([</span><span class="n">xmean</span> <span class="o">-</span> <span class="n">plot_radius</span><span class="p">,</span> <span class="n">xmean</span> <span class="o">+</span> <span class="n">plot_radius</span><span class="p">])</span>
<span class="n">ax</span><span class="o">.</span><span class="n">set_ylim3d</span><span class="p">([</span><span class="n">ymean</span> <span class="o">-</span> <span class="n">plot_radius</span><span class="p">,</span> <span class="n">ymean</span> <span class="o">+</span> <span class="n">plot_radius</span><span class="p">])</span>
<span class="n">ax</span><span class="o">.</span><span class="n">set_zlim3d</span><span class="p">([</span><span class="n">zmean</span> <span class="o">-</span> <span class="n">plot_radius</span><span class="p">,</span> <span class="n">zmean</span> <span class="o">+</span> <span class="n">plot_radius</span><span class="p">])</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">ax</span><span class="o">.</span><span class="n">axis</span><span class="p">(</span><span class="s1">&#39;equal&#39;</span><span class="p">)</span></div>
<div class="viewcode-block" id="plot_post"><a class="viewcode-back" href="../../pylib.geometry_plot_pylab.html#pylib.geometry_plot_pylab.plot_post">[docs]</a><span class="k">def</span> <span class="nf">plot_post</span><span class="p">(</span><span class="n">ax</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">ax</span><span class="p">,</span> <span class="n">pylab</span><span class="o">.</span><span class="n">Axes</span><span class="p">):</span>
<span class="n">ax</span> <span class="o">=</span> <span class="p">[</span><span class="n">ax</span><span class="p">]</span>
<span class="k">for</span> <span class="n">axi</span> <span class="ow">in</span> <span class="n">ax</span><span class="p">:</span>
<span class="k">if</span> <span class="n">axi</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s1">&#39;3d&#39;</span><span class="p">:</span>
<span class="c1">#axi.w_xaxis.set_pane_color((0, 0, 0, 0))</span>
<span class="c1">#axi.w_yaxis.set_pane_color((0, 0, 0, 0))</span>
<span class="c1">#axi.w_zaxis.set_pane_color((0, 0, 0, 0))</span>
<span class="n">axi</span><span class="o">.</span><span class="n">w_xaxis</span><span class="o">.</span><span class="n">pane</span><span class="o">.</span><span class="n">fill</span> <span class="o">=</span> <span class="kc">False</span>
<span class="n">axi</span><span class="o">.</span><span class="n">w_yaxis</span><span class="o">.</span><span class="n">pane</span><span class="o">.</span><span class="n">fill</span> <span class="o">=</span> <span class="kc">False</span>
<span class="n">axi</span><span class="o">.</span><span class="n">w_zaxis</span><span class="o">.</span><span class="n">pane</span><span class="o">.</span><span class="n">fill</span> <span class="o">=</span> <span class="kc">False</span>
<span class="n">set_aspect_equal</span><span class="p">(</span><span class="n">axi</span><span class="p">)</span></div>
<div class="viewcode-block" id="wireframe3d"><a class="viewcode-back" href="../../pylib.geometry_plot_pylab.html#pylib.geometry_plot_pylab.wireframe3d">[docs]</a><span class="k">def</span> <span class="nf">wireframe3d</span><span class="p">(</span><span class="n">world</span><span class="p">):</span>
<span class="n">fig</span> <span class="o">=</span> <span class="n">pylab</span><span class="o">.</span><span class="n">figure</span><span class="p">()</span>
<span class="n">ax</span> <span class="o">=</span> <span class="n">fig</span><span class="o">.</span><span class="n">add_subplot</span><span class="p">(</span><span class="mi">111</span><span class="p">,</span> <span class="n">projection</span><span class="o">=</span><span class="s1">&#39;3d&#39;</span><span class="p">)</span>
<span class="p">[</span><span class="n">ax</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="o">*</span><span class="n">i</span><span class="p">,</span> <span class="s1">&#39;C0&#39;</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">world</span><span class="o">.</span><span class="n">wireframes_xyz</span><span class="p">()]</span>
<span class="n">plot_post</span><span class="p">(</span><span class="n">ax</span><span class="p">)</span></div>
<div class="viewcode-block" id="cad_wireframe"><a class="viewcode-back" href="../../pylib.geometry_plot_pylab.html#pylib.geometry_plot_pylab.cad_wireframe">[docs]</a><span class="k">def</span> <span class="nf">cad_wireframe</span><span class="p">(</span><span class="n">world</span><span class="p">,</span> <span class="n">centering</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Graphical projections</span>
<span class="sd"> * Parallel projections</span>
<span class="sd"> * Orthographic</span>
<span class="sd"> * Multiview</span>
<span class="sd"> * \* First-angle</span>
<span class="sd"> * Third-angle</span>
<span class="sd"> * Plan Elevation</span>
<span class="sd"> * Axonometric</span>
<span class="sd"> * \* Isometric</span>
<span class="sd"> * Dimetric</span>
<span class="sd"> * Trimetri</span>
<span class="sd"> * Oblique</span>
<span class="sd"> * Carbinet</span>
<span class="sd"> * Cavalier</span>
<span class="sd"> * Military</span>
<span class="sd"> * Top-down</span>
<span class="sd"> * Perspective projections</span>
<span class="sd"> * 1-point</span>
<span class="sd"> * 2-point</span>
<span class="sd"> * 3-point</span>
<span class="sd"> * Curvilinear</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">centering</span><span class="p">:</span>
<span class="n">world</span><span class="o">.</span><span class="n">center</span><span class="p">()</span>
<span class="n">fig</span> <span class="o">=</span> <span class="n">pylab</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="s1">&#39;geometry-cad&#39;</span><span class="p">)</span>
<span class="n">fig</span><span class="o">.</span><span class="n">clf</span><span class="p">()</span>
<span class="n">ax</span> <span class="o">=</span> <span class="n">fig</span><span class="o">.</span><span class="n">add_subplot</span><span class="p">(</span><span class="mi">111</span><span class="p">)</span>
<span class="n">pylab</span><span class="o">.</span><span class="n">axis</span><span class="p">(</span><span class="s1">&#39;off&#39;</span><span class="p">)</span>
<span class="n">pylab</span><span class="o">.</span><span class="n">subplots_adjust</span><span class="p">(</span><span class="n">left</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">right</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">top</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">bottom</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
<span class="n">lps</span> <span class="o">=</span> <span class="p">[</span><span class="n">ax</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="o">*</span><span class="n">i</span><span class="p">,</span> <span class="s1">&#39;C0&#39;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">world</span><span class="o">.</span><span class="n">wireframes_xy</span><span class="p">()]</span>
<span class="n">plot_post</span><span class="p">(</span><span class="n">ax</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">press</span><span class="p">(</span><span class="n">event</span><span class="p">,</span> <span class="n">world</span><span class="p">,</span> <span class="n">lps</span><span class="p">):</span>
<span class="c1">#print(&#39;key pressed:&#39;, event.key)</span>
<span class="c1">#sys.stdout.flush()</span>
<span class="k">if</span> <span class="n">event</span><span class="o">.</span><span class="n">key</span> <span class="ow">in</span> <span class="p">[</span>
<span class="s1">&#39;left&#39;</span><span class="p">,</span> <span class="s1">&#39;right&#39;</span><span class="p">,</span> <span class="s1">&#39;up&#39;</span><span class="p">,</span> <span class="s1">&#39;down&#39;</span><span class="p">,</span>
<span class="s1">&#39;f&#39;</span><span class="p">,</span> <span class="s1">&#39;t&#39;</span><span class="p">,</span> <span class="s1">&#39;b&#39;</span><span class="p">,</span> <span class="s1">&#39;l&#39;</span><span class="p">,</span> <span class="s1">&#39;r&#39;</span><span class="p">,</span> <span class="s1">&#39;i&#39;</span><span class="p">,</span> <span class="s1">&#39;d&#39;</span><span class="p">,</span>
<span class="s1">&#39;shift+left&#39;</span><span class="p">,</span> <span class="s1">&#39;shift+right&#39;</span><span class="p">,</span> <span class="s1">&#39;shift+up&#39;</span><span class="p">,</span> <span class="s1">&#39;shift+down&#39;</span><span class="p">,</span>
<span class="s1">&#39;ctrl+up&#39;</span><span class="p">,</span> <span class="s1">&#39;ctrl+down&#39;</span><span class="p">,</span> <span class="s1">&#39;ctrl+left&#39;</span><span class="p">,</span> <span class="s1">&#39;ctrl+right&#39;</span><span class="p">]:</span>
<span class="n">d</span> <span class="o">=</span> <span class="n">world</span><span class="o">.</span><span class="n">space_diagonal</span><span class="p">()</span>
<span class="k">if</span> <span class="n">event</span><span class="o">.</span><span class="n">key</span> <span class="o">==</span> <span class="s1">&#39;left&#39;</span><span class="p">:</span>
<span class="n">world</span><span class="o">.</span><span class="n">rotate_y</span><span class="p">(</span><span class="o">-</span><span class="n">math</span><span class="o">.</span><span class="n">pi</span><span class="o">/</span><span class="mi">180</span><span class="o">*</span><span class="mi">10</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">event</span><span class="o">.</span><span class="n">key</span> <span class="o">==</span> <span class="s1">&#39;right&#39;</span><span class="p">:</span>
<span class="n">world</span><span class="o">.</span><span class="n">rotate_y</span><span class="p">(</span><span class="o">+</span><span class="n">math</span><span class="o">.</span><span class="n">pi</span><span class="o">/</span><span class="mi">180</span><span class="o">*</span><span class="mi">10</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">event</span><span class="o">.</span><span class="n">key</span> <span class="o">==</span> <span class="s1">&#39;up&#39;</span><span class="p">:</span>
<span class="n">world</span><span class="o">.</span><span class="n">rotate_x</span><span class="p">(</span><span class="o">-</span><span class="n">math</span><span class="o">.</span><span class="n">pi</span><span class="o">/</span><span class="mi">180</span><span class="o">*</span><span class="mi">10</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">event</span><span class="o">.</span><span class="n">key</span> <span class="o">==</span> <span class="s1">&#39;down&#39;</span><span class="p">:</span>
<span class="n">world</span><span class="o">.</span><span class="n">rotate_x</span><span class="p">(</span><span class="o">+</span><span class="n">math</span><span class="o">.</span><span class="n">pi</span><span class="o">/</span><span class="mi">180</span><span class="o">*</span><span class="mi">10</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">event</span><span class="o">.</span><span class="n">key</span> <span class="o">==</span> <span class="s1">&#39;f&#39;</span><span class="p">:</span>
<span class="n">world</span><span class="o">.</span><span class="n">cs</span><span class="p">(</span><span class="n">CS</span><span class="p">())</span>
<span class="k">if</span> <span class="n">centering</span><span class="p">:</span>
<span class="n">world</span><span class="o">.</span><span class="n">center</span><span class="p">()</span>
<span class="k">elif</span> <span class="n">event</span><span class="o">.</span><span class="n">key</span> <span class="o">==</span> <span class="s1">&#39;t&#39;</span><span class="p">:</span>
<span class="n">world</span><span class="o">.</span><span class="n">cs</span><span class="p">(</span><span class="n">CS</span><span class="o">.</span><span class="n">x90</span><span class="p">())</span>
<span class="k">if</span> <span class="n">centering</span><span class="p">:</span>
<span class="n">world</span><span class="o">.</span><span class="n">center</span><span class="p">()</span>
<span class="k">elif</span> <span class="n">event</span><span class="o">.</span><span class="n">key</span> <span class="o">==</span> <span class="s1">&#39;b&#39;</span><span class="p">:</span>
<span class="n">world</span><span class="o">.</span><span class="n">cs</span><span class="p">(</span><span class="n">CS</span><span class="o">.</span><span class="n">xm90</span><span class="p">())</span>
<span class="k">if</span> <span class="n">centering</span><span class="p">:</span>
<span class="n">world</span><span class="o">.</span><span class="n">center</span><span class="p">()</span>
<span class="k">elif</span> <span class="n">event</span><span class="o">.</span><span class="n">key</span> <span class="o">==</span> <span class="s1">&#39;l&#39;</span><span class="p">:</span>
<span class="n">world</span><span class="o">.</span><span class="n">cs</span><span class="p">(</span><span class="n">CS</span><span class="o">.</span><span class="n">y90</span><span class="p">())</span>
<span class="k">if</span> <span class="n">centering</span><span class="p">:</span>
<span class="n">world</span><span class="o">.</span><span class="n">center</span><span class="p">()</span>
<span class="k">elif</span> <span class="n">event</span><span class="o">.</span><span class="n">key</span> <span class="o">==</span> <span class="s1">&#39;r&#39;</span><span class="p">:</span>
<span class="n">world</span><span class="o">.</span><span class="n">cs</span><span class="p">(</span><span class="n">CS</span><span class="o">.</span><span class="n">ym90</span><span class="p">())</span>
<span class="k">if</span> <span class="n">centering</span><span class="p">:</span>
<span class="n">world</span><span class="o">.</span><span class="n">center</span><span class="p">()</span>
<span class="k">elif</span> <span class="n">event</span><span class="o">.</span><span class="n">key</span> <span class="o">==</span> <span class="s1">&#39;i&#39;</span><span class="p">:</span>
<span class="c1">#theta_y = -math.pi/2/3</span>
<span class="c1">#theta_x = math.pi/2/3</span>
<span class="n">theta_y</span> <span class="o">=</span> <span class="o">-</span><span class="n">math</span><span class="o">.</span><span class="n">pi</span><span class="o">/</span><span class="mi">2</span><span class="o">/</span><span class="mi">2</span>
<span class="n">theta_x</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">asin</span><span class="p">(</span><span class="n">math</span><span class="o">.</span><span class="n">tan</span><span class="p">(</span><span class="n">math</span><span class="o">.</span><span class="n">pi</span><span class="o">/</span><span class="mi">2</span><span class="o">/</span><span class="mi">3</span><span class="p">))</span>
<span class="n">world</span><span class="o">.</span><span class="n">cs</span><span class="p">(</span><span class="n">CS</span><span class="p">()</span><span class="o">.</span><span class="n">rotate_y</span><span class="p">(</span><span class="n">theta_y</span><span class="p">)</span><span class="o">.</span><span class="n">rotate_x</span><span class="p">(</span><span class="n">theta_x</span><span class="p">))</span>
<span class="k">if</span> <span class="n">centering</span><span class="p">:</span>
<span class="n">world</span><span class="o">.</span><span class="n">center</span><span class="p">()</span>
<span class="k">elif</span> <span class="n">event</span><span class="o">.</span><span class="n">key</span> <span class="o">==</span> <span class="s1">&#39;d&#39;</span><span class="p">:</span>
<span class="c1">#theta_x = math.asin(math.tan(math.pi/2/3/2))</span>
<span class="n">theta_y</span> <span class="o">=</span> <span class="o">-</span><span class="n">math</span><span class="o">.</span><span class="n">pi</span><span class="o">/</span><span class="mi">2</span><span class="o">/</span><span class="mi">2</span>
<span class="n">theta_x</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">atan</span><span class="p">(</span><span class="mi">1</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span>
<span class="n">world</span><span class="o">.</span><span class="n">cs</span><span class="p">(</span><span class="n">CS</span><span class="p">()</span><span class="o">.</span><span class="n">rotate_y</span><span class="p">(</span><span class="n">theta_y</span><span class="p">)</span><span class="o">.</span><span class="n">rotate_x</span><span class="p">(</span><span class="n">theta_x</span><span class="p">))</span>
<span class="k">if</span> <span class="n">centering</span><span class="p">:</span>
<span class="n">world</span><span class="o">.</span><span class="n">center</span><span class="p">()</span>
<span class="k">elif</span> <span class="n">event</span><span class="o">.</span><span class="n">key</span> <span class="o">==</span> <span class="s1">&#39;shift+left&#39;</span><span class="p">:</span>
<span class="n">world</span><span class="o">.</span><span class="n">translate</span><span class="p">(</span><span class="o">-</span><span class="mf">0.1</span><span class="o">*</span><span class="n">d</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">event</span><span class="o">.</span><span class="n">key</span> <span class="o">==</span> <span class="s1">&#39;shift+right&#39;</span><span class="p">:</span>
<span class="n">world</span><span class="o">.</span><span class="n">translate</span><span class="p">(</span><span class="mf">0.1</span><span class="o">*</span><span class="n">d</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">event</span><span class="o">.</span><span class="n">key</span> <span class="o">==</span> <span class="s1">&#39;shift+up&#39;</span><span class="p">:</span>
<span class="n">world</span><span class="o">.</span><span class="n">translate</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mf">0.1</span><span class="o">*</span><span class="n">d</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">event</span><span class="o">.</span><span class="n">key</span> <span class="o">==</span> <span class="s1">&#39;shift+down&#39;</span><span class="p">:</span>
<span class="n">world</span><span class="o">.</span><span class="n">translate</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mf">0.1</span><span class="o">*</span><span class="n">d</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">event</span><span class="o">.</span><span class="n">key</span> <span class="o">==</span> <span class="s1">&#39;ctrl+left&#39;</span><span class="p">:</span>
<span class="n">world</span><span class="o">.</span><span class="n">rotate_z</span><span class="p">(</span><span class="o">+</span><span class="n">math</span><span class="o">.</span><span class="n">pi</span><span class="o">/</span><span class="mi">180</span><span class="o">*</span><span class="mi">10</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">event</span><span class="o">.</span><span class="n">key</span> <span class="o">==</span> <span class="s1">&#39;ctrl+right&#39;</span><span class="p">:</span>
<span class="n">world</span><span class="o">.</span><span class="n">rotate_z</span><span class="p">(</span><span class="o">-</span><span class="n">math</span><span class="o">.</span><span class="n">pi</span><span class="o">/</span><span class="mi">180</span><span class="o">*</span><span class="mi">10</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">event</span><span class="o">.</span><span class="n">key</span> <span class="o">==</span> <span class="s1">&#39;ctrl+up&#39;</span><span class="p">:</span>
<span class="n">world</span><span class="o">.</span><span class="n">scale</span><span class="p">(</span><span class="mf">1.1</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">event</span><span class="o">.</span><span class="n">key</span> <span class="o">==</span> <span class="s1">&#39;ctrl+down&#39;</span><span class="p">:</span>
<span class="n">world</span><span class="o">.</span><span class="n">scale</span><span class="p">(</span><span class="mf">0.9</span><span class="p">)</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">lps</span><span class="p">,</span> <span class="n">world</span><span class="o">.</span><span class="n">wireframes_xy</span><span class="p">()):</span>
<span class="n">i</span><span class="o">.</span><span class="n">set_data</span><span class="p">(</span><span class="n">j</span><span class="p">)</span>
<span class="n">fig</span><span class="o">.</span><span class="n">canvas</span><span class="o">.</span><span class="n">draw</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">onresize</span><span class="p">(</span><span class="n">event</span><span class="p">,</span> <span class="n">w</span><span class="p">):</span>
<span class="n">r</span> <span class="o">=</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">w</span><span class="o">.</span><span class="n">space_diagonal</span><span class="p">()</span><span class="o">/</span><span class="mi">2</span>
<span class="n">pylab</span><span class="o">.</span><span class="n">xlim</span><span class="p">((</span><span class="o">-</span><span class="n">r</span><span class="p">,</span> <span class="n">r</span><span class="p">))</span>
<span class="n">pylab</span><span class="o">.</span><span class="n">ylim</span><span class="p">((</span><span class="o">-</span><span class="n">r</span><span class="p">,</span> <span class="n">r</span><span class="p">))</span>
<span class="n">fig</span><span class="o">.</span><span class="n">canvas</span><span class="o">.</span><span class="n">mpl_connect</span><span class="p">(</span><span class="s1">&#39;key_press_event&#39;</span><span class="p">,</span>
<span class="k">lambda</span> <span class="n">event</span><span class="p">:</span> <span class="n">press</span><span class="p">(</span><span class="n">event</span><span class="p">,</span> <span class="n">world</span><span class="p">,</span> <span class="n">lps</span><span class="p">))</span>
<span class="n">fig</span><span class="o">.</span><span class="n">canvas</span><span class="o">.</span><span class="n">mpl_connect</span><span class="p">(</span><span class="s1">&#39;resize_event&#39;</span><span class="p">,</span>
<span class="k">lambda</span> <span class="n">event</span><span class="p">:</span> <span class="n">onresize</span><span class="p">(</span><span class="n">event</span><span class="p">,</span> <span class="n">world</span><span class="p">))</span>
<span class="n">pylab</span><span class="o">.</span><span class="n">text</span><span class="p">(</span>
<span class="mi">0</span><span class="o">+.</span><span class="mi">01</span><span class="p">,</span> <span class="mi">1</span><span class="o">-.</span><span class="mi">015</span><span class="p">,</span>
<span class="s1">&#39;rotate: left, right, up, down, ctrl+left, ctrl+right</span><span class="se">\n</span><span class="s1">&#39;</span> <span class="o">+</span>
<span class="s1">&#39;pan: shift+left, shift+right, shift+up, shift+down</span><span class="se">\n</span><span class="s1">&#39;</span> <span class="o">+</span>
<span class="s1">&#39;zoom: ctrl+up, ctrl+down</span><span class="se">\n</span><span class="s1">&#39;</span> <span class="o">+</span>
<span class="s1">&#39;view: f (front), l (left), r (right), t (top), b (bottom)</span><span class="se">\n</span><span class="s1">&#39;</span> <span class="o">+</span>
<span class="s1">&#39; i (isometric), d (dimetric)&#39;</span><span class="p">,</span>
<span class="n">horizontalalignment</span><span class="o">=</span><span class="s1">&#39;left&#39;</span><span class="p">,</span>
<span class="n">verticalalignment</span><span class="o">=</span><span class="s1">&#39;top&#39;</span><span class="p">,</span>
<span class="n">transform</span><span class="o">=</span><span class="n">fig</span><span class="o">.</span><span class="n">transFigure</span><span class="p">,</span>
<span class="n">bbox</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">facecolor</span><span class="o">=</span><span class="s1">&#39;black&#39;</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="mf">0.5</span><span class="p">),</span>
<span class="n">family</span><span class="o">=</span><span class="s1">&#39;monospace&#39;</span>
<span class="p">)</span>
<span class="n">pylab</span><span class="o">.</span><span class="n">show</span><span class="p">()</span></div>
</pre></div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../../index.html">pylib</a></h1>
<h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../modules.html">pylib</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../../index.html">Documentation overview</a><ul>
<li><a href="../index.html">Module code</a><ul>
</ul></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2019, Daniel Weschke.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.1</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
</div>
</body>
</html>

View File

@@ -56,69 +56,68 @@
<div class="viewcode-block" id="vector"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.vector">[docs]</a><span class="k">class</span> <span class="nc">vector</span><span class="p">(</span><span class="nb">list</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Use/create vector like lists</span>
<span class="sd"> * size -&gt; len(a)</span>
<span class="sd"> * abs -&gt; abs(a)</span>
<span class="sd"> * dot -&gt; a * b</span>
<span class="sd"> * outer -&gt; a @ b</span>
<span class="sd"> * size, length of a vector use len(a)</span>
<span class="sd"> * absolute, magntude, norm of a vector use abs(a), see</span>
<span class="sd"> :meth:`__abs__`</span>
<span class="sd"> * dot product use a * b, see :meth:`__mul__` and :meth:`__rmul__`</span>
<span class="sd"> * outer product use a @ b, see :meth:`__matmul__`</span>
<span class="sd"> use super constructor</span>
<span class="sd"> :__iter__:</span>
<span class="sd"> use super __iter__</span>
<span class="sd"> &gt;&gt;&gt; [i*2 for i in vector([1, 2, 3])]</span>
<span class="sd"> [2, 4, 6]</span>
<span class="sd"> use super __setitem__</span>
<span class="sd"> :__setitem__:</span>
<span class="sd"> &gt;&gt;&gt; v = vector([1,2,3,4,5])</span>
<span class="sd"> &gt;&gt;&gt; v[3:5] = [1,2]</span>
<span class="sd"> &gt;&gt;&gt; v = vector([1, 2, 3, 4, 5])</span>
<span class="sd"> &gt;&gt;&gt; v[3:5] = [1, 2]</span>
<span class="sd"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [1, 2, 3, 1, 2]</span>
<span class="sd"> &gt;&gt;&gt; isinstance(v, vector)</span>
<span class="sd"> True</span>
<span class="sd"> use super __lt__(a, b)</span>
<span class="sd"> :__eq__(a, b):</span>
<span class="sd"> use super __le__(a, b)</span>
<span class="sd"> &gt;&gt;&gt; vector([1, 2, 3, 1, 2]) == vector([1, 2, 3, 1, 2])</span>
<span class="sd"> True</span>
<span class="sd"> &gt;&gt;&gt; vector([1, 2, 3, 1, 2]) == vector([1, 2, 3, 2, 1])</span>
<span class="sd"> False</span>
<span class="sd"> use super __eq__(a, b)</span>
<span class="sd"> :__ne__(a, b):</span>
<span class="sd"> &gt;&gt;&gt; v = vector([1,2,3,1,2])</span>
<span class="sd"> &gt;&gt;&gt; v2 = vector([1,2,3,1,2])</span>
<span class="sd"> &gt;&gt;&gt; v == v2</span>
<span class="sd"> &gt;&gt;&gt; vector([1, 2, 3, 1, 2]) != vector([1, 2, 3, 1, 2])</span>
<span class="sd"> False</span>
<span class="sd"> &gt;&gt;&gt; vector([1, 2, 3, 1, 2]) != vector([1, 2, 3, 2, 1])</span>
<span class="sd"> True</span>
<span class="sd"> use super __ne__(a, b)</span>
<span class="sd"> :__contains__:</span>
<span class="sd"> use super __ge__(a, b)</span>
<span class="sd"> use super __gt__(a, b)</span>
<span class="sd"> use super __contains__</span>
<span class="sd"> &gt;&gt;&gt; 2 in vector([1,2,3])</span>
<span class="sd"> &gt;&gt;&gt; 2 in vector([1, 2, 3])</span>
<span class="sd"> True</span>
<span class="sd"> __isub__</span>
<span class="sd"> :__isub__:</span>
<span class="sd"> &gt;&gt;&gt; v = vector([1,2,3])</span>
<span class="sd"> &gt;&gt;&gt; v -= vector([3,3,3])</span>
<span class="sd"> &gt;&gt;&gt; v = vector([1, 2, 3])</span>
<span class="sd"> &gt;&gt;&gt; v -= vector([3, 3, 3])</span>
<span class="sd"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [-2, -1, 0]</span>
<span class="sd"> __imul__</span>
<span class="sd"> :__imul__:</span>
<span class="sd"> &gt;&gt;&gt; v = vector([1,2,3])</span>
<span class="sd"> &gt;&gt;&gt; v *= vector([3,3,3])</span>
<span class="sd"> &gt;&gt;&gt; v = vector([1, 2, 3])</span>
<span class="sd"> &gt;&gt;&gt; v *= vector([3, 3, 3])</span>
<span class="sd"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> 18</span>
<span class="sd"> __imatmul__</span>
<span class="sd"> :__imatmul__:</span>
<span class="sd"> &gt;&gt;&gt; m = vector([1,2,3])</span>
<span class="sd"> &gt;&gt;&gt; m *= vector([3,3,3])</span>
<span class="sd"> &gt;&gt;&gt; m = vector([1, 2, 3])</span>
<span class="sd"> &gt;&gt;&gt; m *= vector([3, 3, 3])</span>
<span class="sd"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [[3, 3, 3], [6, 6, 6], [9, 9, 9]]</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="fm">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="p">):</span>
<div class="viewcode-block" id="vector.__getitem__"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.vector.__getitem__">[docs]</a> <span class="k">def</span> <span class="fm">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> For index return value, for range return new vector object.</span>
@@ -133,57 +132,68 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># use the list.__getslice__ method and convert result to vector</span>
<span class="n">item</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__getitem__</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">(</span><span class="n">item</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="nb">list</span><span class="p">)</span> <span class="k">else</span> <span class="n">item</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">(</span><span class="n">item</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="nb">list</span><span class="p">)</span> <span class="k">else</span> <span class="n">item</span></div>
<span class="k">def</span> <span class="fm">__pos__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;+ a (new object)</span>
<div class="viewcode-block" id="vector.__pos__"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.vector.__pos__">[docs]</a> <span class="k">def</span> <span class="fm">__pos__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;\+ a (new object)</span>
<span class="sd"> .. math::</span>
<span class="sd"> \mathbf{b} = +\mathbf{a}</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="o">*</span><span class="bp">self</span><span class="p">])</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="o">*</span><span class="bp">self</span><span class="p">])</span></div>
<span class="k">def</span> <span class="fm">__neg__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;- a (new object)</span>
<div class="viewcode-block" id="vector.__neg__"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.vector.__neg__">[docs]</a> <span class="k">def</span> <span class="fm">__neg__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;\- a (new object)</span>
<span class="sd"> .. math::</span>
<span class="sd"> \mathbf{b} = -\mathbf{a}</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="o">-</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="p">])</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="o">-</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="p">])</span></div>
<span class="k">def</span> <span class="fm">__add__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<div class="viewcode-block" id="vector.__add__"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.vector.__add__">[docs]</a> <span class="k">def</span> <span class="fm">__add__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;a + b (new object)</span>
<span class="sd"> .. math::</span>
<span class="sd"> \mathbf{c} = \mathbf{a} + \mathbf{b}</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; v = vector([1,2,3]) + vector([1,2,3])</span>
<span class="sd"> &gt;&gt;&gt; v = vector([1, 2, 3]) + vector([1, 2, 3])</span>
<span class="sd"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [2, 4, 6]</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="n">i</span><span class="o">+</span><span class="n">j</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)])</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="n">i</span><span class="o">+</span><span class="n">j</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)])</span></div>
<span class="k">def</span> <span class="fm">__iadd__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="c1"># overwrite because [1, 2] + [5, 8] = [1, 2, 5, 8]</span>
<div class="viewcode-block" id="vector.__iadd__"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.vector.__iadd__">[docs]</a> <span class="k">def</span> <span class="fm">__iadd__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;a += b (new object)</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; v = vector([1,2,3])</span>
<span class="sd"> &gt;&gt;&gt; v += vector([3,3,3])</span>
<span class="sd"> &gt;&gt;&gt; v = vector([1, 2, 3])</span>
<span class="sd"> &gt;&gt;&gt; v += vector([3, 3, 3])</span>
<span class="sd"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [4, 5, 6]</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="n">i</span><span class="o">+</span><span class="n">j</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)])</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="n">i</span><span class="o">+</span><span class="n">j</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)])</span></div>
<span class="k">def</span> <span class="fm">__sub__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<div class="viewcode-block" id="vector.__sub__"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.vector.__sub__">[docs]</a> <span class="k">def</span> <span class="fm">__sub__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;a - b (new object)</span>
<span class="sd"> .. math::</span>
<span class="sd"> \mathbf{c} = \mathbf{a} - \mathbf{b}</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; v = vector([1,2,3]) - vector([1,2,3])</span>
<span class="sd"> &gt;&gt;&gt; v = vector([1, 2, 3]) - vector([1, 2, 3])</span>
<span class="sd"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [0, 0, 0]</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="n">i</span><span class="o">-</span><span class="n">j</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)])</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="n">i</span><span class="o">-</span><span class="n">j</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)])</span></div>
<span class="k">def</span> <span class="fm">__mul__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<div class="viewcode-block" id="vector.__mul__"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.vector.__mul__">[docs]</a> <span class="k">def</span> <span class="fm">__mul__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Scalar multiplication, dot product (inner product) or</span>
<span class="sd"> vector-matrix multiplication.</span>
<span class="sd"> a * b (new object)</span>
<span class="sd"> vector-matrix multiplication. (new object)</span>
<span class="sd"> :type other: scalar, vector (or 1d list), matrix (or 2d list)</span>
@@ -193,18 +203,18 @@
<span class="sd"> \mathbf{c} &amp;= \mathbf{a} \cdot \mathbf{B}</span>
<span class="sd"> .. note::</span>
<span class="sd"> No size checking will be conducted, therefore no exceptions for</span>
<span class="sd"> wrong usage (result will be nonsense).</span>
<span class="sd"> No size checking will be conducted, therefore no exceptions</span>
<span class="sd"> for wrong usage (result will be nonsense).</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; v = vector([1,2,3,4,5])*3</span>
<span class="sd"> &gt;&gt;&gt; v = vector([1, 2, 3, 4, 5]) * 3</span>
<span class="sd"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [3, 6, 9, 12, 15]</span>
<span class="sd"> &gt;&gt;&gt; v = vector([1,2,3,4,5])*3.</span>
<span class="sd"> &gt;&gt;&gt; v = vector([1, 2, 3, 4, 5]) * 3.</span>
<span class="sd"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [3.0, 6.0, 9.0, 12.0, 15.0]</span>
<span class="sd"> &gt;&gt;&gt; s = vector([1,2,3])*vector([1,2,3])</span>
<span class="sd"> &gt;&gt;&gt; s = vector([1, 2, 3]) * vector([1, 2, 3])</span>
<span class="sd"> &gt;&gt;&gt; print(s)</span>
<span class="sd"> 14</span>
@@ -215,15 +225,14 @@
<span class="k">return</span> <span class="nb">sum</span><span class="p">([</span><span class="n">i</span><span class="o">*</span><span class="n">j</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)])</span>
<span class="k">except</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span> <span class="c1"># vector * matrix</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="nb">sum</span><span class="p">(</span><span class="n">c</span><span class="o">*</span><span class="n">d</span> <span class="k">for</span> <span class="n">c</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">b_col</span><span class="p">))</span> <span class="k">for</span> <span class="n">b_col</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="n">other</span><span class="p">)])</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="nb">sum</span><span class="p">(</span><span class="n">c</span><span class="o">*</span><span class="n">d</span> <span class="k">for</span> <span class="n">c</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">b_col</span><span class="p">))</span> <span class="k">for</span>
<span class="n">b_col</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="n">other</span><span class="p">)])</span>
<span class="k">except</span><span class="p">:</span> <span class="c1"># vector * scalar</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="n">i</span><span class="o">*</span><span class="n">other</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="p">])</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="n">i</span><span class="o">*</span><span class="n">other</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="p">])</span></div>
<span class="k">def</span> <span class="fm">__rmul__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<div class="viewcode-block" id="vector.__rmul__"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.vector.__rmul__">[docs]</a> <span class="k">def</span> <span class="fm">__rmul__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Scalar multiplication, dot product (inner product) or</span>
<span class="sd"> matrix-vector multiplication.</span>
<span class="sd"> a * b (new object)</span>
<span class="sd"> matrix-vector multiplication. (new object)</span>
<span class="sd"> :type other: scalar (or 1d list and 2d list)</span>
@@ -233,32 +242,32 @@
<span class="sd"> \mathbf{c} &amp;= \mathbf{A} \cdot \mathbf{b}</span>
<span class="sd"> .. note::</span>
<span class="sd"> No size checking will be conducted, therefore no exceptions for</span>
<span class="sd"> wrong usage (result will be nonsense).</span>
<span class="sd"> No size checking will be conducted, therefore no exceptions</span>
<span class="sd"> for wrong usage (result will be nonsense).</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; v = 3*vector([1,2,3,4,5])</span>
<span class="sd"> &gt;&gt;&gt; v = 3 * vector([1, 2, 3, 4, 5])</span>
<span class="sd"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [3, 6, 9, 12, 15]</span>
<span class="sd"> &gt;&gt;&gt; v = 3.*vector([1,2,3,4,5])</span>
<span class="sd"> &gt;&gt;&gt; v = 3. * vector([1, 2, 3, 4, 5])</span>
<span class="sd"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [3.0, 6.0, 9.0, 12.0, 15.0]</span>
<span class="sd"> .. seealso::</span>
<span class="sd"> :meth:`__mul__`</span>
<span class="sd"> :meth:`matrix.__mul__` for matrix * vector</span>
<span class="sd"> :meth:`__mul__` and :meth:`matrix.__mul__` for matrix * vector</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">try</span><span class="p">:</span> <span class="c1"># 2d list * vector (matrix * vector see matrix.__mul__)</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="nb">sum</span><span class="p">(</span><span class="n">c</span><span class="o">*</span><span class="n">d</span> <span class="k">for</span> <span class="n">c</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">a_row</span><span class="p">,</span> <span class="bp">self</span><span class="p">))</span> <span class="k">for</span> <span class="n">a_row</span> <span class="ow">in</span> <span class="n">other</span><span class="p">])</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="nb">sum</span><span class="p">(</span><span class="n">c</span><span class="o">*</span><span class="n">d</span> <span class="k">for</span> <span class="n">c</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">a_row</span><span class="p">,</span> <span class="bp">self</span><span class="p">))</span> <span class="k">for</span>
<span class="n">a_row</span> <span class="ow">in</span> <span class="n">other</span><span class="p">])</span>
<span class="k">except</span><span class="p">:</span> <span class="c1"># scalar * vector</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">*</span><span class="n">other</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">*</span><span class="n">other</span></div>
<span class="k">def</span> <span class="fm">__matmul__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<div class="viewcode-block" id="vector.__matmul__"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.vector.__matmul__">[docs]</a> <span class="k">def</span> <span class="fm">__matmul__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Outer product a @ b (new object)</span>
<span class="sd"> .. math::</span>
<span class="sd"> \vec{a} \otimes \vec{b}</span>
<span class="sd"> \mathbf{c} = \mathbf{a} \otimes \mathbf{b}</span>
<span class="sd"> =</span>
<span class="sd"> \begin{pmatrix}</span>
<span class="sd"> a_{1}\\</span>
@@ -281,35 +290,98 @@
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; m = vector([1,2,3]) @ vector([1,2,4])</span>
<span class="sd"> &gt;&gt;&gt; m = vector([1, 2, 3]) @ vector([1, 2, 4])</span>
<span class="sd"> &gt;&gt;&gt; print(m)</span>
<span class="sd"> [[1, 2, 4], [2, 4, 8], [3, 6, 12]]</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">try</span><span class="p">:</span> <span class="c1"># vector * vector</span>
<span class="k">return</span> <span class="n">matrix</span><span class="p">([[</span><span class="n">i</span><span class="o">*</span><span class="n">j</span> <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="n">other</span><span class="p">]</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="p">])</span>
<span class="k">except</span><span class="p">:</span> <span class="c1"># vector * number</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">*</span><span class="n">other</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">*</span><span class="n">other</span></div>
<span class="k">def</span> <span class="fm">__abs__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<div class="viewcode-block" id="vector.__abs__"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.vector.__abs__">[docs]</a> <span class="k">def</span> <span class="fm">__abs__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Magnitude / norm of a vector</span>
<span class="sd"> .. math::</span>
<span class="sd"> b = \sqrt{\sum a_i^2}</span>
<span class="sd"> b = |\mathbf{a}| = \sqrt{\sum a_i^2} =</span>
<span class="sd"> \sqrt{\mathbf{a} \cdot \mathbf{a}}</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; norm([3, 4])</span>
<span class="sd"> 5</span>
<span class="sd"> &gt;&gt;&gt; norm(vector([3, 4]))</span>
<span class="sd"> 5</span>
<span class="sd"> &gt;&gt;&gt; v = vector([3, 4])</span>
<span class="sd"> &gt;&gt;&gt; abs(v)</span>
<span class="sd"> 5.0</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">math</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="bp">self</span> <span class="o">*</span> <span class="bp">self</span><span class="p">)</span>
<span class="k">return</span> <span class="n">math</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="bp">self</span> <span class="o">*</span> <span class="bp">self</span><span class="p">)</span></div>
<span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">str</span><span class="p">([</span><span class="o">*</span><span class="bp">self</span><span class="p">])</span>
<div class="viewcode-block" id="vector.__lt__"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.vector.__lt__">[docs]</a> <span class="k">def</span> <span class="fm">__lt__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Test if this object is lower (smaller) than the other object.</span>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;vector(&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;)&quot;</span>
<span class="sd"> .. math::</span>
<span class="sd"> |\mathbf{a}| \lt |\mathbf{b}|</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; vector([3, 2, 1]) &lt; vector([1, 2, 3])</span>
<span class="sd"> False</span>
<span class="sd"> &gt;&gt;&gt; vector([3, 2, 1]) &lt; vector([1, 2, 4])</span>
<span class="sd"> True</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="nb">abs</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">&lt;</span> <span class="nb">abs</span><span class="p">(</span><span class="n">other</span><span class="p">)</span></div>
<div class="viewcode-block" id="vector.__le__"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.vector.__le__">[docs]</a> <span class="k">def</span> <span class="fm">__le__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Test if this object is lower (smaller) than or equal the</span>
<span class="sd"> other object.</span>
<span class="sd"> .. math::</span>
<span class="sd"> |\mathbf{a}| \le |\mathbf{b}|</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; vector([3, 2, 1]) &lt;= vector([1, 2, 3])</span>
<span class="sd"> True</span>
<span class="sd"> &gt;&gt;&gt; vector([3, 2, 1]) &lt;= vector([1, 2, 2])</span>
<span class="sd"> False</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="nb">abs</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">&lt;=</span> <span class="nb">abs</span><span class="p">(</span><span class="n">other</span><span class="p">)</span></div>
<div class="viewcode-block" id="vector.__gt__"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.vector.__gt__">[docs]</a> <span class="k">def</span> <span class="fm">__gt__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Test if this object is greater (larger) than the other</span>
<span class="sd"> object.</span>
<span class="sd"> .. math::</span>
<span class="sd"> |\mathbf{a}| \gt |\mathbf{b}|</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; vector([1, 2, 3]) &gt; vector([3, 2, 1])</span>
<span class="sd"> False</span>
<span class="sd"> &gt;&gt;&gt; vector([1, 2, 3]) &gt; vector([2, 2, 1])</span>
<span class="sd"> True</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="nb">abs</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">&gt;</span> <span class="nb">abs</span><span class="p">(</span><span class="n">other</span><span class="p">)</span></div>
<div class="viewcode-block" id="vector.__ge__"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.vector.__ge__">[docs]</a> <span class="k">def</span> <span class="fm">__ge__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Test if this object is greater (larger) than or equal the</span>
<span class="sd"> other object.</span>
<span class="sd"> .. math::</span>
<span class="sd"> |\mathbf{a}| \ge |\mathbf{b}|</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; vector([1, 2, 3]) &gt;= vector([3, 2, 1])</span>
<span class="sd"> True</span>
<span class="sd"> &gt;&gt;&gt; vector([1, 2, 3]) &gt;= vector([4, 2, 1])</span>
<span class="sd"> False</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="nb">abs</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="nb">abs</span><span class="p">(</span><span class="n">other</span><span class="p">)</span></div>
<div class="viewcode-block" id="vector.__str__"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.vector.__str__">[docs]</a> <span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">str</span><span class="p">([</span><span class="o">*</span><span class="bp">self</span><span class="p">])</span></div>
<div class="viewcode-block" id="vector.__repr__"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.vector.__repr__">[docs]</a> <span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;vector(&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;)&quot;</span></div>
<div class="viewcode-block" id="vector.full"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.vector.full">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">full</span><span class="p">(</span><span class="n">length</span><span class="p">,</span> <span class="n">fill_value</span><span class="p">):</span>
@@ -363,8 +435,8 @@
<div class="viewcode-block" id="vector.random"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.vector.random">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">random</span><span class="p">(</span><span class="n">shape</span><span class="p">,</span> <span class="n">lmin</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">lmax</span><span class="o">=</span><span class="mf">1.0</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Returns a random vector of length n or matrix of size m rows, n</span>
<span class="sd"> columns filled with random numbers.</span>
<span class="sd">&quot;&quot;&quot;Returns a random vector of length n or matrix of size m rows,</span>
<span class="sd"> n columns filled with random numbers.</span>
<span class="sd"> :Example:</span>
@@ -386,10 +458,10 @@
<span class="sd"> :type a: vector</span>
<span class="sd"> .. math::</span>
<span class="sd"> \vec{e}_a = \frac{\vec{a}}{|\vec{a}|}</span>
<span class="sd"> \mathbf{\hat{a}} = \frac{\mathbf{a}}{|\mathbf{a}|}</span>
<span class="sd"> .. seealso::</span>
<span class="sd"> :meth:`norm` for a norm (magnitude) of a vector</span>
<span class="sd"> :meth:`__abs__` for a norm (magnitude) of a vector</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">a_mag</span> <span class="o">=</span> <span class="nb">abs</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="n">i</span><span class="o">/</span><span class="n">a_mag</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">a</span><span class="p">])</span></div>
@@ -450,15 +522,12 @@
<span class="sd"> The direction of c can be found with the right-hand rule.</span>
<span class="sd"> .. math::</span>
<span class="sd"> \vec{c} = \vec{a} \times \vec{b}</span>
<span class="sd"> \mathbf{c} = \mathbf{a} \times \mathbf{b}</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="p">[</span><span class="n">a</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">b</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">-</span> <span class="n">a</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">*</span><span class="n">b</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span>
<span class="n">a</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">*</span><span class="n">b</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="n">a</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">b</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span>
<span class="n">a</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">b</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">a</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">b</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span></div>
<div class="viewcode-block" id="vector.xyz"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.vector.xyz">[docs]</a> <span class="k">def</span> <span class="nf">xyz</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="p">[:</span><span class="mi">3</span><span class="p">]</span></div>
<div class="viewcode-block" id="vector.rotate_x"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.vector.rotate_x">[docs]</a> <span class="k">def</span> <span class="nf">rotate_x</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">theta</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Rotation about the x dirction.</span>
@@ -528,10 +597,10 @@
<span class="sd"> uniform scaling if sx=sy=sz=s.</span>
<span class="sd"> Note that scaling happens around the origin, so objects not</span>
<span class="sd"> centered at the origin will have their centers move. To avoid this,</span>
<span class="sd"> either scale the object when it&#39;s located at the origin, or</span>
<span class="sd"> perform a translation afterwards to move the object back to where</span>
<span class="sd"> it should be.</span>
<span class="sd"> centered at the origin will have their centers move. To avoid</span>
<span class="sd"> this, either scale the object when it&#39;s located at the origin,</span>
<span class="sd"> or perform a translation afterwards to move the object back to</span>
<span class="sd"> where it should be.</span>
<span class="sd"> .. math::</span>
<span class="sd"> \begin{bmatrix}x&#39; \\ y&#39; \\ z&#39; \\ h&#39;\end{bmatrix} =</span>
@@ -543,16 +612,17 @@
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> \begin{bmatrix}x \\ y \\ z \\ h\end{bmatrix}</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">sy</span><span class="p">:</span>
<span class="c1"># if not sy is not suitable because 0 is also false</span>
<span class="k">if</span> <span class="n">sy</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">sy</span> <span class="o">=</span> <span class="n">sx</span>
<span class="n">sz</span> <span class="o">=</span> <span class="n">sx</span>
<span class="bp">self</span><span class="p">[:]</span> <span class="o">=</span> <span class="n">matrix</span><span class="o">.</span><span class="n">s</span><span class="p">(</span><span class="n">sx</span><span class="p">,</span> <span class="n">sy</span><span class="p">,</span> <span class="n">sz</span><span class="p">)</span> <span class="o">*</span> <span class="bp">self</span>
<span class="k">return</span> <span class="bp">self</span></div>
<div class="viewcode-block" id="vector.ch_cs"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.vector.ch_cs">[docs]</a> <span class="k">def</span> <span class="nf">ch_cs</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cs</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Transform this vector from its defined coordinate system to a</span>
<span class="sd"> new coordinate system, defined by the given coordinate system (u,</span>
<span class="sd"> v and w direction vectors).</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Transform this vector from its defined coordinate system to</span>
<span class="sd"> a new coordinate system, defined by the given coordinate system</span>
<span class="sd"> (u, v and w direction vectors).</span>
<span class="sd"> .. math::</span>
<span class="sd"> \begin{bmatrix}x&#39; \\ y&#39; \\ z&#39; \\ h&#39;\end{bmatrix} =</span>
@@ -571,30 +641,32 @@
<span class="sd">&quot;&quot;&quot;Use/create matrix like list of lists</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="fm">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="p">):</span>
<div class="viewcode-block" id="matrix.__getitem__"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.matrix.__getitem__">[docs]</a> <span class="k">def</span> <span class="fm">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> For index return value, for range return new vector object.</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; m = matrix([[1, 2, 3, 0], [4, 5, 6, 0], [7, 8, 9, 0], [0, 0, 0, 0]])</span>
<span class="sd"> &gt;&gt;&gt; m = matrix([[1, 2, 3, 0], [4, 5, 6, 0], [7, 8, 9, 0], \</span>
<span class="sd"> [0, 0, 0, 0]])</span>
<span class="sd"> &gt;&gt;&gt; print(m[2])</span>
<span class="sd"> [7, 8, 9, 0]</span>
<span class="sd"> &gt;&gt;&gt; print(m[:,1:3])</span>
<span class="sd"> &gt;&gt;&gt; print(m[:, 1:3])</span>
<span class="sd"> [[2, 3], [5, 6], [8, 9], [0, 0]]</span>
<span class="sd"> &gt;&gt;&gt; print(m[0:2,1:3])</span>
<span class="sd"> &gt;&gt;&gt; print(m[0:2, 1:3])</span>
<span class="sd"> [[2, 3], [5, 6]]</span>
<span class="sd"> &gt;&gt;&gt; print(m[::2,::2])</span>
<span class="sd"> &gt;&gt;&gt; print(m[::2, ::2])</span>
<span class="sd"> [[1, 3], [7, 9]]</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># index: slice(stop), slice(start, stop[, step])</span>
<span class="c1"># for e. g. m[(1,3),:] -&gt; index = ((1, 3), slice(None, None, None))</span>
<span class="c1"># for m[(1,3),:] -&gt; index = ((1, 3), slice(None, None, None))</span>
<span class="c1"># use the list.__getslice__ method and convert result to vector</span>
<span class="k">try</span><span class="p">:</span> <span class="c1"># 2d slicing (tuple of sclices)</span>
<span class="n">item</span> <span class="o">=</span> <span class="p">[</span><span class="n">row</span><span class="o">.</span><span class="fm">__getitem__</span><span class="p">(</span><span class="n">index</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__getitem__</span><span class="p">(</span><span class="n">index</span><span class="p">[</span><span class="mi">0</span><span class="p">])]</span>
<span class="n">item</span> <span class="o">=</span> <span class="p">[</span><span class="n">row</span><span class="o">.</span><span class="fm">__getitem__</span><span class="p">(</span><span class="n">index</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="k">for</span>
<span class="n">row</span> <span class="ow">in</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__getitem__</span><span class="p">(</span><span class="n">index</span><span class="p">[</span><span class="mi">0</span><span class="p">])]</span>
<span class="k">except</span><span class="p">:</span> <span class="c1"># 1d slicing</span>
<span class="n">item</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__getitem__</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
<span class="k">return</span> <span class="n">matrix</span><span class="p">(</span><span class="n">item</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="nb">list</span><span class="p">)</span> <span class="k">else</span> <span class="n">item</span>
<span class="k">return</span> <span class="n">matrix</span><span class="p">(</span><span class="n">item</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="nb">list</span><span class="p">)</span> <span class="k">else</span> <span class="n">item</span></div>
<div class="viewcode-block" id="matrix.rx"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.matrix.rx">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">rx</span><span class="p">(</span><span class="n">theta</span><span class="p">):</span>
@@ -603,7 +675,7 @@
<span class="sd"> Rotates the coordinate system of vectors</span>
<span class="sd"> .. math::</span>
<span class="sd"> R_{x}(\theta) =</span>
<span class="sd"> \mathbf{R}_{x}(\theta) =</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> 1 &amp; 0 &amp; 0 &amp; 0 \\</span>
<span class="sd"> 0 &amp; \cos \theta &amp; -\sin \theta &amp; 0 \\</span>
@@ -626,7 +698,7 @@
<span class="sd"> Rotates the coordinate system of vectors</span>
<span class="sd"> .. math::</span>
<span class="sd"> R_{y}(\theta) =</span>
<span class="sd"> \mathbf{R}_{y}(\theta) =</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> \cos \theta &amp; 0 &amp; \sin \theta &amp; 0 \\</span>
<span class="sd"> 0 &amp; 1 &amp; 0 &amp; 0 \\</span>
@@ -649,7 +721,7 @@
<span class="sd"> Rotates the coordinate system of vectors</span>
<span class="sd"> .. math::</span>
<span class="sd"> R_{z}(\theta) =</span>
<span class="sd"> \mathbf{R}_{z}(\theta) =</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> \cos \theta &amp; -\sin \theta &amp; 0 &amp; 0 \\</span>
<span class="sd"> \sin \theta &amp; \cos \theta &amp; 0 &amp; 0 \\</span>
@@ -660,14 +732,17 @@
<span class="sd"> :Example:</span>
<span class="sd"> .. math::</span>
<span class="sd"> R_{z}(\theta) \begin{bmatrix}1 \\ 0 \\ 0 \\ 1\end{bmatrix} =</span>
<span class="sd"> \mathbf{R}_{z}(\theta)</span>
<span class="sd"> \begin{bmatrix}1 \\ 0 \\ 0 \\ 1\end{bmatrix}</span>
<span class="sd"> &amp;=</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> \cos 90° &amp; -\sin 90° &amp; 0 &amp; 0 \\</span>
<span class="sd"> \sin 90° &amp; \cos 90° &amp; 0 &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; 1 &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; 1</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> \begin{bmatrix}1 \\ 0 \\ 0 \\ 1\end{bmatrix} =</span>
<span class="sd"> \begin{bmatrix}1 \\ 0 \\ 0 \\ 1\end{bmatrix} \\</span>
<span class="sd"> &amp;=</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> 0 &amp; -1 &amp; 0 &amp; 0 \\</span>
<span class="sd"> 1 &amp; 0 &amp; 0 &amp; 0 \\</span>
@@ -690,7 +765,7 @@
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Translation matrix</span>
<span class="sd"> .. math::</span>
<span class="sd"> T =</span>
<span class="sd"> \mathbf{T} =</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> 1 &amp; 0 &amp; 0 &amp; t_x \\</span>
<span class="sd"> 0 &amp; 1 &amp; 0 &amp; t_y \\</span>
@@ -710,13 +785,13 @@
<span class="sd"> uniform scaling if sx=sy=sz=s.</span>
<span class="sd"> Note that scaling happens around the origin, so objects not</span>
<span class="sd"> centered at the origin will have their centers move. To avoid this,</span>
<span class="sd"> either scale the object when it&#39;s located at the origin, or</span>
<span class="sd"> perform a translation afterwards to move the object back to where</span>
<span class="sd"> it should be.</span>
<span class="sd"> centered at the origin will have their centers move. To avoid</span>
<span class="sd"> this, either scale the object when it&#39;s located at the origin,</span>
<span class="sd"> or perform a translation afterwards to move the object back to</span>
<span class="sd"> where it should be.</span>
<span class="sd"> .. math::</span>
<span class="sd"> S =</span>
<span class="sd"> \mathbf{S} =</span>
<span class="sd"> \begin{bmatrix}</span>
<span class="sd"> s_x &amp; 0 &amp; 0 &amp; 0 \\</span>
<span class="sd"> 0 &amp; s_y &amp; 0 &amp; 0 \\</span>
@@ -724,7 +799,8 @@
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; 1</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">sy</span><span class="p">:</span>
<span class="c1"># if not sy is not suitable because 0 is also false</span>
<span class="k">if</span> <span class="n">sy</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">sy</span> <span class="o">=</span> <span class="n">sx</span>
<span class="n">sz</span> <span class="o">=</span> <span class="n">sx</span>
<span class="n">T</span> <span class="o">=</span> <span class="n">matrix</span><span class="p">([[</span><span class="n">sx</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span>
@@ -733,11 +809,9 @@
<span class="p">[</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">]])</span>
<span class="k">return</span> <span class="n">T</span></div>
<span class="k">def</span> <span class="fm">__mul__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<div class="viewcode-block" id="matrix.__mul__"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.matrix.__mul__">[docs]</a> <span class="k">def</span> <span class="fm">__mul__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Scalar multiplication, dot product (inner product) or</span>
<span class="sd"> matrix-vector multiplication.</span>
<span class="sd"> a * b (new object)</span>
<span class="sd"> matrix-vector multiplication. (new object)</span>
<span class="sd"> :type other: scalar, vector (or 1d list), matrix (or 2d list)</span>
@@ -747,21 +821,25 @@
<span class="sd"> \mathbf{C} &amp;= \mathbf{A} \cdot \mathbf{B}</span>
<span class="sd"> .. note::</span>
<span class="sd"> No size checking will be conducted, therefore no exceptions for</span>
<span class="sd"> wrong usage (result will be nonsense).</span>
<span class="sd"> No size checking will be conducted, therefore no exceptions</span>
<span class="sd"> for wrong usage (result will be nonsense).</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; m = matrix([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [0, 0, 0, 1]]) * 5</span>
<span class="sd"> &gt;&gt;&gt; m = matrix([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], \</span>
<span class="sd"> [0, 0, 0, 1]]) * 5</span>
<span class="sd"> &gt;&gt;&gt; print(m)</span>
<span class="sd"> [[5, 10, 15, 20], [25, 30, 35, 40], [45, 50, 55, 60], [0, 0, 0, 5]]</span>
<span class="sd"> &gt;&gt;&gt; m = matrix([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [0, 0, 0, 1]]) * 5.</span>
<span class="sd"> &gt;&gt;&gt; m = matrix([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], \</span>
<span class="sd"> [0, 0, 0, 1]]) * 5.</span>
<span class="sd"> &gt;&gt;&gt; print(m)</span>
<span class="sd"> [[5.0, 10.0, 15.0, 20.0], [25.0, 30.0, 35.0, 40.0], [45.0, 50.0, 55.0, 60.0], [0.0, 0.0, 0.0, 5.0]]</span>
<span class="sd"> &gt;&gt;&gt; v = matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) * vector([12, 12, 13])</span>
<span class="sd"> &gt;&gt;&gt; v = matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) * \</span>
<span class="sd"> vector([12, 12, 13])</span>
<span class="sd"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [75, 186, 297]</span>
<span class="sd"> &gt;&gt;&gt; m = matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) * matrix([[12, 12, 13], [14, 15, 16], [17, 18, 19]])</span>
<span class="sd"> &gt;&gt;&gt; m = matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) * \</span>
<span class="sd"> matrix([[12, 12, 13], [14, 15, 16], [17, 18, 19]])</span>
<span class="sd"> &gt;&gt;&gt; print(m)</span>
<span class="sd"> [[91, 96, 102], [220, 231, 246], [349, 366, 390]]</span>
@@ -769,18 +847,18 @@
<span class="sd"> :meth:`__rmul__`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">try</span><span class="p">:</span> <span class="c1"># matrix * matrix</span>
<span class="k">return</span> <span class="n">matrix</span><span class="p">([[</span><span class="nb">sum</span><span class="p">(</span><span class="n">c</span><span class="o">*</span><span class="n">d</span> <span class="k">for</span> <span class="n">c</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">a_row</span><span class="p">,</span> <span class="n">b_col</span><span class="p">))</span> <span class="k">for</span> <span class="n">b_col</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="n">other</span><span class="p">)]</span> <span class="k">for</span> <span class="n">a_row</span> <span class="ow">in</span> <span class="bp">self</span><span class="p">])</span>
<span class="k">return</span> <span class="n">matrix</span><span class="p">([[</span><span class="nb">sum</span><span class="p">(</span><span class="n">c</span><span class="o">*</span><span class="n">d</span> <span class="k">for</span> <span class="n">c</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">a_row</span><span class="p">,</span> <span class="n">b_col</span><span class="p">))</span> <span class="k">for</span>
<span class="n">b_col</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="n">other</span><span class="p">)]</span> <span class="k">for</span> <span class="n">a_row</span> <span class="ow">in</span> <span class="bp">self</span><span class="p">])</span>
<span class="k">except</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span> <span class="c1"># matrix * vector</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="nb">sum</span><span class="p">(</span><span class="n">c</span><span class="o">*</span><span class="n">d</span> <span class="k">for</span> <span class="n">c</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">a_row</span><span class="p">,</span> <span class="n">other</span><span class="p">))</span> <span class="k">for</span> <span class="n">a_row</span> <span class="ow">in</span> <span class="bp">self</span><span class="p">])</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="nb">sum</span><span class="p">(</span><span class="n">c</span><span class="o">*</span><span class="n">d</span> <span class="k">for</span> <span class="n">c</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">a_row</span><span class="p">,</span> <span class="n">other</span><span class="p">))</span> <span class="k">for</span>
<span class="n">a_row</span> <span class="ow">in</span> <span class="bp">self</span><span class="p">])</span>
<span class="k">except</span><span class="p">:</span> <span class="c1"># matrix * scalar</span>
<span class="k">return</span> <span class="n">matrix</span><span class="p">([[</span><span class="n">a</span><span class="o">*</span><span class="n">other</span> <span class="k">for</span> <span class="n">a</span> <span class="ow">in</span> <span class="n">a_row</span><span class="p">]</span> <span class="k">for</span> <span class="n">a_row</span> <span class="ow">in</span> <span class="bp">self</span><span class="p">])</span>
<span class="k">return</span> <span class="n">matrix</span><span class="p">([[</span><span class="n">a</span><span class="o">*</span><span class="n">other</span> <span class="k">for</span> <span class="n">a</span> <span class="ow">in</span> <span class="n">a_row</span><span class="p">]</span> <span class="k">for</span> <span class="n">a_row</span> <span class="ow">in</span> <span class="bp">self</span><span class="p">])</span></div>
<span class="k">def</span> <span class="fm">__rmul__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<div class="viewcode-block" id="matrix.__rmul__"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.matrix.__rmul__">[docs]</a> <span class="k">def</span> <span class="fm">__rmul__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Scalar multiplication, dot product (inner product) or</span>
<span class="sd"> vector-matrix multiplication.</span>
<span class="sd"> a * b (new object)</span>
<span class="sd"> vector-matrix multiplication. (new object)</span>
<span class="sd"> :type other: scalar (or 1d list and 2d list)</span>
@@ -790,35 +868,38 @@
<span class="sd"> \mathbf{C} &amp;= \mathbf{A} \cdot \mathbf{B}</span>
<span class="sd"> .. note::</span>
<span class="sd"> No size checking will be conducted, therefore no exceptions for</span>
<span class="sd"> wrong usage (result will be nonsense).</span>
<span class="sd"> No size checking will be conducted, therefore no exceptions</span>
<span class="sd"> for wrong usage (result will be nonsense).</span>
<span class="sd"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; m = 5 * matrix([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [0, 0, 0, 1]]) * 5</span>
<span class="sd"> &gt;&gt;&gt; m = 5 * matrix([[1, 2, 3, 4], [5, 6, 7, 8], \</span>
<span class="sd"> [9, 10, 11, 12], [0, 0, 0, 1]])</span>
<span class="sd"> &gt;&gt;&gt; print(m)</span>
<span class="sd"> [[5, 10, 15, 20], [25, 30, 35, 40], [45, 50, 55, 60], [0, 0, 0, 5]]</span>
<span class="sd"> &gt;&gt;&gt; m = 5. * matrix([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [0, 0, 0, 1]])</span>
<span class="sd"> &gt;&gt;&gt; m = 5. * matrix([[1, 2, 3, 4], [5, 6, 7, 8], \</span>
<span class="sd"> [9, 10, 11, 12], [0, 0, 0, 1]])</span>
<span class="sd"> &gt;&gt;&gt; print(m)</span>
<span class="sd"> [[5.0, 10.0, 15.0, 20.0], [25.0, 30.0, 35.0, 40.0], [45.0, 50.0, 55.0, 60.0], [0.0, 0.0, 0.0, 5.0]]</span>
<span class="sd"> .. seealso::</span>
<span class="sd"> :meth:`__mul__`</span>
<span class="sd"> :meth:`vector.__mul__` for vector * matrix</span>
<span class="sd"> :meth:`__mul__` and :meth:`vector.__mul__` for vector * matrix</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">try</span><span class="p">:</span> <span class="c1"># 2d list * matrix (matrix * matrix see matrix.__mul__)</span>
<span class="k">return</span> <span class="n">matrix</span><span class="p">([[</span><span class="nb">sum</span><span class="p">(</span><span class="n">c</span><span class="o">*</span><span class="n">d</span> <span class="k">for</span> <span class="n">c</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">a_row</span><span class="p">,</span> <span class="n">b_col</span><span class="p">))</span> <span class="k">for</span> <span class="n">b_col</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="bp">self</span><span class="p">)]</span> <span class="k">for</span> <span class="n">a_row</span> <span class="ow">in</span> <span class="n">other</span><span class="p">])</span>
<span class="k">return</span> <span class="n">matrix</span><span class="p">([[</span><span class="nb">sum</span><span class="p">(</span><span class="n">c</span><span class="o">*</span><span class="n">d</span> <span class="k">for</span> <span class="n">c</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">a_row</span><span class="p">,</span> <span class="n">b_col</span><span class="p">))</span> <span class="k">for</span>
<span class="n">b_col</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="bp">self</span><span class="p">)]</span> <span class="k">for</span> <span class="n">a_row</span> <span class="ow">in</span> <span class="n">other</span><span class="p">])</span>
<span class="k">except</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span> <span class="c1"># 1d list * matrix (vector * matrix see vector.__mul__)</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="nb">sum</span><span class="p">(</span><span class="n">c</span><span class="o">*</span><span class="n">d</span> <span class="k">for</span> <span class="n">c</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">b_col</span><span class="p">))</span> <span class="k">for</span> <span class="n">b_col</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="bp">self</span><span class="p">)])</span>
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="nb">sum</span><span class="p">(</span><span class="n">c</span><span class="o">*</span><span class="n">d</span> <span class="k">for</span> <span class="n">c</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">b_col</span><span class="p">))</span> <span class="k">for</span>
<span class="n">b_col</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="bp">self</span><span class="p">)])</span>
<span class="k">except</span><span class="p">:</span> <span class="c1"># scalar * vector</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">*</span><span class="n">other</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">*</span><span class="n">other</span></div>
<span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">str</span><span class="p">([</span><span class="o">*</span><span class="bp">self</span><span class="p">])</span>
<div class="viewcode-block" id="matrix.__str__"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.matrix.__str__">[docs]</a> <span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">str</span><span class="p">([</span><span class="o">*</span><span class="bp">self</span><span class="p">])</span></div>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;matrix(&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;)&quot;</span>
<div class="viewcode-block" id="matrix.__repr__"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.matrix.__repr__">[docs]</a> <span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;matrix(&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;)&quot;</span></div>
<div class="viewcode-block" id="matrix.rotate_x"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.matrix.rotate_x">[docs]</a> <span class="k">def</span> <span class="nf">rotate_x</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">theta</span><span class="p">):</span>
<span class="sa">r</span><span class="sd">&quot;&quot;&quot;Rotation about the x dirction.</span>
@@ -929,10 +1010,10 @@
<span class="sd"> uniform scaling if sx=sy=sz=s.</span>
<span class="sd"> Note that scaling happens around the origin, so objects not</span>
<span class="sd"> centered at the origin will have their centers move. To avoid this,</span>
<span class="sd"> either scale the object when it&#39;s located at the origin, or</span>
<span class="sd"> perform a translation afterwards to move the object back to where</span>
<span class="sd"> it should be.</span>
<span class="sd"> centered at the origin will have their centers move. To avoid</span>
<span class="sd"> this, either scale the object when it&#39;s located at the origin,</span>
<span class="sd"> or perform a translation afterwards to move the object back to</span>
<span class="sd"> where it should be.</span>
<span class="sd"> .. math::</span>
<span class="sd"> \begin{bmatrix}</span>
@@ -954,7 +1035,8 @@
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; h</span>
<span class="sd"> \end{bmatrix}</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">sy</span><span class="p">:</span>
<span class="c1"># if not sy is not suitable because 0 is also false</span>
<span class="k">if</span> <span class="n">sy</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">sy</span> <span class="o">=</span> <span class="n">sx</span>
<span class="n">sz</span> <span class="o">=</span> <span class="n">sx</span>
<span class="bp">self</span><span class="p">[:]</span> <span class="o">=</span> <span class="n">matrix</span><span class="o">.</span><span class="n">s</span><span class="p">(</span><span class="n">sx</span><span class="p">,</span> <span class="n">sy</span><span class="p">,</span> <span class="n">sz</span><span class="p">)</span> <span class="o">*</span> <span class="bp">self</span>