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

@@ -1,4 +1,4 @@
# Sphinx build info version 1
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
config: 2cbc17343901b023dfef01a2244f3120
config: caf5792fd17da2c604992977d35f1f60
tags: 645f666f9bcd5a90fca523b33c5a78b7

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>

View File

@@ -0,0 +1,7 @@
pylib.geometry\_plot module
===========================
.. automodule:: pylib.geometry_plot
:members:
:undoc-members:
:show-inheritance:

View File

@@ -0,0 +1,7 @@
pylib.geometry\_plot\_pylab module
==================================
.. automodule:: pylib.geometry_plot_pylab
:members:
:undoc-members:
:show-inheritance:

View File

@@ -25,5 +25,7 @@ Submodules
pylib.geometry
pylib.geometry2d
pylib.geometry2d_plot
pylib.geometry_plot
pylib.geometry_plot_pylab
pylib.mathematics
pylib.time_of_day

View File

@@ -295,8 +295,8 @@ div.important {
}
div.note {
background-color: #EEE;
border: 1px solid #CCC;
background-color: #25272c;
border: 1px solid #2C2C2C;
}
div.tip {

View File

@@ -7,7 +7,7 @@ table.indextable tr.cap {
}
/* move doc link a bit up */
.viewcode-back {
float: right;
position: relative;
top: -1.5em;
float: right;
position: relative;
top: -1.5em;
}

View File

@@ -37,7 +37,8 @@
<h1 id="index">Index</h1>
<div class="genindex-jumpbox">
<a href="#A"><strong>A</strong></a>
<a href="#_"><strong>_</strong></a>
| <a href="#A"><strong>A</strong></a>
| <a href="#B"><strong>B</strong></a>
| <a href="#C"><strong>C</strong></a>
| <a href="#D"><strong>D</strong></a>
@@ -62,6 +63,74 @@
| <a href="#Z"><strong>Z</strong></a>
</div>
<h2 id="_">_</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__abs__">__abs__() (vector method)</a>
</li>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__add__">__add__() (vector method)</a>
</li>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__ge__">__ge__() (vector method)</a>
</li>
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix.__getitem__">__getitem__() (matrix method)</a>
<ul>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__getitem__">(vector method)</a>
</li>
</ul></li>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__gt__">__gt__() (vector method)</a>
</li>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__iadd__">__iadd__() (vector method)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.Wireframe.__iter__">__iter__() (Wireframe method)</a>
<ul>
<li><a href="pylib.geometry.html#pylib.geometry.World.__iter__">(World method)</a>
</li>
</ul></li>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__le__">__le__() (vector method)</a>
</li>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__lt__">__lt__() (vector method)</a>
</li>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__matmul__">__matmul__() (vector method)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix.__mul__">__mul__() (matrix method)</a>
<ul>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__mul__">(vector method)</a>
</li>
</ul></li>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__neg__">__neg__() (vector method)</a>
</li>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__pos__">__pos__() (vector method)</a>
</li>
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix.__repr__">__repr__() (matrix method)</a>
<ul>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__repr__">(vector method)</a>
</li>
</ul></li>
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix.__rmul__">__rmul__() (matrix method)</a>
<ul>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__rmul__">(vector method)</a>
</li>
</ul></li>
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix.__str__">__str__() (matrix method)</a>
<ul>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__str__">(vector method)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.Wireframe.__str__">(Wireframe method)</a>
</li>
</ul></li>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__sub__">__sub__() (vector method)</a>
</li>
</ul></td>
</tr></table>
<h2 id="A">A</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
@@ -93,22 +162,26 @@
<h2 id="C">C</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.geometry_plot_pylab.html#pylib.geometry_plot_pylab.cad_wireframe">cad_wireframe() (in module pylib.geometry_plot_pylab)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.World.center">center() (World method)</a>
</li>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.ch_cs">ch_cs() (vector method)</a>
<li><a href="pylib.geometry.html#pylib.geometry.Solid.ch_cs">ch_cs() (Solid method)</a>
<ul>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.ch_cs">(vector method)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.Wireframe.ch_cs">(Wireframe method)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.World.ch_cs">(World method)</a>
</li>
</ul></li>
<li><a href="pylib.geometry.html#pylib.geometry.Circle">Circle (class in pylib.geometry)</a>
</li>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.conjugate">conjugate() (vector static method)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.conjugate">conjugate() (vector static method)</a>
</li>
<li><a href="pylib.function.html#pylib.function.cosine_wave">cosine_wave() (in module pylib.function)</a>
</li>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.cross">cross() (vector static method)</a>
@@ -205,11 +278,15 @@
</li>
<li><a href="pylib.geometry.html#module-geometry">geometry (module)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.geometry2d.html#module-geometry2d">geometry2d (module)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.geometry2d_plot.html#module-geometry2d_plot">geometry2d_plot (module)</a>
</li>
<li><a href="pylib.geometry_plot.html#module-geometry_plot">geometry_plot (module)</a>
</li>
<li><a href="pylib.geometry_plot_pylab.html#module-geometry_plot_pylab">geometry_plot_pylab (module)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.CS.get_coordinates">get_coordinates() (CS method)</a>
</li>
@@ -221,12 +298,14 @@
<h2 id="H">H</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.drawblock.html#pylib.drawblock.histogram">histogram() (in module pylib.drawblock)</a>
<li><a href="pylib.geometry.html#pylib.geometry.Hexahedron">Hexahedron (class in pylib.geometry)</a>
</li>
<li><a href="pylib.time_of_day.html#pylib.time_of_day.hours">hours() (in module pylib.time_of_day)</a>
<li><a href="pylib.drawblock.html#pylib.drawblock.histogram">histogram() (in module pylib.drawblock)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.time_of_day.html#pylib.time_of_day.hours">hours() (in module pylib.time_of_day)</a>
</li>
<li><a href="pylib.time_of_day.html#pylib.time_of_day.hours_norm">hours_norm() (in module pylib.time_of_day)</a>
</li>
<li><a href="pylib.function.html#pylib.function.hypotrochoid">hypotrochoid() (in module pylib.function)</a>
@@ -241,13 +320,15 @@
</li>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.im">im() (vector static method)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.time_of_day.html#pylib.time_of_day.in_seconds">in_seconds() (in module pylib.time_of_day)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.numerical.integration.html#module-integration">integration (module)</a>
</li>
<li><a href="pylib.geometry2d.html#pylib.geometry2d.interpolate_hermite">interpolate_hermite() (in module pylib.geometry2d)</a>
</li>
<li><a href="pylib.data.html#pylib.data.issequence">issequence() (in module pylib.data)</a>
</li>
</ul></td>
</tr></table>
@@ -324,12 +405,16 @@
<li><a href="pylib.geometry2d_plot.html#pylib.geometry2d_plot.plot_cubic_lines">plot_cubic_lines() (in module pylib.geometry2d_plot)</a>
</li>
<li><a href="pylib.geometry2d_plot.html#pylib.geometry2d_plot.plot_lines">plot_lines() (in module pylib.geometry2d_plot)</a>
</li>
<li><a href="pylib.geometry_plot_pylab.html#pylib.geometry_plot_pylab.plot_post">plot_post() (in module pylib.geometry_plot_pylab)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.Point">Point (class in pylib.geometry)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.Wireframe.points">points() (Wireframe method)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.Polygon">Polygon (class in pylib.geometry)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.Point.projection">projection() (Point method)</a>
</li>
<li><a href="pylib.html#module-pylib">pylib (module)</a>
</li>
@@ -348,6 +433,10 @@
<li><a href="pylib.geometry2d.html#module-pylib.geometry2d">pylib.geometry2d (module)</a>
</li>
<li><a href="pylib.geometry2d_plot.html#module-pylib.geometry2d_plot">pylib.geometry2d_plot (module)</a>
</li>
<li><a href="pylib.geometry_plot.html#module-pylib.geometry_plot">pylib.geometry_plot (module)</a>
</li>
<li><a href="pylib.geometry_plot_pylab.html#module-pylib.geometry_plot_pylab">pylib.geometry_plot_pylab (module)</a>
</li>
<li><a href="pylib.mathematics.html#module-pylib.mathematics">pylib.mathematics (module)</a>
</li>
@@ -432,6 +521,8 @@
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix.scale">scale() (matrix method)</a>
<ul>
<li><a href="pylib.geometry.html#pylib.geometry.Solid.scale">(Solid method)</a>
</li>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.scale">(vector method)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.Wireframe.scale">(Wireframe method)</a>
@@ -446,8 +537,12 @@
<li><a href="pylib.time_of_day.html#pylib.time_of_day.seconds_norm">seconds_norm() (in module pylib.time_of_day)</a>
</li>
<li><a href="pylib.data.html#pylib.data.seq">seq() (in module pylib.data)</a>
</li>
<li><a href="pylib.geometry_plot_pylab.html#pylib.geometry_plot_pylab.set_aspect_equal">set_aspect_equal() (in module pylib.geometry_plot_pylab)</a>
</li>
<li><a href="pylib.function.html#pylib.function.sine_wave">sine_wave() (in module pylib.function)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.Solid">Solid (class in pylib.geometry)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.World.space_diagonal">space_diagonal() (World method)</a>
</li>
@@ -475,6 +570,8 @@
<ul>
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix.translate">(matrix method)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.Solid.translate">(Solid method)</a>
</li>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.translate">(vector method)</a>
</li>
@@ -513,8 +610,20 @@
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.geometry.html#pylib.geometry.Wireframe">Wireframe (class in pylib.geometry)</a>
</li>
<li><a href="pylib.geometry_plot_pylab.html#pylib.geometry_plot_pylab.wireframe3d">wireframe3d() (in module pylib.geometry_plot_pylab)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.Solid.wireframes">wireframes() (Solid method)</a>
<ul>
<li><a href="pylib.geometry.html#pylib.geometry.World.wireframes">(World method)</a>
</li>
</ul></li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.geometry.html#pylib.geometry.World.wireframes_xy">wireframes_xy() (World method)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.World.wireframes_xyz">wireframes_xyz() (World method)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.World">World (class in pylib.geometry)</a>
</li>
<li><a href="pylib.data.html#pylib.data.write">write() (in module pylib.data)</a>
@@ -531,12 +640,10 @@
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.xyz">xyz() (vector method)</a>
<ul>
<li><a href="pylib.geometry.html#pylib.geometry.Wireframe.xyz">(Wireframe method)</a>
<li><a href="pylib.geometry.html#pylib.geometry.Wireframe.xy">xy() (Wireframe method)</a>
</li>
<li><a href="pylib.geometry.html#pylib.geometry.Wireframe.xyz">xyz() (Wireframe method)</a>
</li>
</ul></li>
</ul></td>
</tr></table>

View File

@@ -51,9 +51,14 @@
<li class="toctree-l3"><a class="reference internal" href="pylib.date.html">pylib.date module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pylib.drawblock.html">pylib.drawblock module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pylib.function.html">pylib.function module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pylib.geometry.html">pylib.geometry module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pylib.geometry.html">pylib.geometry module</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pylib.geometry.html#affine-transforms">Affine transforms</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="pylib.geometry2d.html">pylib.geometry2d module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pylib.geometry2d_plot.html">pylib.geometry2d_plot module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pylib.geometry_plot.html">pylib.geometry_plot module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pylib.geometry_plot_pylab.html">pylib.geometry_plot_pylab module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pylib.mathematics.html">pylib.mathematics module</a></li>
<li class="toctree-l3"><a class="reference internal" href="pylib.time_of_day.html">pylib.time_of_day module</a></li>
</ul>

Binary file not shown.

View File

@@ -99,6 +99,16 @@
<td>
<a href="pylib.geometry2d_plot.html#module-geometry2d_plot"><code class="xref">geometry2d_plot</code></a> <em>(*nix, Windows)</em></td><td>
<em>2D geometry plotting.</em></td></tr>
<tr>
<td></td>
<td>
<a href="pylib.geometry_plot.html#module-geometry_plot"><code class="xref">geometry_plot</code></a> <em>(*nix, Windows)</em></td><td>
<em>Geometry plotting.</em></td></tr>
<tr>
<td></td>
<td>
<a href="pylib.geometry_plot_pylab.html#module-geometry_plot_pylab"><code class="xref">geometry_plot_pylab</code></a> <em>(*nix, Windows)</em></td><td>
<em>Geometry plotting (pylab).</em></td></tr>
<tr class="pcap"><td></td><td>&#160;</td><td></td></tr>
<tr class="cap" id="cap-i"><td></td><td>
<strong>i</strong></td><td></td></tr>
@@ -172,6 +182,16 @@
<td>&#160;&#160;&#160;
<a href="pylib.geometry2d_plot.html#module-pylib.geometry2d_plot"><code class="xref">pylib.geometry2d_plot</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="pylib.geometry_plot.html#module-pylib.geometry_plot"><code class="xref">pylib.geometry_plot</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="pylib.geometry_plot_pylab.html#module-pylib.geometry_plot_pylab"><code class="xref">pylib.geometry_plot_pylab</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;

View File

@@ -83,6 +83,39 @@ array. m = k / n</p>
</dl>
</dd></dl>
<dl class="function">
<dt id="pylib.data.issequence">
<code class="sig-name descname">issequence</code><span class="sig-paren">(</span><em class="sig-param">obj</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data.html#issequence"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data.issequence" title="Permalink to this definition"></a></dt>
<dd><p>True for tuple, list, str
False for int, dict, set</p>
<dl class="field-list simple">
<dt class="field-odd">Example</dt>
<dd class="field-odd"><p></p></dd>
</dl>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">issequence</span><span class="p">(())</span>
<span class="go">True</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">issequence</span><span class="p">((</span><span class="mi">3</span><span class="p">,</span> <span class="p">))</span>
<span class="go">True</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">issequence</span><span class="p">([])</span>
<span class="go">True</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">issequence</span><span class="p">([</span><span class="mi">1</span><span class="p">])</span>
<span class="go">True</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">issequence</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">])</span>
<span class="go">True</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">issequence</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">)</span>
<span class="go">True</span>
</pre></div>
</div>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">issequence</span><span class="p">((</span><span class="mi">3</span><span class="p">))</span>
<span class="go">False</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">issequence</span><span class="p">({})</span>
<span class="go">False</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">issequence</span><span class="p">(</span><span class="nb">set</span><span class="p">())</span>
<span class="go">False</span>
</pre></div>
</div>
</dd></dl>
<dl class="function">
<dt id="pylib.data.load">
<code class="sig-name descname">load</code><span class="sig-paren">(</span><em class="sig-param">file_name</em>, <em class="sig-param">default=None</em>, <em class="sig-param">verbose=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data.html#load"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data.load" title="Permalink to this definition"></a></dt>

View File

@@ -172,7 +172,7 @@ y(\theta) = (R - r)\sin\theta - d\sin\left(\frac{R-r}{r}\theta\right) \\
</div>
<div class="admonition seealso">
<p class="admonition-title">See also</p>
<p><code class="xref py py-meth docutils literal notranslate"><span class="pre">mathematics.lcm()</span></code></p>
<p><a class="reference internal" href="pylib.mathematics.html#pylib.mathematics.lcm" title="pylib.mathematics.lcm"><code class="xref py py-meth docutils literal notranslate"><span class="pre">pylib.mathematics.lcm()</span></code></a></p>
</div>
</dd></dl>
@@ -359,7 +359,7 @@ Example of 3 columns and 3 rows (upside down view of normal braille/drawil
</dl>
<div class="admonition seealso">
<p class="admonition-title">See also</p>
<p><a class="reference internal" href="#pylib.function.transformation" title="pylib.function.transformation"><code class="xref py py-meth docutils literal notranslate"><span class="pre">pylib.function.transformation()</span></code></a></p>
<p><a class="reference internal" href="#pylib.function.transformation" title="pylib.function.transformation"><code class="xref py py-meth docutils literal notranslate"><span class="pre">transformation()</span></code></a></p>
</div>
</dd></dl>

View File

@@ -36,16 +36,23 @@
<div class="section" id="module-pylib.geometry">
<span id="pylib-geometry-module"></span><h1>pylib.geometry module<a class="headerlink" href="#module-pylib.geometry" title="Permalink to this headline"></a></h1>
<p>2D geometry objects.</p>
<p>Geometry objects.</p>
<dl class="field-list simple">
<dt class="field-odd">Date</dt>
<dd class="field-odd"><p>2019-12-21</p>
</dd>
</dl>
<span class="target" id="module-geometry"></span><dl class="class">
<span class="target" id="module-geometry"></span><div class="section" id="affine-transforms">
<h2>Affine transforms<a class="headerlink" href="#affine-transforms" title="Permalink to this headline"></a></h2>
<p>Functions in augmented space, in homogenous coordinates.
Points are augment to 4 dimensions, by adding a dummy coordinate.
For points the dummy coordinate is always normalized to 1.
With homogenous coordinates translation of points is repesentable
as a linear transformation.</p>
<dl class="class">
<dt id="pylib.geometry.CS">
<em class="property">class </em><code class="sig-name descname">CS</code><span class="sig-paren">(</span><em class="sig-param">x=[1, 0, 0], y=[0, 1, 0], z=[0, 0, 1]</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#CS"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.CS" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">mathematics.matrix</span></code></p>
<dd><p>Bases: <a class="reference internal" href="pylib.mathematics.html#pylib.mathematics.matrix" title="pylib.mathematics.matrix"><code class="xref py py-class docutils literal notranslate"><span class="pre">pylib.mathematics.matrix</span></code></a></p>
<p>Coordinate system</p>
<dl class="method">
<dt id="pylib.geometry.CS.get_coordinates">
@@ -85,13 +92,20 @@
<dl class="class">
<dt id="pylib.geometry.Direction">
<em class="property">class </em><code class="sig-name descname">Direction</code><span class="sig-paren">(</span><em class="sig-param">x=1</em>, <em class="sig-param">y=0</em>, <em class="sig-param">z=0</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Direction"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Direction" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">mathematics.vector</span></code></p>
<dd><p>Bases: <a class="reference internal" href="pylib.mathematics.html#pylib.mathematics.vector" title="pylib.mathematics.vector"><code class="xref py py-class docutils literal notranslate"><span class="pre">pylib.mathematics.vector</span></code></a></p>
<p>Direction in local coordinate system</p>
</dd></dl>
<dl class="class">
<dt id="pylib.geometry.Hexahedron">
<em class="property">class </em><code class="sig-name descname">Hexahedron</code><span class="sig-paren">(</span><em class="sig-param">point1=vector([-1</em>, <em class="sig-param">-1</em>, <em class="sig-param">-1</em>, <em class="sig-param">1])</em>, <em class="sig-param">point2=vector([1</em>, <em class="sig-param">-1</em>, <em class="sig-param">-1</em>, <em class="sig-param">1])</em>, <em class="sig-param">point3=vector([1</em>, <em class="sig-param">1</em>, <em class="sig-param">-1</em>, <em class="sig-param">1])</em>, <em class="sig-param">point4=vector([-1</em>, <em class="sig-param">1</em>, <em class="sig-param">-1</em>, <em class="sig-param">1])</em>, <em class="sig-param">point5=vector([-1</em>, <em class="sig-param">-1</em>, <em class="sig-param">1</em>, <em class="sig-param">1])</em>, <em class="sig-param">point6=vector([1</em>, <em class="sig-param">-1</em>, <em class="sig-param">1</em>, <em class="sig-param">1])</em>, <em class="sig-param">point7=vector([1</em>, <em class="sig-param">1</em>, <em class="sig-param">1</em>, <em class="sig-param">1])</em>, <em class="sig-param">point8=vector([-1</em>, <em class="sig-param">1</em>, <em class="sig-param">1</em>, <em class="sig-param">1])</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Hexahedron"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Hexahedron" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#pylib.geometry.Solid" title="pylib.geometry.Solid"><code class="xref py py-class docutils literal notranslate"><span class="pre">pylib.geometry.Solid</span></code></a></p>
<p>Line a open wireframe object in local coordinate system</p>
</dd></dl>
<dl class="class">
<dt id="pylib.geometry.Line">
<em class="property">class </em><code class="sig-name descname">Line</code><span class="sig-paren">(</span><em class="sig-param">point1=vector([-1</em>, <em class="sig-param">0</em>, <em class="sig-param">0])</em>, <em class="sig-param">point2=vector([1</em>, <em class="sig-param">0</em>, <em class="sig-param">0])</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Line"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Line" title="Permalink to this definition"></a></dt>
<em class="property">class </em><code class="sig-name descname">Line</code><span class="sig-paren">(</span><em class="sig-param">point1=vector([-1</em>, <em class="sig-param">0</em>, <em class="sig-param">0</em>, <em class="sig-param">1])</em>, <em class="sig-param">point2=vector([1</em>, <em class="sig-param">0</em>, <em class="sig-param">0</em>, <em class="sig-param">1])</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Line"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Line" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#pylib.geometry.Wireframe" title="pylib.geometry.Wireframe"><code class="xref py py-class docutils literal notranslate"><span class="pre">pylib.geometry.Wireframe</span></code></a></p>
<p>Line a open wireframe object in local coordinate system</p>
</dd></dl>
@@ -99,8 +113,14 @@
<dl class="class">
<dt id="pylib.geometry.Point">
<em class="property">class </em><code class="sig-name descname">Point</code><span class="sig-paren">(</span><em class="sig-param">x=0</em>, <em class="sig-param">y=0</em>, <em class="sig-param">z=0</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Point"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Point" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">mathematics.vector</span></code></p>
<dd><p>Bases: <a class="reference internal" href="pylib.mathematics.html#pylib.mathematics.vector" title="pylib.mathematics.vector"><code class="xref py py-class docutils literal notranslate"><span class="pre">pylib.mathematics.vector</span></code></a></p>
<p>Point in local coordinate system</p>
<dl class="method">
<dt id="pylib.geometry.Point.projection">
<code class="sig-name descname">projection</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Point.projection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Point.projection" title="Permalink to this definition"></a></dt>
<dd><p>Orthographic projection to the xy-plane</p>
</dd></dl>
</dd></dl>
<dl class="class">
@@ -110,12 +130,53 @@
<p>Polygon as closed wireframe object in local coordinate system</p>
</dd></dl>
<dl class="class">
<dt id="pylib.geometry.Solid">
<em class="property">class </em><code class="sig-name descname">Solid</code><span class="sig-paren">(</span><em class="sig-param">*wireframes</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Solid"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Solid" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<p>Solid object in local coordinate system</p>
<p>This class lists Wireframe objects.
The Wireframe class create its own points (copy).</p>
<dl class="method">
<dt id="pylib.geometry.Solid.ch_cs">
<code class="sig-name descname">ch_cs</code><span class="sig-paren">(</span><em class="sig-param">cs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Solid.ch_cs"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Solid.ch_cs" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="pylib.geometry.Solid.scale">
<code class="sig-name descname">scale</code><span class="sig-paren">(</span><em class="sig-param">sx</em>, <em class="sig-param">sy=None</em>, <em class="sig-param">sz=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Solid.scale"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Solid.scale" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="pylib.geometry.Solid.translate">
<code class="sig-name descname">translate</code><span class="sig-paren">(</span><em class="sig-param">tx</em>, <em class="sig-param">ty</em>, <em class="sig-param">tz</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Solid.translate"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Solid.translate" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="pylib.geometry.Solid.wireframes">
<code class="sig-name descname">wireframes</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Solid.wireframes"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Solid.wireframes" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="class">
<dt id="pylib.geometry.Wireframe">
<em class="property">class </em><code class="sig-name descname">Wireframe</code><span class="sig-paren">(</span><em class="sig-param">*points</em>, <em class="sig-param">closed=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Wireframe"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Wireframe" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<p>Open and closed wireframe object in local coordinate system</p>
<p>This class create its own points (copy).</p>
<dl class="method">
<dt id="pylib.geometry.Wireframe.__iter__">
<code class="sig-name descname">__iter__</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Wireframe.__iter__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Wireframe.__iter__" title="Permalink to this definition"></a></dt>
<dd><p>Returns the Iterator object</p>
</dd></dl>
<dl class="method">
<dt id="pylib.geometry.Wireframe.__str__">
<code class="sig-name descname">__str__</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Wireframe.__str__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Wireframe.__str__" title="Permalink to this definition"></a></dt>
<dd><p>Return str(self).</p>
</dd></dl>
<dl class="method">
<dt id="pylib.geometry.Wireframe.ch_cs">
<code class="sig-name descname">ch_cs</code><span class="sig-paren">(</span><em class="sig-param">cs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Wireframe.ch_cs"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Wireframe.ch_cs" title="Permalink to this definition"></a></dt>
@@ -152,10 +213,17 @@
<code class="sig-name descname">translate</code><span class="sig-paren">(</span><em class="sig-param">tx</em>, <em class="sig-param">ty</em>, <em class="sig-param">tz</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Wireframe.translate"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Wireframe.translate" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="pylib.geometry.Wireframe.xy">
<code class="sig-name descname">xy</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Wireframe.xy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Wireframe.xy" title="Permalink to this definition"></a></dt>
<dd><p>Get coordinates in 3d space</p>
</dd></dl>
<dl class="method">
<dt id="pylib.geometry.Wireframe.xyz">
<code class="sig-name descname">xyz</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Wireframe.xyz"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Wireframe.xyz" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dd><p>Get coordinates in 3d space</p>
</dd></dl>
</dd></dl>
@@ -164,6 +232,12 @@
<em class="property">class </em><code class="sig-name descname">World</code><a class="reference internal" href="_modules/pylib/geometry.html#World"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.World" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<p>World-space with world-space coordinates</p>
<dl class="method">
<dt id="pylib.geometry.World.__iter__">
<code class="sig-name descname">__iter__</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#World.__iter__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.World.__iter__" title="Permalink to this definition"></a></dt>
<dd><p>Returns the Iterator object</p>
</dd></dl>
<dl class="method">
<dt id="pylib.geometry.World.add">
<code class="sig-name descname">add</code><span class="sig-paren">(</span><em class="sig-param">*objects</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#World.add"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.World.add" title="Permalink to this definition"></a></dt>
@@ -224,8 +298,24 @@
<code class="sig-name descname">translate</code><span class="sig-paren">(</span><em class="sig-param">tx</em>, <em class="sig-param">ty</em>, <em class="sig-param">tz</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#World.translate"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.World.translate" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="pylib.geometry.World.wireframes">
<code class="sig-name descname">wireframes</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#World.wireframes"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.World.wireframes" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="pylib.geometry.World.wireframes_xy">
<code class="sig-name descname">wireframes_xy</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#World.wireframes_xy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.World.wireframes_xy" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="pylib.geometry.World.wireframes_xyz">
<code class="sig-name descname">wireframes_xyz</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#World.wireframes_xyz"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.World.wireframes_xyz" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
</div>
</div>

View File

@@ -276,7 +276,7 @@ decides what the left and the right end point of the line is.</p></li>
</dl>
<div class="admonition seealso">
<p class="admonition-title">See also</p>
<p><code class="xref py py-meth docutils literal notranslate"><span class="pre">plot_lines()</span></code> of the <code class="xref py py-mod docutils literal notranslate"><span class="pre">geometry_plot</span></code>
<p><code class="xref py py-meth docutils literal notranslate"><span class="pre">plot_lines()</span></code> of the <a class="reference internal" href="pylib.geometry_plot.html#module-geometry_plot" title="geometry_plot: Geometry plotting. (*nix, Windows)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">geometry_plot</span></code></a>
module to plot the lines</p>
</div>
</dd></dl>

View File

@@ -16,7 +16,7 @@
<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="next" title="pylib.mathematics module" href="pylib.mathematics.html" />
<link rel="next" title="pylib.geometry_plot module" href="pylib.geometry_plot.html" />
<link rel="prev" title="pylib.geometry2d module" href="pylib.geometry2d.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
@@ -86,7 +86,7 @@
<li><a href="modules.html">pylib</a><ul>
<li><a href="pylib.html">pylib package</a><ul>
<li>Previous: <a href="pylib.geometry2d.html" title="previous chapter">pylib.geometry2d module</a></li>
<li>Next: <a href="pylib.mathematics.html" title="next chapter">pylib.mathematics module</a></li>
<li>Next: <a href="pylib.geometry_plot.html" title="next chapter">pylib.geometry_plot module</a></li>
</ul></li>
</ul></li>
</ul></li>

123
docs/build/html/pylib.geometry_plot.html vendored Normal file
View File

@@ -0,0 +1,123 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>pylib.geometry_plot module &#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="next" title="pylib.geometry_plot_pylab module" href="pylib.geometry_plot_pylab.html" />
<link rel="prev" title="pylib.geometry2d_plot module" href="pylib.geometry2d_plot.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">
<div class="section" id="module-pylib.geometry_plot">
<span id="pylib-geometry-plot-module"></span><h1>pylib.geometry_plot module<a class="headerlink" href="#module-pylib.geometry_plot" title="Permalink to this headline"></a></h1>
<p>Geometry plotter using matplotlib (pylab).</p>
<dl class="field-list simple">
<dt class="field-odd">Date</dt>
<dd class="field-odd"><p>2019-12-23</p>
</dd>
</dl>
<span class="target" id="module-geometry_plot"></span></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 class="current">
<li class="toctree-l1 current"><a class="reference internal" href="modules.html">pylib</a><ul class="current">
<li class="toctree-l2 current"><a class="reference internal" href="pylib.html">pylib package</a></li>
</ul>
</li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="index.html">Documentation overview</a><ul>
<li><a href="modules.html">pylib</a><ul>
<li><a href="pylib.html">pylib package</a><ul>
<li>Previous: <a href="pylib.geometry2d_plot.html" title="previous chapter">pylib.geometry2d_plot module</a></li>
<li>Next: <a href="pylib.geometry_plot_pylab.html" title="next chapter">pylib.geometry_plot_pylab module</a></li>
</ul></li>
</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>
|
<a href="_sources/pylib.geometry_plot.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

View File

@@ -0,0 +1,194 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>pylib.geometry_plot_pylab module &#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="next" title="pylib.mathematics module" href="pylib.mathematics.html" />
<link rel="prev" title="pylib.geometry_plot module" href="pylib.geometry_plot.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">
<div class="section" id="module-pylib.geometry_plot_pylab">
<span id="pylib-geometry-plot-pylab-module"></span><h1>pylib.geometry_plot_pylab module<a class="headerlink" href="#module-pylib.geometry_plot_pylab" title="Permalink to this headline"></a></h1>
<p>Geometry plotter using pylab (matplotlib).</p>
<dl class="field-list simple">
<dt class="field-odd">Date</dt>
<dd class="field-odd"><p>2019-12-23</p>
</dd>
</dl>
<span class="target" id="module-geometry_plot_pylab"></span><dl class="function">
<dt id="pylib.geometry_plot_pylab.cad_wireframe">
<code class="sig-name descname">cad_wireframe</code><span class="sig-paren">(</span><em class="sig-param">world</em>, <em class="sig-param">centering=True</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry_plot_pylab.html#cad_wireframe"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry_plot_pylab.cad_wireframe" title="Permalink to this definition"></a></dt>
<dd><p>Graphical projections</p>
<ul class="simple">
<li><p>Parallel projections</p>
<ul>
<li><p>Orthographic</p>
<ul>
<li><p>Multiview</p>
<ul>
<li><p>* First-angle</p></li>
<li><p>Third-angle</p></li>
<li><p>Plan Elevation</p></li>
</ul>
</li>
<li><p>Axonometric</p>
<ul>
<li><p>* Isometric</p></li>
<li><p>Dimetric</p></li>
<li><p>Trimetri</p></li>
</ul>
</li>
</ul>
</li>
<li><p>Oblique</p>
<ul>
<li><p>Carbinet</p></li>
<li><p>Cavalier</p></li>
<li><p>Military</p></li>
<li><p>Top-down</p></li>
</ul>
</li>
</ul>
</li>
<li><p>Perspective projections</p>
<ul>
<li><p>1-point</p></li>
<li><p>2-point</p></li>
<li><p>3-point</p></li>
<li><p>Curvilinear</p></li>
</ul>
</li>
</ul>
</dd></dl>
<dl class="function">
<dt id="pylib.geometry_plot_pylab.plot_post">
<code class="sig-name descname">plot_post</code><span class="sig-paren">(</span><em class="sig-param">ax</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry_plot_pylab.html#plot_post"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry_plot_pylab.plot_post" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="function">
<dt id="pylib.geometry_plot_pylab.set_aspect_equal">
<code class="sig-name descname">set_aspect_equal</code><span class="sig-paren">(</span><em class="sig-param">ax</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry_plot_pylab.html#set_aspect_equal"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry_plot_pylab.set_aspect_equal" title="Permalink to this definition"></a></dt>
<dd><p>Make axes of 3D plot have equal scale so that spheres appear as
spheres, cubes as cubes, etc.. This is one possible solution to
Matplotlibs ax.set_aspect(equal) and ax.axis(equal) not
working for 3D.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>ax</strong> (<em>pylab.Axes</em>) a pylab axis</p>
</dd>
</dl>
<p>Source: <a class="reference external" href="https://stackoverflow.com/a/35126679">https://stackoverflow.com/a/35126679</a></p>
</dd></dl>
<dl class="function">
<dt id="pylib.geometry_plot_pylab.wireframe3d">
<code class="sig-name descname">wireframe3d</code><span class="sig-paren">(</span><em class="sig-param">world</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry_plot_pylab.html#wireframe3d"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry_plot_pylab.wireframe3d" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</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 class="current">
<li class="toctree-l1 current"><a class="reference internal" href="modules.html">pylib</a><ul class="current">
<li class="toctree-l2 current"><a class="reference internal" href="pylib.html">pylib package</a></li>
</ul>
</li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="index.html">Documentation overview</a><ul>
<li><a href="modules.html">pylib</a><ul>
<li><a href="pylib.html">pylib package</a><ul>
<li>Previous: <a href="pylib.geometry_plot.html" title="previous chapter">pylib.geometry_plot module</a></li>
<li>Next: <a href="pylib.mathematics.html" title="next chapter">pylib.mathematics module</a></li>
</ul></li>
</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>
|
<a href="_sources/pylib.geometry_plot_pylab.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

View File

@@ -61,9 +61,14 @@
<li class="toctree-l1"><a class="reference internal" href="pylib.date.html">pylib.date module</a></li>
<li class="toctree-l1"><a class="reference internal" href="pylib.drawblock.html">pylib.drawblock module</a></li>
<li class="toctree-l1"><a class="reference internal" href="pylib.function.html">pylib.function module</a></li>
<li class="toctree-l1"><a class="reference internal" href="pylib.geometry.html">pylib.geometry module</a></li>
<li class="toctree-l1"><a class="reference internal" href="pylib.geometry.html">pylib.geometry module</a><ul>
<li class="toctree-l2"><a class="reference internal" href="pylib.geometry.html#affine-transforms">Affine transforms</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="pylib.geometry2d.html">pylib.geometry2d module</a></li>
<li class="toctree-l1"><a class="reference internal" href="pylib.geometry2d_plot.html">pylib.geometry2d_plot module</a></li>
<li class="toctree-l1"><a class="reference internal" href="pylib.geometry_plot.html">pylib.geometry_plot module</a></li>
<li class="toctree-l1"><a class="reference internal" href="pylib.geometry_plot_pylab.html">pylib.geometry_plot_pylab module</a></li>
<li class="toctree-l1"><a class="reference internal" href="pylib.mathematics.html">pylib.mathematics module</a></li>
<li class="toctree-l1"><a class="reference internal" href="pylib.time_of_day.html">pylib.time_of_day module</a></li>
</ul>

View File

@@ -17,7 +17,7 @@
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="pylib.time_of_day module" href="pylib.time_of_day.html" />
<link rel="prev" title="pylib.geometry2d_plot module" href="pylib.geometry2d_plot.html" />
<link rel="prev" title="pylib.geometry_plot_pylab module" href="pylib.geometry_plot_pylab.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
@@ -53,6 +53,119 @@
<em class="property">class </em><code class="sig-name descname">matrix</code><a class="reference internal" href="_modules/pylib/mathematics.html#matrix"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.matrix" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">list</span></code></p>
<p>Use/create matrix like list of lists</p>
<dl class="method">
<dt id="pylib.mathematics.matrix.__getitem__">
<code class="sig-name descname">__getitem__</code><span class="sig-paren">(</span><em class="sig-param">index</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#matrix.__getitem__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.matrix.__getitem__" title="Permalink to this definition"></a></dt>
<dd><p>For index return value, for range return new vector object.</p>
<dl class="field-list simple">
<dt class="field-odd">Example</dt>
<dd class="field-odd"><p></p></dd>
</dl>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">m</span> <span class="o">=</span> <span class="n">matrix</span><span class="p">([[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="p">[</span><span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="p">[</span><span class="mi">7</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">9</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">0</span><span class="p">]])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">m</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span>
<span class="go">[7, 8, 9, 0]</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">m</span><span class="p">[:,</span> <span class="mi">1</span><span class="p">:</span><span class="mi">3</span><span class="p">])</span>
<span class="go">[[2, 3], [5, 6], [8, 9], [0, 0]]</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">m</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">:</span><span class="mi">3</span><span class="p">])</span>
<span class="go">[[2, 3], [5, 6]]</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">m</span><span class="p">[::</span><span class="mi">2</span><span class="p">,</span> <span class="p">::</span><span class="mi">2</span><span class="p">])</span>
<span class="go">[[1, 3], [7, 9]]</span>
</pre></div>
</div>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.matrix.__mul__">
<code class="sig-name descname">__mul__</code><span class="sig-paren">(</span><em class="sig-param">other</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#matrix.__mul__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.matrix.__mul__" title="Permalink to this definition"></a></dt>
<dd><p>Scalar multiplication, dot product (inner product) or
matrix-vector multiplication. (new object)</p>
<dl class="field-list simple">
</dl>
<div class="math notranslate nohighlight">
\[\begin{split}\mathbf{C} &amp;= \mathbf{A} \cdot b \\
\mathbf{c} &amp;= \mathbf{A} \cdot \mathbf{b} \\
\mathbf{C} &amp;= \mathbf{A} \cdot \mathbf{B}\end{split}\]</div>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>No size checking will be conducted, therefore no exceptions
for wrong usage (result will be nonsense).</p>
</div>
<dl class="field-list simple">
<dt class="field-odd">Example</dt>
<dd class="field-odd"><p></p></dd>
</dl>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">m</span> <span class="o">=</span> <span class="n">matrix</span><span class="p">([[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">],</span> <span class="p">[</span><span class="mi">5</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">8</span><span class="p">],</span> <span class="p">[</span><span class="mi">9</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">11</span><span class="p">,</span> <span class="mi">12</span><span class="p">],</span> \
<span class="go"> [0, 0, 0, 1]]) * 5</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">m</span><span class="p">)</span>
<span class="go">[[5, 10, 15, 20], [25, 30, 35, 40], [45, 50, 55, 60], [0, 0, 0, 5]]</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">m</span> <span class="o">=</span> <span class="n">matrix</span><span class="p">([[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">],</span> <span class="p">[</span><span class="mi">5</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">8</span><span class="p">],</span> <span class="p">[</span><span class="mi">9</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">11</span><span class="p">,</span> <span class="mi">12</span><span class="p">],</span> \
<span class="go"> [0, 0, 0, 1]]) * 5.</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">m</span><span class="p">)</span>
<span class="go">[[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="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">=</span> <span class="n">matrix</span><span class="p">([[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">],</span> <span class="p">[</span><span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">6</span><span class="p">],</span> <span class="p">[</span><span class="mi">7</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">9</span><span class="p">]])</span> <span class="o">*</span> \
<span class="go"> vector([12, 12, 13])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="go">[75, 186, 297]</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">m</span> <span class="o">=</span> <span class="n">matrix</span><span class="p">([[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">],</span> <span class="p">[</span><span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">6</span><span class="p">],</span> <span class="p">[</span><span class="mi">7</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">9</span><span class="p">]])</span> <span class="o">*</span> \
<span class="go"> matrix([[12, 12, 13], [14, 15, 16], [17, 18, 19]])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">m</span><span class="p">)</span>
<span class="go">[[91, 96, 102], [220, 231, 246], [349, 366, 390]]</span>
</pre></div>
</div>
<div class="admonition seealso">
<p class="admonition-title">See also</p>
<p><a class="reference internal" href="#pylib.mathematics.matrix.__rmul__" title="pylib.mathematics.matrix.__rmul__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__rmul__()</span></code></a></p>
</div>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.matrix.__repr__">
<code class="sig-name descname">__repr__</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#matrix.__repr__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.matrix.__repr__" title="Permalink to this definition"></a></dt>
<dd><p>Return repr(self).</p>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.matrix.__rmul__">
<code class="sig-name descname">__rmul__</code><span class="sig-paren">(</span><em class="sig-param">other</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#matrix.__rmul__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.matrix.__rmul__" title="Permalink to this definition"></a></dt>
<dd><p>Scalar multiplication, dot product (inner product) or
vector-matrix multiplication. (new object)</p>
<dl class="field-list simple">
</dl>
<div class="math notranslate nohighlight">
\[\begin{split}\mathbf{C} &amp;= a \cdot \mathbf{B} \\
\mathbf{c} &amp;= \mathbf{a} \cdot \mathbf{B} \\
\mathbf{C} &amp;= \mathbf{A} \cdot \mathbf{B}\end{split}\]</div>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>No size checking will be conducted, therefore no exceptions
for wrong usage (result will be nonsense).</p>
</div>
<dl class="field-list simple">
<dt class="field-odd">Example</dt>
<dd class="field-odd"><p></p></dd>
</dl>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">m</span> <span class="o">=</span> <span class="mi">5</span> <span class="o">*</span> <span class="n">matrix</span><span class="p">([[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">],</span> <span class="p">[</span><span class="mi">5</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">8</span><span class="p">],</span> \
<span class="go"> [9, 10, 11, 12], [0, 0, 0, 1]])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">m</span><span class="p">)</span>
<span class="go">[[5, 10, 15, 20], [25, 30, 35, 40], [45, 50, 55, 60], [0, 0, 0, 5]]</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">m</span> <span class="o">=</span> <span class="mf">5.</span> <span class="o">*</span> <span class="n">matrix</span><span class="p">([[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">],</span> <span class="p">[</span><span class="mi">5</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">8</span><span class="p">],</span> \
<span class="go"> [9, 10, 11, 12], [0, 0, 0, 1]])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">m</span><span class="p">)</span>
<span class="go">[[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>
</pre></div>
</div>
<div class="admonition seealso">
<p class="admonition-title">See also</p>
<p><a class="reference internal" href="#pylib.mathematics.matrix.__mul__" title="pylib.mathematics.matrix.__mul__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__mul__()</span></code></a> and <a class="reference internal" href="#pylib.mathematics.vector.__mul__" title="pylib.mathematics.vector.__mul__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">vector.__mul__()</span></code></a> for vector * matrix</p>
</div>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.matrix.__str__">
<code class="sig-name descname">__str__</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#matrix.__str__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.matrix.__str__" title="Permalink to this definition"></a></dt>
<dd><p>Return str(self).</p>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.matrix.rotate_x">
<code class="sig-name descname">rotate_x</code><span class="sig-paren">(</span><em class="sig-param">theta</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#matrix.rotate_x"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.matrix.rotate_x" title="Permalink to this definition"></a></dt>
@@ -134,7 +247,7 @@
<dd><p>Rotation matrix about the x direction.</p>
<p>Rotates the coordinate system of vectors</p>
<div class="math notranslate nohighlight">
\[\begin{split}R_{x}(\theta) =
\[\begin{split}\mathbf{R}_{x}(\theta) =
\begin{bmatrix}
1 &amp; 0 &amp; 0 &amp; 0 \\
0 &amp; \cos \theta &amp; -\sin \theta &amp; 0 \\
@@ -149,7 +262,7 @@
<dd><p>Rotation matrix about the y direction.</p>
<p>Rotates the coordinate system of vectors</p>
<div class="math notranslate nohighlight">
\[\begin{split}R_{y}(\theta) =
\[\begin{split}\mathbf{R}_{y}(\theta) =
\begin{bmatrix}
\cos \theta &amp; 0 &amp; \sin \theta &amp; 0 \\
0 &amp; 1 &amp; 0 &amp; 0 \\
@@ -164,7 +277,7 @@
<dd><p>Rotation matrix about the z direction.</p>
<p>Rotates the coordinate system of vectors</p>
<div class="math notranslate nohighlight">
\[\begin{split}R_{z}(\theta) =
\[\begin{split}\mathbf{R}_{z}(\theta) =
\begin{bmatrix}
\cos \theta &amp; -\sin \theta &amp; 0 &amp; 0 \\
\sin \theta &amp; \cos \theta &amp; 0 &amp; 0 \\
@@ -176,14 +289,17 @@
<dd class="field-odd"><p></p></dd>
</dl>
<div class="math notranslate nohighlight">
\[\begin{split}R_{z}(\theta) \begin{bmatrix}1 \\ 0 \\ 0 \\ 1\end{bmatrix} =
\[\begin{split}\mathbf{R}_{z}(\theta)
\begin{bmatrix}1 \\ 0 \\ 0 \\ 1\end{bmatrix}
&amp;=
\begin{bmatrix}
\cos 90° &amp; -\sin 90° &amp; 0 &amp; 0 \\
\sin 90° &amp; \cos 90° &amp; 0 &amp; 0 \\
0 &amp; 0 &amp; 1 &amp; 0 \\
0 &amp; 0 &amp; 0 &amp; 1
\end{bmatrix}
\begin{bmatrix}1 \\ 0 \\ 0 \\ 1\end{bmatrix} =
\begin{bmatrix}1 \\ 0 \\ 0 \\ 1\end{bmatrix} \\
&amp;=
\begin{bmatrix}
0 &amp; -1 &amp; 0 &amp; 0 \\
1 &amp; 0 &amp; 0 &amp; 0 \\
@@ -200,12 +316,12 @@
<dd><p>Scaling matrix</p>
<p>uniform scaling if sx=sy=sz=s.
Note that scaling happens around the origin, so objects not
centered at the origin will have their centers move. To avoid this,
either scale the object when its located at the origin, or
perform a translation afterwards to move the object back to where
it should be.</p>
centered at the origin will have their centers move. To avoid
this, either scale the object when its located at the origin,
or perform a translation afterwards to move the object back to
where it should be.</p>
<div class="math notranslate nohighlight">
\[\begin{split}S =
\[\begin{split}\mathbf{S} =
\begin{bmatrix}
s_x &amp; 0 &amp; 0 &amp; 0 \\
0 &amp; s_y &amp; 0 &amp; 0 \\
@@ -220,10 +336,10 @@ it should be.</p>
<dd><p>Scaling</p>
<p>uniform scaling if sx=sy=sz=s.
Note that scaling happens around the origin, so objects not
centered at the origin will have their centers move. To avoid this,
either scale the object when its located at the origin, or
perform a translation afterwards to move the object back to where
it should be.</p>
centered at the origin will have their centers move. To avoid
this, either scale the object when its located at the origin,
or perform a translation afterwards to move the object back to
where it should be.</p>
<div class="math notranslate nohighlight">
\[\begin{split}\begin{bmatrix}
xx' &amp; xy' &amp; xz' &amp; t_x' \\
@@ -250,7 +366,7 @@ it should be.</p>
<em class="property">static </em><code class="sig-name descname">t</code><span class="sig-paren">(</span><em class="sig-param">tx</em>, <em class="sig-param">ty</em>, <em class="sig-param">tz</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#matrix.t"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.matrix.t" title="Permalink to this definition"></a></dt>
<dd><p>Translation matrix</p>
<div class="math notranslate nohighlight">
\[\begin{split}T =
\[\begin{split}\mathbf{T} =
\begin{bmatrix}
1 &amp; 0 &amp; 0 &amp; t_x \\
0 &amp; 1 &amp; 0 &amp; t_y \\
@@ -292,60 +408,385 @@ it should be.</p>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">list</span></code></p>
<p>Use/create vector like lists</p>
<ul class="simple">
<li><p>size -&gt; len(a)</p></li>
<li><p>abs -&gt; abs(a)</p></li>
<li><p>dot -&gt; a * b</p></li>
<li><p>outer -&gt; a &#64; b</p></li>
<li><p>size, length of a vector use len(a)</p></li>
<li><p>absolute, magntude, norm of a vector use abs(a), see
<a class="reference internal" href="#pylib.mathematics.vector.__abs__" title="pylib.mathematics.vector.__abs__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__abs__()</span></code></a></p></li>
<li><p>dot product use a * b, see <a class="reference internal" href="#pylib.mathematics.vector.__mul__" title="pylib.mathematics.vector.__mul__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__mul__()</span></code></a> and <a class="reference internal" href="#pylib.mathematics.vector.__rmul__" title="pylib.mathematics.vector.__rmul__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__rmul__()</span></code></a></p></li>
<li><p>outer product use a &#64; b, see <a class="reference internal" href="#pylib.mathematics.vector.__matmul__" title="pylib.mathematics.vector.__matmul__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__matmul__()</span></code></a></p></li>
</ul>
<p>use super constructor</p>
<p>use super __iter__</p>
<p>use super __setitem__</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">4</span><span class="p">,</span><span class="mi">5</span><span class="p">])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">v</span><span class="p">[</span><span class="mi">3</span><span class="p">:</span><span class="mi">5</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">]</span>
<dl class="field-list simple">
<dt class="field-odd">__iter__</dt>
<dd class="field-odd"><p></p></dd>
</dl>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="p">[</span><span class="n">i</span><span class="o">*</span><span class="mi">2</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">])]</span>
<span class="go">[2, 4, 6]</span>
</pre></div>
</div>
<dl class="field-list simple">
<dt class="field-odd">__setitem__</dt>
<dd class="field-odd"><p></p></dd>
</dl>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">v</span><span class="p">[</span><span class="mi">3</span><span class="p">:</span><span class="mi">5</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">]</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="go">[1, 2, 3, 1, 2]</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">isinstance</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="n">vector</span><span class="p">)</span>
<span class="go">True</span>
</pre></div>
</div>
<p>use super __lt__(a, b)</p>
<p>use super __le__(a, b)</p>
<p>use super __eq__(a, b)</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">v2</span> <span class="o">=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">==</span> <span class="n">v2</span>
<dl class="field-list simple">
<dt class="field-odd">__eq__(a, b)</dt>
<dd class="field-odd"><p></p></dd>
</dl>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">])</span> <span class="o">==</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">])</span>
<span class="go">True</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">])</span> <span class="o">==</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">])</span>
<span class="go">False</span>
</pre></div>
</div>
<dl class="field-list simple">
<dt class="field-odd">__ne__(a, b)</dt>
<dd class="field-odd"><p></p></dd>
</dl>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">])</span> <span class="o">!=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">])</span>
<span class="go">False</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">])</span> <span class="o">!=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">])</span>
<span class="go">True</span>
</pre></div>
</div>
<p>use super __ne__(a, b)</p>
<p>use super __ge__(a, b)</p>
<p>use super __gt__(a, b)</p>
<p>use super __contains__</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="mi">2</span> <span class="ow">in</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">])</span>
<dl class="field-list simple">
<dt class="field-odd">__contains__</dt>
<dd class="field-odd"><p></p></dd>
</dl>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="mi">2</span> <span class="ow">in</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">])</span>
<span class="go">True</span>
</pre></div>
</div>
<p>__isub__</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">-=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">3</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">3</span><span class="p">])</span>
<dl class="field-list simple">
<dt class="field-odd">__isub__</dt>
<dd class="field-odd"><p></p></dd>
</dl>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">-=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">3</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">3</span><span class="p">])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="go">[-2, -1, 0]</span>
</pre></div>
</div>
<p>__imul__</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">*=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">3</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">3</span><span class="p">])</span>
<dl class="field-list simple">
<dt class="field-odd">__imul__</dt>
<dd class="field-odd"><p></p></dd>
</dl>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">*=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">3</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">3</span><span class="p">])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="go">18</span>
</pre></div>
</div>
<p>__imatmul__</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">m</span> <span class="o">=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">m</span> <span class="o">*=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">3</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">3</span><span class="p">])</span>
<dl class="field-list simple">
<dt class="field-odd">__imatmul__</dt>
<dd class="field-odd"><p></p></dd>
</dl>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">m</span> <span class="o">=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">m</span> <span class="o">*=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">3</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">3</span><span class="p">])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="go">[[3, 3, 3], [6, 6, 6], [9, 9, 9]]</span>
</pre></div>
</div>
<dl class="method">
<dt id="pylib.mathematics.vector.__abs__">
<code class="sig-name descname">__abs__</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.__abs__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.__abs__" title="Permalink to this definition"></a></dt>
<dd><p>Magnitude / norm of a vector</p>
<div class="math notranslate nohighlight">
\[b = |\mathbf{a}| = \sqrt{\sum a_i^2} =
\sqrt{\mathbf{a} \cdot \mathbf{a}}\]</div>
<dl class="field-list simple">
<dt class="field-odd">Example</dt>
<dd class="field-odd"><p></p></dd>
</dl>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">abs</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="go">5.0</span>
</pre></div>
</div>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.vector.__add__">
<code class="sig-name descname">__add__</code><span class="sig-paren">(</span><em class="sig-param">other</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.__add__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.__add__" title="Permalink to this definition"></a></dt>
<dd><p>a + b (new object)</p>
<div class="math notranslate nohighlight">
\[\mathbf{c} = \mathbf{a} + \mathbf{b}\]</div>
<dl class="field-list simple">
<dt class="field-odd">Example</dt>
<dd class="field-odd"><p></p></dd>
</dl>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">])</span> <span class="o">+</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="go">[2, 4, 6]</span>
</pre></div>
</div>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.vector.__ge__">
<code class="sig-name descname">__ge__</code><span class="sig-paren">(</span><em class="sig-param">other</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.__ge__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.__ge__" title="Permalink to this definition"></a></dt>
<dd><p>Test if this object is greater (larger) than or equal the
other object.</p>
<div class="math notranslate nohighlight">
\[|\mathbf{a}| \ge |\mathbf{b}|\]</div>
<dl class="field-list simple">
<dt class="field-odd">Example</dt>
<dd class="field-odd"><p></p></dd>
</dl>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">])</span> <span class="o">&gt;=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">3</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">])</span>
<span class="go">True</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">])</span> <span class="o">&gt;=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">4</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">])</span>
<span class="go">False</span>
</pre></div>
</div>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.vector.__getitem__">
<code class="sig-name descname">__getitem__</code><span class="sig-paren">(</span><em class="sig-param">index</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.__getitem__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.__getitem__" title="Permalink to this definition"></a></dt>
<dd><p>For index return value, for range return new vector object.</p>
<dl class="field-list simple">
<dt class="field-odd">Example</dt>
<dd class="field-odd"><p></p></dd>
</dl>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">v</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="mi">3</span><span class="p">]</span>
<span class="go">[2, 3]</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">v</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span>
<span class="go">4</span>
</pre></div>
</div>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.vector.__gt__">
<code class="sig-name descname">__gt__</code><span class="sig-paren">(</span><em class="sig-param">other</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.__gt__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.__gt__" title="Permalink to this definition"></a></dt>
<dd><p>Test if this object is greater (larger) than the other
object.</p>
<div class="math notranslate nohighlight">
\[|\mathbf{a}| \gt |\mathbf{b}|\]</div>
<dl class="field-list simple">
<dt class="field-odd">Example</dt>
<dd class="field-odd"><p></p></dd>
</dl>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">])</span> <span class="o">&gt;</span> <span class="n">vector</span><span class="p">([</span><span class="mi">3</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">])</span>
<span class="go">False</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">])</span> <span class="o">&gt;</span> <span class="n">vector</span><span class="p">([</span><span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">])</span>
<span class="go">True</span>
</pre></div>
</div>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.vector.__iadd__">
<code class="sig-name descname">__iadd__</code><span class="sig-paren">(</span><em class="sig-param">other</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.__iadd__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.__iadd__" title="Permalink to this definition"></a></dt>
<dd><p>a += b (new object)</p>
<dl class="field-list simple">
<dt class="field-odd">Example</dt>
<dd class="field-odd"><p></p></dd>
</dl>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">+=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">3</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">3</span><span class="p">])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="go">[4, 5, 6]</span>
</pre></div>
</div>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.vector.__le__">
<code class="sig-name descname">__le__</code><span class="sig-paren">(</span><em class="sig-param">other</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.__le__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.__le__" title="Permalink to this definition"></a></dt>
<dd><p>Test if this object is lower (smaller) than or equal the
other object.</p>
<div class="math notranslate nohighlight">
\[|\mathbf{a}| \le |\mathbf{b}|\]</div>
<dl class="field-list simple">
<dt class="field-odd">Example</dt>
<dd class="field-odd"><p></p></dd>
</dl>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">vector</span><span class="p">([</span><span class="mi">3</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">])</span> <span class="o">&lt;=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">])</span>
<span class="go">True</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">vector</span><span class="p">([</span><span class="mi">3</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">])</span> <span class="o">&lt;=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">])</span>
<span class="go">False</span>
</pre></div>
</div>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.vector.__lt__">
<code class="sig-name descname">__lt__</code><span class="sig-paren">(</span><em class="sig-param">other</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.__lt__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.__lt__" title="Permalink to this definition"></a></dt>
<dd><p>Test if this object is lower (smaller) than the other object.</p>
<div class="math notranslate nohighlight">
\[|\mathbf{a}| \lt |\mathbf{b}|\]</div>
<dl class="field-list simple">
<dt class="field-odd">Example</dt>
<dd class="field-odd"><p></p></dd>
</dl>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">vector</span><span class="p">([</span><span class="mi">3</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">])</span> <span class="o">&lt;</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">])</span>
<span class="go">False</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">vector</span><span class="p">([</span><span class="mi">3</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">])</span> <span class="o">&lt;</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">4</span><span class="p">])</span>
<span class="go">True</span>
</pre></div>
</div>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.vector.__matmul__">
<code class="sig-name descname">__matmul__</code><span class="sig-paren">(</span><em class="sig-param">other</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.__matmul__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.__matmul__" title="Permalink to this definition"></a></dt>
<dd><p>Outer product a &#64; b (new object)</p>
<div class="math notranslate nohighlight">
\[\begin{split}\mathbf{c} = \mathbf{a} \otimes \mathbf{b}
=
\begin{pmatrix}
a_{1}\\
a_{2}\\
a_{3}
\end{pmatrix}
\otimes
\begin{pmatrix}
b_{1}\\
b_{2}\\
b_{3}
\end{pmatrix}
=
\begin{pmatrix}
a_{1}b_{1}&amp;a_{1}b_{2}&amp;a_{1}b_{3}\\
a_{2}b_{1}&amp;a_{2}b_{2}&amp;a_{2}b_{3}\\
a_{3}b_{1}&amp;a_{3}b_{2}&amp;a_{3}b_{3}
\end{pmatrix}\end{split}\]</div>
<dl class="field-list simple">
<dt class="field-odd">Example</dt>
<dd class="field-odd"><p></p></dd>
</dl>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">m</span> <span class="o">=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">])</span> <span class="o">@</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">4</span><span class="p">])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">m</span><span class="p">)</span>
<span class="go">[[1, 2, 4], [2, 4, 8], [3, 6, 12]]</span>
</pre></div>
</div>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.vector.__mul__">
<code class="sig-name descname">__mul__</code><span class="sig-paren">(</span><em class="sig-param">other</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.__mul__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.__mul__" title="Permalink to this definition"></a></dt>
<dd><p>Scalar multiplication, dot product (inner product) or
vector-matrix multiplication. (new object)</p>
<dl class="field-list simple">
</dl>
<div class="math notranslate nohighlight">
\[\begin{split}\mathbf{c} &amp;= \mathbf{a} \cdot b \\
\mathbf{c} &amp;= \mathbf{a} \cdot \mathbf{b} \\
\mathbf{c} &amp;= \mathbf{a} \cdot \mathbf{B}\end{split}\]</div>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>No size checking will be conducted, therefore no exceptions
for wrong usage (result will be nonsense).</p>
</div>
<dl class="field-list simple">
<dt class="field-odd">Example</dt>
<dd class="field-odd"><p></p></dd>
</dl>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">])</span> <span class="o">*</span> <span class="mi">3</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="go">[3, 6, 9, 12, 15]</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">])</span> <span class="o">*</span> <span class="mf">3.</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="go">[3.0, 6.0, 9.0, 12.0, 15.0]</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">s</span> <span class="o">=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">])</span> <span class="o">*</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
<span class="go">14</span>
</pre></div>
</div>
<div class="admonition seealso">
<p class="admonition-title">See also</p>
<p><a class="reference internal" href="#pylib.mathematics.vector.__rmul__" title="pylib.mathematics.vector.__rmul__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__rmul__()</span></code></a></p>
</div>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.vector.__neg__">
<code class="sig-name descname">__neg__</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.__neg__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.__neg__" title="Permalink to this definition"></a></dt>
<dd><p>- a (new object)</p>
<div class="math notranslate nohighlight">
\[\mathbf{b} = -\mathbf{a}\]</div>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.vector.__pos__">
<code class="sig-name descname">__pos__</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.__pos__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.__pos__" title="Permalink to this definition"></a></dt>
<dd><p>+ a (new object)</p>
<div class="math notranslate nohighlight">
\[\mathbf{b} = +\mathbf{a}\]</div>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.vector.__repr__">
<code class="sig-name descname">__repr__</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.__repr__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.__repr__" title="Permalink to this definition"></a></dt>
<dd><p>Return repr(self).</p>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.vector.__rmul__">
<code class="sig-name descname">__rmul__</code><span class="sig-paren">(</span><em class="sig-param">other</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.__rmul__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.__rmul__" title="Permalink to this definition"></a></dt>
<dd><p>Scalar multiplication, dot product (inner product) or
matrix-vector multiplication. (new object)</p>
<dl class="field-list simple">
</dl>
<div class="math notranslate nohighlight">
\[\begin{split}\mathbf{c} &amp;= a \cdot \mathbf{b} \\
\mathbf{c} &amp;= \mathbf{a} \cdot \mathbf{b} \\
\mathbf{c} &amp;= \mathbf{A} \cdot \mathbf{b}\end{split}\]</div>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>No size checking will be conducted, therefore no exceptions
for wrong usage (result will be nonsense).</p>
</div>
<dl class="field-list simple">
<dt class="field-odd">Example</dt>
<dd class="field-odd"><p></p></dd>
</dl>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">=</span> <span class="mi">3</span> <span class="o">*</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="go">[3, 6, 9, 12, 15]</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">=</span> <span class="mf">3.</span> <span class="o">*</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="go">[3.0, 6.0, 9.0, 12.0, 15.0]</span>
</pre></div>
</div>
<div class="admonition seealso">
<p class="admonition-title">See also</p>
<p><a class="reference internal" href="#pylib.mathematics.vector.__mul__" title="pylib.mathematics.vector.__mul__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__mul__()</span></code></a> and <a class="reference internal" href="#pylib.mathematics.matrix.__mul__" title="pylib.mathematics.matrix.__mul__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">matrix.__mul__()</span></code></a> for matrix * vector</p>
</div>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.vector.__str__">
<code class="sig-name descname">__str__</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.__str__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.__str__" title="Permalink to this definition"></a></dt>
<dd><p>Return str(self).</p>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.vector.__sub__">
<code class="sig-name descname">__sub__</code><span class="sig-paren">(</span><em class="sig-param">other</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.__sub__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.__sub__" title="Permalink to this definition"></a></dt>
<dd><p>a - b (new object)</p>
<div class="math notranslate nohighlight">
\[\mathbf{c} = \mathbf{a} - \mathbf{b}\]</div>
<dl class="field-list simple">
<dt class="field-odd">Example</dt>
<dd class="field-odd"><p></p></dd>
</dl>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">])</span> <span class="o">-</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">])</span>
<span class="gp">&gt;&gt;&gt; </span><span class="nb">print</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="go">[0, 0, 0]</span>
</pre></div>
</div>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.vector.abs">
<em class="property">static </em><code class="sig-name descname">abs</code><span class="sig-paren">(</span><em class="sig-param">a</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.abs"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.abs" title="Permalink to this definition"></a></dt>
@@ -370,9 +811,9 @@ it should be.</p>
<dl class="method">
<dt id="pylib.mathematics.vector.ch_cs">
<code class="sig-name descname">ch_cs</code><span class="sig-paren">(</span><em class="sig-param">cs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.ch_cs"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.ch_cs" title="Permalink to this definition"></a></dt>
<dd><p>Transform this vector from its defined coordinate system to a
new coordinate system, defined by the given coordinate system (u,
v and w direction vectors).</p>
<dd><p>Transform this vector from its defined coordinate system to
a new coordinate system, defined by the given coordinate system
(u, v and w direction vectors).</p>
<div class="math notranslate nohighlight">
\[\begin{split}\begin{bmatrix}x' \\ y' \\ z' \\ h'\end{bmatrix} =
\begin{bmatrix}
@@ -401,7 +842,7 @@ v and w direction vectors).</p>
<p>c is orthogonal to both a and b.
The direction of c can be found with the right-hand rule.</p>
<div class="math notranslate nohighlight">
\[\vec{c} = \vec{a} \times \vec{b}\]</div>
\[\mathbf{c} = \mathbf{a} \times \mathbf{b}\]</div>
</dd></dl>
<dl class="method">
@@ -444,10 +885,10 @@ columns filled with v.</p>
<dl class="field-list simple">
</dl>
<div class="math notranslate nohighlight">
\[\vec{e}_a = \frac{\vec{a}}{|\vec{a}|}\]</div>
\[\mathbf{\hat{a}} = \frac{\mathbf{a}}{|\mathbf{a}|}\]</div>
<div class="admonition seealso">
<p class="admonition-title">See also</p>
<p><code class="xref py py-meth docutils literal notranslate"><span class="pre">norm()</span></code> for a norm (magnitude) of a vector</p>
<p><a class="reference internal" href="#pylib.mathematics.vector.__abs__" title="pylib.mathematics.vector.__abs__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__abs__()</span></code></a> for a norm (magnitude) of a vector</p>
</div>
</dd></dl>
@@ -473,8 +914,8 @@ columns filled with ones.</p>
<dl class="method">
<dt id="pylib.mathematics.vector.random">
<em class="property">static </em><code class="sig-name descname">random</code><span class="sig-paren">(</span><em class="sig-param">shape</em>, <em class="sig-param">lmin=0.0</em>, <em class="sig-param">lmax=1.0</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.random"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.random" title="Permalink to this definition"></a></dt>
<dd><p>Returns a random vector of length n or matrix of size m rows, n
columns filled with random numbers.</p>
<dd><p>Returns a random vector of length n or matrix of size m rows,
n columns filled with random numbers.</p>
<dl class="field-list simple">
<dt class="field-odd">Example</dt>
<dd class="field-odd"><p></p></dd>
@@ -548,10 +989,10 @@ columns filled with random numbers.</p>
<dd><p>Scaling</p>
<p>uniform scaling if sx=sy=sz=s.
Note that scaling happens around the origin, so objects not
centered at the origin will have their centers move. To avoid this,
either scale the object when its located at the origin, or
perform a translation afterwards to move the object back to where
it should be.</p>
centered at the origin will have their centers move. To avoid
this, either scale the object when its located at the origin,
or perform a translation afterwards to move the object back to
where it should be.</p>
<div class="math notranslate nohighlight">
\[\begin{split}\begin{bmatrix}x' \\ y' \\ z' \\ h'\end{bmatrix} =
\begin{bmatrix}
@@ -578,11 +1019,6 @@ it should be.</p>
\begin{bmatrix}x \\ y \\ z \\ h\end{bmatrix}\end{split}\]</div>
</dd></dl>
<dl class="method">
<dt id="pylib.mathematics.vector.xyz">
<code class="sig-name descname">xyz</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.xyz"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.xyz" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="pylib.mathematics.vector.zeros">
<em class="property">static </em><code class="sig-name descname">zeros</code><span class="sig-paren">(</span><em class="sig-param">length</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.zeros"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.zeros" title="Permalink to this definition"></a></dt>
@@ -637,7 +1073,7 @@ columns filled with zeros.</p>
<li><a href="index.html">Documentation overview</a><ul>
<li><a href="modules.html">pylib</a><ul>
<li><a href="pylib.html">pylib package</a><ul>
<li>Previous: <a href="pylib.geometry2d_plot.html" title="previous chapter">pylib.geometry2d_plot module</a></li>
<li>Previous: <a href="pylib.geometry_plot_pylab.html" title="previous chapter">pylib.geometry_plot_pylab module</a></li>
<li>Next: <a href="pylib.time_of_day.html" title="next chapter">pylib.time_of_day module</a></li>
</ul></li>
</ul></li>

File diff suppressed because one or more lines are too long