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 # 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. # 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 tags: 645f666f9bcd5a90fca523b33c5a78b7

View File

@@ -40,6 +40,7 @@
<li><a href="pylib/geometry.html">pylib.geometry</a></li> <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.html">pylib.geometry2d</a></li>
<li><a href="pylib/geometry2d_plot.html">pylib.geometry2d_plot</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/mathematics.html">pylib.mathematics</a></li>
<li><a href="pylib/numerical/fit.html">pylib.numerical.fit</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> <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="sd">&quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">math</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">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> <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> <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"> &gt;&gt;&gt; x, y, theta_end = hyotrochoid(20, 6, 6)</span>
<span class="sd"> .. seealso::</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="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">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> <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"> .. 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="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"># 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> <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="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="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="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_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> <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">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">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">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> <span class="k">return</span> <span class="n">frame</span></div>
</pre></div> </pre></div>

View File

@@ -35,7 +35,7 @@
<h1>Source code for pylib.geometry</h1><div class="highlight"><pre> <h1>Source code for pylib.geometry</h1><div class="highlight"><pre>
<span></span><span class="ch">#!/usr/bin/env python</span> <span></span><span class="ch">#!/usr/bin/env python</span>
<span class="c1"># -*- coding: utf-8 -*-</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> <span class="sd">:Date: 2019-12-21</span>
@@ -44,26 +44,37 @@
<span class="sd"> :synopsis: Geometry objects.</span> <span class="sd"> :synopsis: Geometry objects.</span>
<span class="sd">.. moduleauthor:: Daniel Weschke &lt;daniel.weschke@directbox.de&gt;</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="sd">&quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">math</span> <span class="kn">import</span> <span class="nn">math</span>
<span class="kn">import</span> <span class="nn">copy</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> <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="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="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="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>
<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>
<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> <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="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="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="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="c1"># TODO</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> <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> <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> <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="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="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> <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">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> <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="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> <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;World-space with world-space coordinates</span>
<span class="sd"> &quot;&quot;&quot;</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="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">_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="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="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="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="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">_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> <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="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> <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> <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> <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">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">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="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="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="o">.</span><span class="n">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="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="p">)</span>
<span class="c1">#xmax = x if x &gt; xmax: xmax = x</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">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">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> <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> <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="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="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> </pre></div>
</div> </div>

View File

@@ -46,7 +46,7 @@
<span class="sd">.. moduleauthor:: Daniel Weschke &lt;daniel.weschke@directbox.de&gt;</span> <span class="sd">.. moduleauthor:: Daniel Weschke &lt;daniel.weschke@directbox.de&gt;</span>
<span class="sd">&quot;&quot;&quot;</span> <span class="sd">&quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">pylab</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="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> <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> <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">&quot;&quot;&quot;Use/create vector like lists</span>
<span class="sd"> * size -&gt; len(a)</span> <span class="sd"> * size, length of a vector use len(a)</span>
<span class="sd"> * abs -&gt; abs(a)</span> <span class="sd"> * absolute, magntude, norm of a vector use abs(a), see</span>
<span class="sd"> * dot -&gt; a * b</span> <span class="sd"> :meth:`__abs__`</span>
<span class="sd"> * outer -&gt; a @ b</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 = 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[3:5] = [1, 2]</span>
<span class="sd"> &gt;&gt;&gt; print(v)</span> <span class="sd"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [1, 2, 3, 1, 2]</span> <span class="sd"> [1, 2, 3, 1, 2]</span>
<span class="sd"> &gt;&gt;&gt; isinstance(v, vector)</span> <span class="sd"> &gt;&gt;&gt; isinstance(v, vector)</span>
<span class="sd"> True</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; vector([1, 2, 3, 1, 2]) != vector([1, 2, 3, 1, 2])</span>
<span class="sd"> &gt;&gt;&gt; v2 = vector([1,2,3,1,2])</span> <span class="sd"> False</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, 2, 1])</span>
<span class="sd"> True</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"> &gt;&gt;&gt; 2 in vector([1, 2, 3])</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"> True</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([1, 2, 3])</span>
<span class="sd"> &gt;&gt;&gt; v -= vector([3,3,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"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [-2, -1, 0]</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([1, 2, 3])</span>
<span class="sd"> &gt;&gt;&gt; v *= vector([3,3,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"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> 18</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([1, 2, 3])</span>
<span class="sd"> &gt;&gt;&gt; m *= vector([3,3,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"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [[3, 3, 3], [6, 6, 6], [9, 9, 9]]</span> <span class="sd"> [[3, 3, 3], [6, 6, 6], [9, 9, 9]]</span>
<span class="sd"> &quot;&quot;&quot;</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">&quot;&quot;&quot;</span>
<span class="sd"> For index return value, for range return new vector object.</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="sd"> &quot;&quot;&quot;</span>
<span class="c1"># use the list.__getslice__ method and convert result to vector</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="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> <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">&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="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> <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">&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="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">&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"> :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"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [2, 4, 6]</span> <span class="sd"> [2, 4, 6]</span>
<span class="sd"> &quot;&quot;&quot;</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">&quot;&quot;&quot;a += b (new object)</span>
<span class="sd"> :Example:</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([1, 2, 3])</span>
<span class="sd"> &gt;&gt;&gt; v += vector([3,3,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"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [4, 5, 6]</span> <span class="sd"> [4, 5, 6]</span>
<span class="sd"> &quot;&quot;&quot;</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">&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"> :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"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [0, 0, 0]</span> <span class="sd"> [0, 0, 0]</span>
<span class="sd"> &quot;&quot;&quot;</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="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"> vector-matrix multiplication. (new object)</span>
<span class="sd"> a * b (new object)</span>
<span class="sd"> :type other: scalar, vector (or 1d list), matrix (or 2d list)</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"> \mathbf{c} &amp;= \mathbf{a} \cdot \mathbf{B}</span>
<span class="sd"> .. note::</span> <span class="sd"> .. note::</span>
<span class="sd"> No size checking will be conducted, therefore no exceptions for</span> <span class="sd"> No size checking will be conducted, therefore no exceptions</span>
<span class="sd"> wrong usage (result will be nonsense).</span> <span class="sd"> for wrong usage (result will be nonsense).</span>
<span class="sd"> :Example:</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"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [3, 6, 9, 12, 15]</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"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [3.0, 6.0, 9.0, 12.0, 15.0]</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"> &gt;&gt;&gt; print(s)</span>
<span class="sd"> 14</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">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">except</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span> <span class="c1"># vector * matrix</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">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="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"> matrix-vector multiplication. (new object)</span>
<span class="sd"> a * b (new object)</span>
<span class="sd"> :type other: scalar (or 1d list and 2d list)</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"> \mathbf{c} &amp;= \mathbf{A} \cdot \mathbf{b}</span>
<span class="sd"> .. note::</span> <span class="sd"> .. note::</span>
<span class="sd"> No size checking will be conducted, therefore no exceptions for</span> <span class="sd"> No size checking will be conducted, therefore no exceptions</span>
<span class="sd"> wrong usage (result will be nonsense).</span> <span class="sd"> for wrong usage (result will be nonsense).</span>
<span class="sd"> :Example:</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"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [3, 6, 9, 12, 15]</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"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [3.0, 6.0, 9.0, 12.0, 15.0]</span> <span class="sd"> [3.0, 6.0, 9.0, 12.0, 15.0]</span>
<span class="sd"> .. seealso::</span> <span class="sd"> .. seealso::</span>
<span class="sd"> :meth:`__mul__`</span> <span class="sd"> :meth:`__mul__` and :meth:`matrix.__mul__` for matrix * vector</span>
<span class="sd"> :meth:`matrix.__mul__` for matrix * vector</span>
<span class="sd"> &quot;&quot;&quot;</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">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">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="sa">r</span><span class="sd">&quot;&quot;&quot;Outer product a @ b (new object)</span>
<span class="sd"> .. math::</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"> =</span>
<span class="sd"> \begin{pmatrix}</span> <span class="sd"> \begin{pmatrix}</span>
<span class="sd"> a_{1}\\</span> <span class="sd"> a_{1}\\</span>
@@ -281,35 +290,98 @@
<span class="sd"> :Example:</span> <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"> &gt;&gt;&gt; print(m)</span>
<span class="sd"> [[1, 2, 4], [2, 4, 8], [3, 6, 12]]</span> <span class="sd"> [[1, 2, 4], [2, 4, 8], [3, 6, 12]]</span>
<span class="sd"> &quot;&quot;&quot;</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">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">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">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="sa">r</span><span class="sd">&quot;&quot;&quot;Magnitude / norm of a vector</span>
<span class="sd"> .. math::</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"> :Example:</span>
<span class="sd"> &gt;&gt;&gt; norm([3, 4])</span> <span class="sd"> &gt;&gt;&gt; v = vector([3, 4])</span>
<span class="sd"> 5</span> <span class="sd"> &gt;&gt;&gt; abs(v)</span>
<span class="sd"> &gt;&gt;&gt; norm(vector([3, 4]))</span> <span class="sd"> 5.0</span>
<span class="sd"> 5</span>
<span class="sd"> &quot;&quot;&quot;</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> <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="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> <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="sd"> .. math::</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"> |\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> <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> <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> <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="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">&quot;&quot;&quot;Returns a random vector of length n or matrix of size m rows,</span>
<span class="sd"> columns filled with random numbers.</span> <span class="sd"> n columns filled with random numbers.</span>
<span class="sd"> :Example:</span> <span class="sd"> :Example:</span>
@@ -386,10 +458,10 @@
<span class="sd"> :type a: vector</span> <span class="sd"> :type a: vector</span>
<span class="sd"> .. math::</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"> .. 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="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="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> <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"> The direction of c can be found with the right-hand rule.</span>
<span class="sd"> .. math::</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="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="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">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> <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> <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> <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"> 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"> 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"> centered at the origin will have their centers move. To avoid</span>
<span class="sd"> either scale the object when it&#39;s located at the origin, or</span> <span class="sd"> this, either scale the object when it&#39;s located at the origin,</span>
<span class="sd"> perform a translation afterwards to move the object back to where</span> <span class="sd"> or perform a translation afterwards to move the object back to</span>
<span class="sd"> it should be.</span> <span class="sd"> where it should be.</span>
<span class="sd"> .. math::</span> <span class="sd"> .. math::</span>
<span class="sd"> \begin{bmatrix}x&#39; \\ y&#39; \\ z&#39; \\ h&#39;\end{bmatrix} =</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"> \end{bmatrix}</span>
<span class="sd"> \begin{bmatrix}x \\ y \\ z \\ h\end{bmatrix}</span> <span class="sd"> \begin{bmatrix}x \\ y \\ z \\ h\end{bmatrix}</span>
<span class="sd"> &quot;&quot;&quot;</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">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">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="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> <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> <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="sa">r</span><span class="sd">&quot;&quot;&quot;Transform this vector from its defined coordinate system to</span>
<span class="sd"> new coordinate system, defined by the given coordinate system (u,</span> <span class="sd"> a new coordinate system, defined by the given coordinate system</span>
<span class="sd"> v and w direction vectors).</span> <span class="sd"> (u, v and w direction vectors).</span>
<span class="sd"> .. math::</span> <span class="sd"> .. math::</span>
<span class="sd"> \begin{bmatrix}x&#39; \\ y&#39; \\ z&#39; \\ h&#39;\end{bmatrix} =</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;Use/create matrix like list of lists</span>
<span class="sd"> &quot;&quot;&quot;</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">&quot;&quot;&quot;</span>
<span class="sd"> For index return value, for range return new vector object.</span> <span class="sd"> For index return value, for range return new vector object.</span>
<span class="sd"> :Example:</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"> &gt;&gt;&gt; print(m[2])</span>
<span class="sd"> [7, 8, 9, 0]</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"> [[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"> [[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"> [[1, 3], [7, 9]]</span>
<span class="sd"> &quot;&quot;&quot;</span> <span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># index: slice(stop), slice(start, stop[, step])</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="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="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="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="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> <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> <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"> Rotates the coordinate system of vectors</span>
<span class="sd"> .. math::</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"> \begin{bmatrix}</span>
<span class="sd"> 1 &amp; 0 &amp; 0 &amp; 0 \\</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> <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"> Rotates the coordinate system of vectors</span>
<span class="sd"> .. math::</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"> \begin{bmatrix}</span>
<span class="sd"> \cos \theta &amp; 0 &amp; \sin \theta &amp; 0 \\</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> <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"> Rotates the coordinate system of vectors</span>
<span class="sd"> .. math::</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"> \begin{bmatrix}</span>
<span class="sd"> \cos \theta &amp; -\sin \theta &amp; 0 &amp; 0 \\</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> <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"> :Example:</span>
<span class="sd"> .. math::</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"> \begin{bmatrix}</span>
<span class="sd"> \cos 90° &amp; -\sin 90° &amp; 0 &amp; 0 \\</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"> \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; 1 &amp; 0 \\</span>
<span class="sd"> 0 &amp; 0 &amp; 0 &amp; 1</span> <span class="sd"> 0 &amp; 0 &amp; 0 &amp; 1</span>
<span class="sd"> \end{bmatrix}</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"> \begin{bmatrix}</span>
<span class="sd"> 0 &amp; -1 &amp; 0 &amp; 0 \\</span> <span class="sd"> 0 &amp; -1 &amp; 0 &amp; 0 \\</span>
<span class="sd"> 1 &amp; 0 &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="sa">r</span><span class="sd">&quot;&quot;&quot;Translation matrix</span>
<span class="sd"> .. math::</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"> \begin{bmatrix}</span>
<span class="sd"> 1 &amp; 0 &amp; 0 &amp; t_x \\</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> <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"> 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"> 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"> centered at the origin will have their centers move. To avoid</span>
<span class="sd"> either scale the object when it&#39;s located at the origin, or</span> <span class="sd"> this, either scale the object when it&#39;s located at the origin,</span>
<span class="sd"> perform a translation afterwards to move the object back to where</span> <span class="sd"> or perform a translation afterwards to move the object back to</span>
<span class="sd"> it should be.</span> <span class="sd"> where it should be.</span>
<span class="sd"> .. math::</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"> \begin{bmatrix}</span>
<span class="sd"> s_x &amp; 0 &amp; 0 &amp; 0 \\</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> <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"> 0 &amp; 0 &amp; 0 &amp; 1</span>
<span class="sd"> \end{bmatrix}</span> <span class="sd"> \end{bmatrix}</span>
<span class="sd"> &quot;&quot;&quot;</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">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">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> <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="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">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="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"> matrix-vector multiplication. (new object)</span>
<span class="sd"> a * b (new object)</span>
<span class="sd"> :type other: scalar, vector (or 1d list), matrix (or 2d list)</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"> \mathbf{C} &amp;= \mathbf{A} \cdot \mathbf{B}</span>
<span class="sd"> .. note::</span> <span class="sd"> .. note::</span>
<span class="sd"> No size checking will be conducted, therefore no exceptions for</span> <span class="sd"> No size checking will be conducted, therefore no exceptions</span>
<span class="sd"> wrong usage (result will be nonsense).</span> <span class="sd"> for wrong usage (result will be nonsense).</span>
<span class="sd"> :Example:</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"> &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"> [[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"> &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"> [[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"> &gt;&gt;&gt; print(v)</span>
<span class="sd"> [75, 186, 297]</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"> &gt;&gt;&gt; print(m)</span>
<span class="sd"> [[91, 96, 102], [220, 231, 246], [349, 366, 390]]</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"> :meth:`__rmul__`</span>
<span class="sd"> &quot;&quot;&quot;</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">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">except</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span> <span class="c1"># matrix * vector</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">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="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"> vector-matrix multiplication. (new object)</span>
<span class="sd"> a * b (new object)</span>
<span class="sd"> :type other: scalar (or 1d list and 2d list)</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"> \mathbf{C} &amp;= \mathbf{A} \cdot \mathbf{B}</span>
<span class="sd"> .. note::</span> <span class="sd"> .. note::</span>
<span class="sd"> No size checking will be conducted, therefore no exceptions for</span> <span class="sd"> No size checking will be conducted, therefore no exceptions</span>
<span class="sd"> wrong usage (result will be nonsense).</span> <span class="sd"> for wrong usage (result will be nonsense).</span>
<span class="sd"> :Example:</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"> &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"> [[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"> &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"> [[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"> .. seealso::</span>
<span class="sd"> :meth:`__mul__`</span> <span class="sd"> :meth:`__mul__` and :meth:`vector.__mul__` for vector * matrix</span>
<span class="sd"> :meth:`vector.__mul__` for vector * matrix</span>
<span class="sd"> &quot;&quot;&quot;</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">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">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">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">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> <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> <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> <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> <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> <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> <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"> 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"> 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"> centered at the origin will have their centers move. To avoid</span>
<span class="sd"> either scale the object when it&#39;s located at the origin, or</span> <span class="sd"> this, either scale the object when it&#39;s located at the origin,</span>
<span class="sd"> perform a translation afterwards to move the object back to where</span> <span class="sd"> or perform a translation afterwards to move the object back to</span>
<span class="sd"> it should be.</span> <span class="sd"> where it should be.</span>
<span class="sd"> .. math::</span> <span class="sd"> .. math::</span>
<span class="sd"> \begin{bmatrix}</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"> 0 &amp; 0 &amp; 0 &amp; h</span>
<span class="sd"> \end{bmatrix}</span> <span class="sd"> \end{bmatrix}</span>
<span class="sd"> &quot;&quot;&quot;</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">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">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="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.geometry
pylib.geometry2d pylib.geometry2d
pylib.geometry2d_plot pylib.geometry2d_plot
pylib.geometry_plot
pylib.geometry_plot_pylab
pylib.mathematics pylib.mathematics
pylib.time_of_day pylib.time_of_day

View File

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

View File

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

View File

@@ -37,7 +37,8 @@
<h1 id="index">Index</h1> <h1 id="index">Index</h1>
<div class="genindex-jumpbox"> <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="#B"><strong>B</strong></a>
| <a href="#C"><strong>C</strong></a> | <a href="#C"><strong>C</strong></a>
| <a href="#D"><strong>D</strong></a> | <a href="#D"><strong>D</strong></a>
@@ -62,6 +63,74 @@
| <a href="#Z"><strong>Z</strong></a> | <a href="#Z"><strong>Z</strong></a>
</div> </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> <h2 id="A">A</h2>
<table style="width: 100%" class="indextable genindextable"><tr> <table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul> <td style="width: 33%; vertical-align: top;"><ul>
@@ -93,22 +162,26 @@
<h2 id="C">C</h2> <h2 id="C">C</h2>
<table style="width: 100%" class="indextable genindextable"><tr> <table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul> <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><a href="pylib.geometry.html#pylib.geometry.World.center">center() (World method)</a>
</li> </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> <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><a href="pylib.geometry.html#pylib.geometry.Wireframe.ch_cs">(Wireframe method)</a>
</li> </li>
<li><a href="pylib.geometry.html#pylib.geometry.World.ch_cs">(World method)</a> <li><a href="pylib.geometry.html#pylib.geometry.World.ch_cs">(World method)</a>
</li> </li>
</ul></li> </ul></li>
<li><a href="pylib.geometry.html#pylib.geometry.Circle">Circle (class in pylib.geometry)</a> <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> </li>
</ul></td> </ul></td>
<td style="width: 33%; vertical-align: top;"><ul> <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><a href="pylib.function.html#pylib.function.cosine_wave">cosine_wave() (in module pylib.function)</a>
</li> </li>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.cross">cross() (vector static method)</a> <li><a href="pylib.mathematics.html#pylib.mathematics.vector.cross">cross() (vector static method)</a>
@@ -205,11 +278,15 @@
</li> </li>
<li><a href="pylib.geometry.html#module-geometry">geometry (module)</a> <li><a href="pylib.geometry.html#module-geometry">geometry (module)</a>
</li> </li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.geometry2d.html#module-geometry2d">geometry2d (module)</a> <li><a href="pylib.geometry2d.html#module-geometry2d">geometry2d (module)</a>
</li> </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><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>
<li><a href="pylib.geometry.html#pylib.geometry.CS.get_coordinates">get_coordinates() (CS method)</a> <li><a href="pylib.geometry.html#pylib.geometry.CS.get_coordinates">get_coordinates() (CS method)</a>
</li> </li>
@@ -221,12 +298,14 @@
<h2 id="H">H</h2> <h2 id="H">H</h2>
<table style="width: 100%" class="indextable genindextable"><tr> <table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul> <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>
<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> </li>
</ul></td> </ul></td>
<td style="width: 33%; vertical-align: top;"><ul> <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><a href="pylib.time_of_day.html#pylib.time_of_day.hours_norm">hours_norm() (in module pylib.time_of_day)</a>
</li> </li>
<li><a href="pylib.function.html#pylib.function.hypotrochoid">hypotrochoid() (in module pylib.function)</a> <li><a href="pylib.function.html#pylib.function.hypotrochoid">hypotrochoid() (in module pylib.function)</a>
@@ -241,13 +320,15 @@
</li> </li>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.im">im() (vector static method)</a> <li><a href="pylib.mathematics.html#pylib.mathematics.vector.im">im() (vector static method)</a>
</li> </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><a href="pylib.time_of_day.html#pylib.time_of_day.in_seconds">in_seconds() (in module pylib.time_of_day)</a>
</li> </li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.numerical.integration.html#module-integration">integration (module)</a> <li><a href="pylib.numerical.integration.html#module-integration">integration (module)</a>
</li> </li>
<li><a href="pylib.geometry2d.html#pylib.geometry2d.interpolate_hermite">interpolate_hermite() (in module pylib.geometry2d)</a> <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> </li>
</ul></td> </ul></td>
</tr></table> </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><a href="pylib.geometry2d_plot.html#pylib.geometry2d_plot.plot_cubic_lines">plot_cubic_lines() (in module pylib.geometry2d_plot)</a>
</li> </li>
<li><a href="pylib.geometry2d_plot.html#pylib.geometry2d_plot.plot_lines">plot_lines() (in module pylib.geometry2d_plot)</a> <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>
<li><a href="pylib.geometry.html#pylib.geometry.Point">Point (class in pylib.geometry)</a> <li><a href="pylib.geometry.html#pylib.geometry.Point">Point (class in pylib.geometry)</a>
</li> </li>
<li><a href="pylib.geometry.html#pylib.geometry.Wireframe.points">points() (Wireframe method)</a> <li><a href="pylib.geometry.html#pylib.geometry.Wireframe.points">points() (Wireframe method)</a>
</li> </li>
<li><a href="pylib.geometry.html#pylib.geometry.Polygon">Polygon (class in pylib.geometry)</a> <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>
<li><a href="pylib.html#module-pylib">pylib (module)</a> <li><a href="pylib.html#module-pylib">pylib (module)</a>
</li> </li>
@@ -348,6 +433,10 @@
<li><a href="pylib.geometry2d.html#module-pylib.geometry2d">pylib.geometry2d (module)</a> <li><a href="pylib.geometry2d.html#module-pylib.geometry2d">pylib.geometry2d (module)</a>
</li> </li>
<li><a href="pylib.geometry2d_plot.html#module-pylib.geometry2d_plot">pylib.geometry2d_plot (module)</a> <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>
<li><a href="pylib.mathematics.html#module-pylib.mathematics">pylib.mathematics (module)</a> <li><a href="pylib.mathematics.html#module-pylib.mathematics">pylib.mathematics (module)</a>
</li> </li>
@@ -432,6 +521,8 @@
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix.scale">scale() (matrix method)</a> <li><a href="pylib.mathematics.html#pylib.mathematics.matrix.scale">scale() (matrix method)</a>
<ul> <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><a href="pylib.mathematics.html#pylib.mathematics.vector.scale">(vector method)</a>
</li> </li>
<li><a href="pylib.geometry.html#pylib.geometry.Wireframe.scale">(Wireframe method)</a> <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><a href="pylib.time_of_day.html#pylib.time_of_day.seconds_norm">seconds_norm() (in module pylib.time_of_day)</a>
</li> </li>
<li><a href="pylib.data.html#pylib.data.seq">seq() (in module pylib.data)</a> <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>
<li><a href="pylib.function.html#pylib.function.sine_wave">sine_wave() (in module pylib.function)</a> <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>
<li><a href="pylib.geometry.html#pylib.geometry.World.space_diagonal">space_diagonal() (World method)</a> <li><a href="pylib.geometry.html#pylib.geometry.World.space_diagonal">space_diagonal() (World method)</a>
</li> </li>
@@ -475,6 +570,8 @@
<ul> <ul>
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix.translate">(matrix method)</a> <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>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.translate">(vector method)</a> <li><a href="pylib.mathematics.html#pylib.mathematics.vector.translate">(vector method)</a>
</li> </li>
@@ -513,8 +610,20 @@
<td style="width: 33%; vertical-align: top;"><ul> <td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.geometry.html#pylib.geometry.Wireframe">Wireframe (class in pylib.geometry)</a> <li><a href="pylib.geometry.html#pylib.geometry.Wireframe">Wireframe (class in pylib.geometry)</a>
</li> </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> </ul></td>
<td style="width: 33%; vertical-align: top;"><ul> <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><a href="pylib.geometry.html#pylib.geometry.World">World (class in pylib.geometry)</a>
</li> </li>
<li><a href="pylib.data.html#pylib.data.write">write() (in module pylib.data)</a> <li><a href="pylib.data.html#pylib.data.write">write() (in module pylib.data)</a>
@@ -531,12 +640,10 @@
</li> </li>
</ul></td> </ul></td>
<td style="width: 33%; vertical-align: top;"><ul> <td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.xyz">xyz() (vector method)</a> <li><a href="pylib.geometry.html#pylib.geometry.Wireframe.xy">xy() (Wireframe method)</a>
</li>
<ul> <li><a href="pylib.geometry.html#pylib.geometry.Wireframe.xyz">xyz() (Wireframe method)</a>
<li><a href="pylib.geometry.html#pylib.geometry.Wireframe.xyz">(Wireframe method)</a>
</li> </li>
</ul></li>
</ul></td> </ul></td>
</tr></table> </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.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.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.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.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.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.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> <li class="toctree-l3"><a class="reference internal" href="pylib.time_of_day.html">pylib.time_of_day module</a></li>
</ul> </ul>

Binary file not shown.

View File

@@ -99,6 +99,16 @@
<td> <td>
<a href="pylib.geometry2d_plot.html#module-geometry2d_plot"><code class="xref">geometry2d_plot</code></a> <em>(*nix, Windows)</em></td><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> <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="pcap"><td></td><td>&#160;</td><td></td></tr>
<tr class="cap" id="cap-i"><td></td><td> <tr class="cap" id="cap-i"><td></td><td>
<strong>i</strong></td><td></td></tr> <strong>i</strong></td><td></td></tr>
@@ -172,6 +182,16 @@
<td>&#160;&#160;&#160; <td>&#160;&#160;&#160;
<a href="pylib.geometry2d_plot.html#module-pylib.geometry2d_plot"><code class="xref">pylib.geometry2d_plot</code></a></td><td> <a href="pylib.geometry2d_plot.html#module-pylib.geometry2d_plot"><code class="xref">pylib.geometry2d_plot</code></a></td><td>
<em></em></td></tr> <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"> <tr class="cg-1">
<td></td> <td></td>
<td>&#160;&#160;&#160; <td>&#160;&#160;&#160;

View File

@@ -83,6 +83,39 @@ array. m = k / n</p>
</dl> </dl>
</dd></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"> <dl class="function">
<dt id="pylib.data.load"> <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> <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>
<div class="admonition seealso"> <div class="admonition seealso">
<p class="admonition-title">See also</p> <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> </div>
</dd></dl> </dd></dl>
@@ -359,7 +359,7 @@ Example of 3 columns and 3 rows (upside down view of normal braille/drawil
</dl> </dl>
<div class="admonition seealso"> <div class="admonition seealso">
<p class="admonition-title">See also</p> <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> </div>
</dd></dl> </dd></dl>

View File

@@ -36,16 +36,23 @@
<div class="section" id="module-pylib.geometry"> <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> <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"> <dl class="field-list simple">
<dt class="field-odd">Date</dt> <dt class="field-odd">Date</dt>
<dd class="field-odd"><p>2019-12-21</p> <dd class="field-odd"><p>2019-12-21</p>
</dd> </dd>
</dl> </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"> <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> <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> <p>Coordinate system</p>
<dl class="method"> <dl class="method">
<dt id="pylib.geometry.CS.get_coordinates"> <dt id="pylib.geometry.CS.get_coordinates">
@@ -85,13 +92,20 @@
<dl class="class"> <dl class="class">
<dt id="pylib.geometry.Direction"> <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> <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> <p>Direction in local coordinate system</p>
</dd></dl> </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"> <dl class="class">
<dt id="pylib.geometry.Line"> <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> <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> <p>Line a open wireframe object in local coordinate system</p>
</dd></dl> </dd></dl>
@@ -99,8 +113,14 @@
<dl class="class"> <dl class="class">
<dt id="pylib.geometry.Point"> <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> <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> <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> </dd></dl>
<dl class="class"> <dl class="class">
@@ -110,12 +130,53 @@
<p>Polygon as closed wireframe object in local coordinate system</p> <p>Polygon as closed wireframe object in local coordinate system</p>
</dd></dl> </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"> <dl class="class">
<dt id="pylib.geometry.Wireframe"> <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> <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> <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>Open and closed wireframe object in local coordinate system</p>
<p>This class create its own points (copy).</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"> <dl class="method">
<dt id="pylib.geometry.Wireframe.ch_cs"> <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> <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> <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> <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"> <dl class="method">
<dt id="pylib.geometry.Wireframe.xyz"> <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> <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> </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> <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> <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> <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"> <dl class="method">
<dt id="pylib.geometry.World.add"> <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> <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> <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> <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> </dd></dl>
</div>
</div> </div>

View File

@@ -276,7 +276,7 @@ decides what the left and the right end point of the line is.</p></li>
</dl> </dl>
<div class="admonition seealso"> <div class="admonition seealso">
<p class="admonition-title">See also</p> <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> module to plot the lines</p>
</div> </div>
</dd></dl> </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> <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="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.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="prev" title="pylib.geometry2d module" href="pylib.geometry2d.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" /> <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="modules.html">pylib</a><ul>
<li><a href="pylib.html">pylib package</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>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> </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.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.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.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.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.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.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> <li class="toctree-l1"><a class="reference internal" href="pylib.time_of_day.html">pylib.time_of_day module</a></li>
</ul> </ul>

View File

@@ -17,7 +17,7 @@
<link rel="index" title="Index" href="genindex.html" /> <link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.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="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" /> <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> <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> <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> <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"> <dl class="method">
<dt id="pylib.mathematics.matrix.rotate_x"> <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> <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> <dd><p>Rotation matrix about the x direction.</p>
<p>Rotates the coordinate system of vectors</p> <p>Rotates the coordinate system of vectors</p>
<div class="math notranslate nohighlight"> <div class="math notranslate nohighlight">
\[\begin{split}R_{x}(\theta) = \[\begin{split}\mathbf{R}_{x}(\theta) =
\begin{bmatrix} \begin{bmatrix}
1 &amp; 0 &amp; 0 &amp; 0 \\ 1 &amp; 0 &amp; 0 &amp; 0 \\
0 &amp; \cos \theta &amp; -\sin \theta &amp; 0 \\ 0 &amp; \cos \theta &amp; -\sin \theta &amp; 0 \\
@@ -149,7 +262,7 @@
<dd><p>Rotation matrix about the y direction.</p> <dd><p>Rotation matrix about the y direction.</p>
<p>Rotates the coordinate system of vectors</p> <p>Rotates the coordinate system of vectors</p>
<div class="math notranslate nohighlight"> <div class="math notranslate nohighlight">
\[\begin{split}R_{y}(\theta) = \[\begin{split}\mathbf{R}_{y}(\theta) =
\begin{bmatrix} \begin{bmatrix}
\cos \theta &amp; 0 &amp; \sin \theta &amp; 0 \\ \cos \theta &amp; 0 &amp; \sin \theta &amp; 0 \\
0 &amp; 1 &amp; 0 &amp; 0 \\ 0 &amp; 1 &amp; 0 &amp; 0 \\
@@ -164,7 +277,7 @@
<dd><p>Rotation matrix about the z direction.</p> <dd><p>Rotation matrix about the z direction.</p>
<p>Rotates the coordinate system of vectors</p> <p>Rotates the coordinate system of vectors</p>
<div class="math notranslate nohighlight"> <div class="math notranslate nohighlight">
\[\begin{split}R_{z}(\theta) = \[\begin{split}\mathbf{R}_{z}(\theta) =
\begin{bmatrix} \begin{bmatrix}
\cos \theta &amp; -\sin \theta &amp; 0 &amp; 0 \\ \cos \theta &amp; -\sin \theta &amp; 0 &amp; 0 \\
\sin \theta &amp; \cos \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> <dd class="field-odd"><p></p></dd>
</dl> </dl>
<div class="math notranslate nohighlight"> <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} \begin{bmatrix}
\cos 90° &amp; -\sin 90° &amp; 0 &amp; 0 \\ \cos 90° &amp; -\sin 90° &amp; 0 &amp; 0 \\
\sin 90° &amp; \cos 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; 1 &amp; 0 \\
0 &amp; 0 &amp; 0 &amp; 1 0 &amp; 0 &amp; 0 &amp; 1
\end{bmatrix} \end{bmatrix}
\begin{bmatrix}1 \\ 0 \\ 0 \\ 1\end{bmatrix} = \begin{bmatrix}1 \\ 0 \\ 0 \\ 1\end{bmatrix} \\
&amp;=
\begin{bmatrix} \begin{bmatrix}
0 &amp; -1 &amp; 0 &amp; 0 \\ 0 &amp; -1 &amp; 0 &amp; 0 \\
1 &amp; 0 &amp; 0 &amp; 0 \\ 1 &amp; 0 &amp; 0 &amp; 0 \\
@@ -200,12 +316,12 @@
<dd><p>Scaling matrix</p> <dd><p>Scaling matrix</p>
<p>uniform scaling if sx=sy=sz=s. <p>uniform scaling if sx=sy=sz=s.
Note that scaling happens around the origin, so objects not Note that scaling happens around the origin, so objects not
centered at the origin will have their centers move. To avoid this, centered at the origin will have their centers move. To avoid
either scale the object when its located at the origin, or this, either scale the object when its located at the origin,
perform a translation afterwards to move the object back to where or perform a translation afterwards to move the object back to
it should be.</p> where it should be.</p>
<div class="math notranslate nohighlight"> <div class="math notranslate nohighlight">
\[\begin{split}S = \[\begin{split}\mathbf{S} =
\begin{bmatrix} \begin{bmatrix}
s_x &amp; 0 &amp; 0 &amp; 0 \\ s_x &amp; 0 &amp; 0 &amp; 0 \\
0 &amp; s_y &amp; 0 &amp; 0 \\ 0 &amp; s_y &amp; 0 &amp; 0 \\
@@ -220,10 +336,10 @@ it should be.</p>
<dd><p>Scaling</p> <dd><p>Scaling</p>
<p>uniform scaling if sx=sy=sz=s. <p>uniform scaling if sx=sy=sz=s.
Note that scaling happens around the origin, so objects not Note that scaling happens around the origin, so objects not
centered at the origin will have their centers move. To avoid this, centered at the origin will have their centers move. To avoid
either scale the object when its located at the origin, or this, either scale the object when its located at the origin,
perform a translation afterwards to move the object back to where or perform a translation afterwards to move the object back to
it should be.</p> where it should be.</p>
<div class="math notranslate nohighlight"> <div class="math notranslate nohighlight">
\[\begin{split}\begin{bmatrix} \[\begin{split}\begin{bmatrix}
xx' &amp; xy' &amp; xz' &amp; t_x' \\ 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> <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> <dd><p>Translation matrix</p>
<div class="math notranslate nohighlight"> <div class="math notranslate nohighlight">
\[\begin{split}T = \[\begin{split}\mathbf{T} =
\begin{bmatrix} \begin{bmatrix}
1 &amp; 0 &amp; 0 &amp; t_x \\ 1 &amp; 0 &amp; 0 &amp; t_x \\
0 &amp; 1 &amp; 0 &amp; t_y \\ 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> <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> <p>Use/create vector like lists</p>
<ul class="simple"> <ul class="simple">
<li><p>size -&gt; len(a)</p></li> <li><p>size, length of a vector use len(a)</p></li>
<li><p>abs -&gt; abs(a)</p></li> <li><p>absolute, magntude, norm of a vector use abs(a), see
<li><p>dot -&gt; a * b</p></li> <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>outer -&gt; a &#64; b</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> </ul>
<p>use super constructor</p> <dl class="field-list simple">
<p>use super __iter__</p> <dt class="field-odd">__iter__</dt>
<p>use super __setitem__</p> <dd class="field-odd"><p></p></dd>
<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> </dl>
<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> <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="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="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="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> <span class="go">True</span>
</pre></div> </pre></div>
</div> </div>
<p>use super __lt__(a, b)</p> <dl class="field-list simple">
<p>use super __le__(a, b)</p> <dt class="field-odd">__eq__(a, b)</dt>
<p>use super __eq__(a, b)</p> <dd class="field-odd"><p></p></dd>
<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> </dl>
<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> <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="gp">&gt;&gt;&gt; </span><span class="n">v</span> <span class="o">==</span> <span class="n">v2</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> <span class="go">True</span>
</pre></div> </pre></div>
</div> </div>
<p>use super __ne__(a, b)</p> <dl class="field-list simple">
<p>use super __ge__(a, b)</p> <dt class="field-odd">__contains__</dt>
<p>use super __gt__(a, b)</p> <dd class="field-odd"><p></p></dd>
<p>use super __contains__</p> </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> <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> <span class="go">True</span>
</pre></div> </pre></div>
</div> </div>
<p>__isub__</p> <dl class="field-list simple">
<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> <dt class="field-odd">__isub__</dt>
<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> <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="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> <span class="go">[-2, -1, 0]</span>
</pre></div> </pre></div>
</div> </div>
<p>__imul__</p> <dl class="field-list simple">
<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> <dt class="field-odd">__imul__</dt>
<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> <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="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> <span class="go">18</span>
</pre></div> </pre></div>
</div> </div>
<p>__imatmul__</p> <dl class="field-list simple">
<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> <dt class="field-odd">__imatmul__</dt>
<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> <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="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> <span class="go">[[3, 3, 3], [6, 6, 6], [9, 9, 9]]</span>
</pre></div> </pre></div>
</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"> <dl class="method">
<dt id="pylib.mathematics.vector.abs"> <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> <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"> <dl class="method">
<dt id="pylib.mathematics.vector.ch_cs"> <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> <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 <dd><p>Transform this vector from its defined coordinate system to
new coordinate system, defined by the given coordinate system (u, a new coordinate system, defined by the given coordinate system
v and w direction vectors).</p> (u, v and w direction vectors).</p>
<div class="math notranslate nohighlight"> <div class="math notranslate nohighlight">
\[\begin{split}\begin{bmatrix}x' \\ y' \\ z' \\ h'\end{bmatrix} = \[\begin{split}\begin{bmatrix}x' \\ y' \\ z' \\ h'\end{bmatrix} =
\begin{bmatrix} \begin{bmatrix}
@@ -401,7 +842,7 @@ v and w direction vectors).</p>
<p>c is orthogonal to both a and b. <p>c is orthogonal to both a and b.
The direction of c can be found with the right-hand rule.</p> The direction of c can be found with the right-hand rule.</p>
<div class="math notranslate nohighlight"> <div class="math notranslate nohighlight">
\[\vec{c} = \vec{a} \times \vec{b}\]</div> \[\mathbf{c} = \mathbf{a} \times \mathbf{b}\]</div>
</dd></dl> </dd></dl>
<dl class="method"> <dl class="method">
@@ -444,10 +885,10 @@ columns filled with v.</p>
<dl class="field-list simple"> <dl class="field-list simple">
</dl> </dl>
<div class="math notranslate nohighlight"> <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"> <div class="admonition seealso">
<p class="admonition-title">See also</p> <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> </div>
</dd></dl> </dd></dl>
@@ -473,8 +914,8 @@ columns filled with ones.</p>
<dl class="method"> <dl class="method">
<dt id="pylib.mathematics.vector.random"> <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> <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 <dd><p>Returns a random vector of length n or matrix of size m rows,
columns filled with random numbers.</p> n columns filled with random numbers.</p>
<dl class="field-list simple"> <dl class="field-list simple">
<dt class="field-odd">Example</dt> <dt class="field-odd">Example</dt>
<dd class="field-odd"><p></p></dd> <dd class="field-odd"><p></p></dd>
@@ -548,10 +989,10 @@ columns filled with random numbers.</p>
<dd><p>Scaling</p> <dd><p>Scaling</p>
<p>uniform scaling if sx=sy=sz=s. <p>uniform scaling if sx=sy=sz=s.
Note that scaling happens around the origin, so objects not Note that scaling happens around the origin, so objects not
centered at the origin will have their centers move. To avoid this, centered at the origin will have their centers move. To avoid
either scale the object when its located at the origin, or this, either scale the object when its located at the origin,
perform a translation afterwards to move the object back to where or perform a translation afterwards to move the object back to
it should be.</p> where it should be.</p>
<div class="math notranslate nohighlight"> <div class="math notranslate nohighlight">
\[\begin{split}\begin{bmatrix}x' \\ y' \\ z' \\ h'\end{bmatrix} = \[\begin{split}\begin{bmatrix}x' \\ y' \\ z' \\ h'\end{bmatrix} =
\begin{bmatrix} \begin{bmatrix}
@@ -578,11 +1019,6 @@ it should be.</p>
\begin{bmatrix}x \\ y \\ z \\ h\end{bmatrix}\end{split}\]</div> \begin{bmatrix}x \\ y \\ z \\ h\end{bmatrix}\end{split}\]</div>
</dd></dl> </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"> <dl class="method">
<dt id="pylib.mathematics.vector.zeros"> <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> <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="index.html">Documentation overview</a><ul>
<li><a href="modules.html">pylib</a><ul> <li><a href="modules.html">pylib</a><ul>
<li><a href="pylib.html">pylib package</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> <li>Next: <a href="pylib.time_of_day.html" title="next chapter">pylib.time_of_day module</a></li>
</ul></li> </ul></li>
</ul></li> </ul></li>

File diff suppressed because one or more lines are too long

View File

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

View File

@@ -82,4 +82,10 @@ html_theme_options = {
'xref_border': 'transparent', 'xref_border': 'transparent',
'seealso_bg': '#25272c', 'seealso_bg': '#25272c',
'seealso_border': '#2C2C2C', 'seealso_border': '#2C2C2C',
'note_bg': '#25272c',
'note_border': '#2C2C2C',
}
autodoc_default_options = {
'special-members': '__iter__, __contains__, __getitem__, __setitem__, __pos__, __neg__, __add__, __iadd__, __sub__, __isub__, __mul__, __rmul__, __imul__, __matmul__, __imatmul__, __abs__, __lt__, __le__, __gt__, __ge__, __eq__, __ne__, __str__, __repr__'
} }

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.geometry
pylib.geometry2d pylib.geometry2d
pylib.geometry2d_plot pylib.geometry2d_plot
pylib.geometry_plot
pylib.geometry_plot_pylab
pylib.mathematics pylib.mathematics
pylib.time_of_day pylib.time_of_day

View File

@@ -0,0 +1,30 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Example geometry of hexahedra.
:Date: 2019-12-24
.. module:: geometry_hexahedra
:platform: *nix, Windows
:synopsis: Example geometry of hexahedra.
.. moduleauthor:: Daniel Weschke <daniel.weschke@directbox.de>
"""
from pylib.geometry import World, Hexahedron
from pylib.geometry_plot_pylab import cad_wireframe
def geometry():
w = World()
for i in range(3):
for j in range(3):
for k in range(3):
w.add(Hexahedron().scale(0.8).translate(-2+2*i, -2+2*j, -2+2*k))
return w
if __name__ == "__main__":
w = geometry()
#print(w.bounding_box())
#print(*w)
#print(w.wireframes_xyz())
cad_wireframe(w)

View File

@@ -0,0 +1,41 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Example geometry of lines and circles.
:Date: 2019-12-23
.. module:: geometry_pyramidal_frustum
:platform: *nix, Windows
:synopsis: Example geometry of lines and circles.
.. moduleauthor:: Daniel Weschke <daniel.weschke@directbox.de>
"""
import math
from pylib.geometry import World, Point, Line, Circle
from pylib.geometry_plot_pylab import cad_wireframe, wireframe3d
def geometry():
w = World()
p0 = Point(0, 0, 0)
p = Point(1, 1, 1)
# add Lines to the Word
theta = math.pi/4
w.add(*[Line(p0, p.rotate_x(theta/5)) for i in range(30)])
w.add(*[Line(p0, p.rotate_x(theta/5)).translate(.1*i, 0, 0) for i in range(30)])
# add Circles to the Word
c1 = Circle()
c2 = Circle(2)
c3 = Circle(n=18).scale(3).rotate_x(math.pi/4)
w.add(c1, c2, c3)
return w
if __name__ == "__main__":
w = geometry()
print(*w)
wireframe3d(w)
cad_wireframe(w, False)

View File

@@ -0,0 +1,40 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Example geometry of a pyramidal frustum.
:Date: 2019-12-23
.. module:: geometry_pyramidal_frustum
:platform: *nix, Windows
:synopsis: Example geometry of a pyramidal frustum.
.. moduleauthor:: Daniel Weschke <daniel.weschke@directbox.de>
"""
from pylib.geometry import World, Point, Polygon, Hexahedron
from pylib.geometry_plot_pylab import cad_wireframe
def geometry():
w = World()
p0 = Point()
p1 = Point(1.00, 0, 0)
p2 = Point(1.00, 1, 0)
p3 = Point(0.00, 1, 0)
p4 = Point(0.25, 0.25, 1)
p5 = Point(0.75, 0.25, 1)
p6 = Point(0.75, 0.75, 1)
p7 = Point(0.25, 0.75, 1)
pg0 = Polygon(p0, p1, p2, p3)
pg1 = Polygon(p4, p5, p6, p7)
pg2 = Polygon(p0, p1, p5, p4)
pg3 = Polygon(p2, p3, p7, p6)
w.add(pg0, pg1, pg2, pg3)
h = Hexahedron()
w.add(h)
return w
if __name__ == "__main__":
w = geometry()
print(*w)
print(w.wireframes_xyz())
cad_wireframe(w)

View File

@@ -12,6 +12,36 @@
""" """
import math import math
import pickle import pickle
import collections
def issequence(obj):
"""
True for tuple, list, str
False for int, dict, set
:Example:
>>> issequence(())
True
>>> issequence((3, ))
True
>>> issequence([])
True
>>> issequence([1])
True
>>> issequence([1, 2])
True
>>> issequence('')
True
>>> issequence((3))
False
>>> issequence({})
False
>>> issequence(set())
False
"""
return isinstance(obj, collections.abc.Sequence)
def read(file_name, x_column, y_column, default=None, verbose=False): def read(file_name, x_column, y_column, default=None, verbose=False):
"""Read ascii data file. """Read ascii data file.

View File

@@ -200,7 +200,7 @@ def hypotrochoid(R, r, d):
>>> x, y, theta_end = hyotrochoid(20, 6, 6) >>> x, y, theta_end = hyotrochoid(20, 6, 6)
.. seealso:: .. seealso::
:meth:`mathematics.lcm` :meth:`pylib.mathematics.lcm`
""" """
x = lambda theta: (R-r)*math.cos(theta) + d*math.cos((R-r)/r * theta) x = lambda theta: (R-r)*math.cos(theta) + d*math.cos((R-r)/r * theta)
y = lambda theta: (R-r)*math.sin(theta) - d*math.sin((R-r)/r * theta) y = lambda theta: (R-r)*math.sin(theta) - d*math.sin((R-r)/r * theta)
@@ -377,7 +377,7 @@ def to_str(f, x=None, x_0=0, x_1=1, t=None, h=10, w=80, density=1, char_set="lin
.. seealso:: .. seealso::
:meth:`pylib.function.transformation` :meth:`transformation`
""" """
# scale function to used chars and dots/pixel in y direction (4 for braille characters): from [0, 1] to [0, chars*4-1] # scale function to used chars and dots/pixel in y direction (4 for braille characters): from [0, 1] to [0, chars*4-1]
# 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] # 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]
@@ -402,7 +402,7 @@ def to_str(f, x=None, x_0=0, x_1=1, t=None, h=10, w=80, density=1, char_set="lin
#frame = canvas.frame(min_x=a*pixel_per_char, min_y=1, max_x=b*pixel_per_char, max_y=21) #frame = canvas.frame(min_x=a*pixel_per_char, min_y=1, max_x=b*pixel_per_char, max_y=21)
frame = canvas.frame() frame = canvas.frame()
elif char_set in ["histogram", "block"]: elif char_set in ["histogram", "block"]:
import drawblock from .drawblock import histogram
pixels_horizontal = 1 pixels_horizontal = 1
pixels_vertical = 8 pixels_vertical = 8
@@ -412,6 +412,6 @@ def to_str(f, x=None, x_0=0, x_1=1, t=None, h=10, w=80, density=1, char_set="lin
density = min(density, 1) # density max 1! density = min(density, 1) # density max 1!
x = seq(x_0*window_factor, x_1*window_factor, 1/pixels_horizontal/density) x = seq(x_0*window_factor, x_1*window_factor, 1/pixels_horizontal/density)
f = [f(xi, t) for xi in x] f = [f(xi, t) for xi in x]
frame = drawblock.histogram(f, x) frame = histogram(f, x)
return frame return frame

View File

@@ -1,6 +1,6 @@
#!/usr/bin/env python #!/usr/bin/env python
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
"""2D geometry objects. """Geometry objects.
:Date: 2019-12-21 :Date: 2019-12-21
@@ -9,26 +9,37 @@
:synopsis: Geometry objects. :synopsis: Geometry objects.
.. moduleauthor:: Daniel Weschke <daniel.weschke@directbox.de> .. moduleauthor:: Daniel Weschke <daniel.weschke@directbox.de>
Affine transforms
-----------------
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.
""" """
import math import math
import copy import copy
from pylib.mathematics import vector, matrix from .mathematics import vector, matrix
class Direction(vector): class Direction(vector):
"""Direction in local coordinate system""" """Direction in local coordinate system"""
def __init__(self, x=1, y=0, z=0): def __init__(self, x=1, y=0, z=0):
super().__init__([x, y, z, 0]) super().__init__([x, y, z, 0])
def __str__(self):
return str(self.xyz())
class Point(vector): class Point(vector):
"""Point in local coordinate system""" """Point in local coordinate system"""
def __init__(self, x=0, y=0, z=0): def __init__(self, x=0, y=0, z=0):
super().__init__([x, y, z, 1]) super().__init__([x, y, z, 1])
def __str__(self): # TODO
return str(self.xyz()) def projection(self):
"""Orthographic projection to the xy-plane
"""
# P = matrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]])
#return (P*self)[:2]
return self[:2]
class CS(matrix): class CS(matrix):
"""Coordinate system """Coordinate system
@@ -36,9 +47,6 @@ class CS(matrix):
def __init__(self, x=[1, 0, 0], y=[0, 1, 0], z=[0, 0, 1]): def __init__(self, x=[1, 0, 0], y=[0, 1, 0], z=[0, 0, 1]):
super().__init__([[*x, 0], [*y, 0], [*z, 0], [0, 0, 0, 1]]) super().__init__([[*x, 0], [*y, 0], [*z, 0], [0, 0, 0, 1]])
def __str__(self):
return '[' + ', '.join([str(i) for i in self.get_coordinates()]) + ']'
@staticmethod @staticmethod
def x90(): def x90():
return CS((1, 0, 0), (0, 0, -1), (0, 1, 0)) return CS((1, 0, 0), (0, 0, -1), (0, 1, 0))
@@ -59,7 +67,133 @@ class CS(matrix):
"""Get coordinates in 3d space""" """Get coordinates in 3d space"""
return self[:3,:3] return self[:3,:3]
class World(): # TODO: Wireframe(list) or Wireframe(matrix) ?
# list of Points
class Wireframe:
"""Open and closed wireframe object in local coordinate system
This class create its own points (copy).
"""
def __init__(self, *points, closed=False):
self._points = [copy.copy(i) for i in points]
self.closed = closed
def __str__(self):
return '[' + ', '.join([str(point) for point in self._points]) + ']'
def __iter__(self):
"""Returns the Iterator object"""
return iter(self.points())
def points(self):
"""Get coordinates in 3d space"""
result = [i for i in self._points]
return result if not self.closed else result + [result[0]]
def xy(self):
"""Get coordinates in 3d space"""
return list(zip(*[i[:2] for i in self.points()]))
def xyz(self):
"""Get coordinates in 3d space"""
return list(zip(*[i[:3] for i in self.points()]))
def rotate_x(self, theta):
self._points = [point.rotate_x(theta) for point in self._points]
return self
def rotate_y(self, theta):
self._points = [point.rotate_y(theta) for point in self._points]
return self
def rotate_z(self, theta):
self._points = [point.rotate_z(theta) for point in self._points]
return self
def translate(self, tx, ty, tz):
self._points = [point.translate(tx, ty, tz) for
point in self._points]
return self
def scale(self, sx, sy=None, sz=None):
# if not sy is not suitable because 0 is also false
if sy is None:
sy = sx
sz = sx
self._points = [point.scale(sx, sy, sz) for
point in self._points]
return self
def ch_cs(self, cs):
self._points = [point.ch_cs(cs) for point in self._points]
return self
class Line(Wireframe):
"""Line a open wireframe object in local coordinate system"""
def __init__(self, point1=Point(-1, 0, 0), point2=Point(1, 0, 0)):
super().__init__(point1, point2)
class Polygon(Wireframe):
"""Polygon as closed wireframe object in local coordinate system"""
def __init__(self, *points):
super().__init__(*points, closed=True)
class Circle(Polygon):
"""Circle a closed wireframe object in local coordinate system"""
def __init__(self, radius=1, n=10):
points = []
for i in range(n):
x = radius * math.cos(i*2*math.pi/n)
y = radius * math.sin(i*2*math.pi/n)
points.append(Point(x, y, 0))
super().__init__(*points)
class Solid:
"""Solid object in local coordinate system
This class lists Wireframe objects.
The Wireframe class create its own points (copy).
"""
def __init__(self, *wireframes):
self._wireframes = wireframes
def wireframes(self):
return self._wireframes
def translate(self, tx, ty, tz):
self._wireframes = [wireframe.translate(tx, ty, tz) for
wireframe in self._wireframes]
return self
def scale(self, sx, sy=None, sz=None):
# if not sy is not suitable because 0 is also false
if sy is None:
sy = sx
sz = sx
self._wireframes = [wireframe.scale(sx, sy, sz) for
wireframe in self._wireframes]
return self
def ch_cs(self, cs):
self._wireframes = [wireframe.ch_cs(cs) for
wireframe in self._wireframes]
return self
class Hexahedron(Solid):
"""Line a open wireframe object in local coordinate system"""
def __init__(self,
point1=Point(-1, -1, -1), point2=Point(1, -1, -1),
point3=Point(1, 1, -1), point4=Point(-1, 1, -1),
point5=Point(-1, -1, 1), point6=Point(1, -1, 1),
point7=Point(1, 1, 1), point8=Point(-1, 1, 1)):
super().__init__(
Polygon(point1, point2, point3, point4),
Polygon(point5, point6, point7, point8),
Polygon(point1, point2, point6, point5),
Polygon(point3, point4, point8, point7)
)
class World:
"""World-space with world-space coordinates """World-space with world-space coordinates
""" """
def __init__(self): def __init__(self):
@@ -72,7 +206,8 @@ class World():
return iter(self.objects()) return iter(self.objects())
def _store_init(self): def _store_init(self):
"""Initialize or reset calculated values, because a new object was added. """Initialize or reset calculated values, because a new object
was added.
""" """
self._bb = None self._bb = None
self._sd = None self._sd = None
@@ -106,6 +241,33 @@ class World():
self._cs.scale(sx, sy, sz) self._cs.scale(sx, sy, sz)
return self return self
def wireframes(self):
result = []
for i in self.objects():
if isinstance(i, Wireframe):
result.append(i.points())
elif isinstance(i, Solid):
[result.append(j.points()) for j in i.wireframes()]
return result
def wireframes_xy(self):
result = []
for i in self.objects():
if isinstance(i, Wireframe):
result.append(i.xy())
elif isinstance(i, Solid):
[result.append(j.xy()) for j in i.wireframes()]
return result
def wireframes_xyz(self):
result = []
for i in self.objects():
if isinstance(i, Wireframe):
result.append(i.xyz())
elif isinstance(i, Solid):
[result.append(j.xyz()) for j in i.wireframes()]
return result
def objects(self): def objects(self):
return [copy.deepcopy(i).ch_cs(self._cs) for i in self._objects] return [copy.deepcopy(i).ch_cs(self._cs) for i in self._objects]
@@ -124,10 +286,9 @@ class World():
xmax = -math.inf xmax = -math.inf
ymax = -math.inf ymax = -math.inf
zmax = -math.inf zmax = -math.inf
for i in self._objects: for i in self.wireframes_xyz():
xi, yi, zi = map(min, i.xyz()) xi, yi, zi = map(min, i)
xs, ys, zs = map(max, i.xyz()) xs, ys, zs = map(max, i)
#xmax = x if x > xmax: xmax = x
xmin = xi if xi < xmin else xmin xmin = xi if xi < xmin else xmin
ymin = yi if yi < ymin else ymin ymin = yi if yi < ymin else ymin
zmin = zi if zi < zmin else zmin zmin = zi if zi < zmin else zmin
@@ -148,78 +309,8 @@ class World():
def center(self): def center(self):
bb = self.bounding_box() bb = self.bounding_box()
self.ch_cs([[1,0,0,-(bb[1]-bb[0])/2],[0,1,0,-(bb[3]-bb[2])/2],[0,0,1,-(bb[5]-bb[4])/2],[0,0,0,1]]) self.ch_cs([[1, 0, 0, -(bb[0]+bb[1])/2],
[0, 1, 0, -(bb[2]+bb[3])/2],
[0, 0, 1, -(bb[4]+bb[5])/2],
[0, 0, 0, 1]])
return self return self
# TODO: Wireframe(list) or Wireframe(matrix) ?
# list of Points
class Wireframe():
"""Open and closed wireframe object in local coordinate system
This class create its own points (copy).
"""
def __init__(self, *points, closed=False):
self._points = [copy.copy(i) for i in points]
self.closed = closed
def __str__(self):
return '[' + ', '.join([str(point) for point in self._points]) + ']'
def __iter__(self):
"""Returns the Iterator object"""
return iter(self.points())
def points(self):
"""Get coordinates in 3d space"""
result = [i for i in self._points]
return result if not self.closed else result + [result[0]]
def xyz(self):
return zip(*[i.xyz() for i in self.points()])
def rotate_x(self, theta):
self._points = [point.rotate_x(theta) for point in self._points]
return self
def rotate_y(self, theta):
self._points = [point.rotate_y(theta) for point in self._points]
return self
def rotate_z(self, theta):
self._points = [point.rotate_z(theta) for point in self._points]
return self
def translate(self, tx, ty, tz):
self._points = [point.translate(tx, ty, tz) for point in self._points]
return self
def scale(self, sx, sy=None, sz=None):
if not sy:
sy = sx
sz = sx
self._points = [point.scale(sx, sy, sz) for point in self._points]
return self
def ch_cs(self, cs):
self._points = [point.ch_cs(cs) for point in self._points]
return self
class Line(Wireframe):
"""Line a open wireframe object in local coordinate system"""
def __init__(self, point1=Point(-1, 0, 0), point2=Point(1, 0, 0)):
super().__init__(point1, point2)
class Polygon(Wireframe):
"""Polygon as closed wireframe object in local coordinate system"""
def __init__(self, *points):
super().__init__(*points, closed=True)
class Circle(Polygon):
"""Circle a closed wireframe object in local coordinate system"""
def __init__(self, radius=1, n=10):
points = []
for i in range(n):
x = radius * math.sin(i*2*math.pi/n)
y = radius * math.cos(i*2*math.pi/n)
points.append(Point(x, y, 0))
super().__init__(*points)

View File

@@ -11,7 +11,7 @@
.. moduleauthor:: Daniel Weschke <daniel.weschke@directbox.de> .. moduleauthor:: Daniel Weschke <daniel.weschke@directbox.de>
""" """
import pylab import pylab
from geometry2d import ( from .geometry2d import (
distance, angle, line, interpolate_hermite, rotate_xy, translate_xy distance, angle, line, interpolate_hermite, rotate_xy, translate_xy
) )

17
pylib/geometry_plot.py Normal file
View File

@@ -0,0 +1,17 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Geometry plotter using matplotlib (pylab).
:Date: 2019-12-23
.. module:: geometry_plot
:platform: *nix, Windows
:synopsis: Geometry plotting.
.. moduleauthor:: Daniel Weschke <daniel.weschke@directbox.de>
"""
backend = 'pylab'
if backend == 'pylab':
from .geometry_plot_pylab import cad_wireframe, wireframe3d

View File

@@ -0,0 +1,243 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Geometry plotter using pylab (matplotlib).
:Date: 2019-12-23
.. module:: geometry_plot_pylab
:platform: *nix, Windows
:synopsis: Geometry plotting (pylab).
.. moduleauthor:: Daniel Weschke <daniel.weschke@directbox.de>
"""
import math
# This import registers the 3D projection, but is otherwise unused.
from mpl_toolkits.mplot3d import Axes3D
assert Axes3D # silence pyflakes
import pylab
pylab.style.use('dark_background')
pylab.rcParams['text.color'] = 'grey' # lightgrey
pylab.rcParams['axes.edgecolor'] = 'grey' # lightgrey
pylab.rcParams['grid.color'] = 'grey' # lightgrey
pylab.rcParams['xtick.color'] = 'grey' # lightgrey
pylab.rcParams['ytick.color'] = 'grey' # lightgrey
pylab.rcParams['axes3d.grid'] = False
# default for dark_background cycler(
# 'color', ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd',
# '#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf'])
pylab.rcParams['axes.prop_cycle'] = pylab.cycler(
"color", ['#3498DB', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd',
'#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf'])
# remove f for fullscreen toggle, default ['f', 'ctrl+f']
pylab.rcParams['keymap.fullscreen'] = ['ctrl+f']
# remove L for log/lin toggle, default ['k', 'L']
pylab.rcParams['keymap.xscale'] = ['k']
# remove l for log/lin toggle, default ['l']
pylab.rcParams['keymap.yscale'] = []
from pylab import mean
from .geometry import CS
# type of ax
# - matplotlib.axes._subplots.Axes3DSubplot)
# - matplotlib.axes.Axes
# - pylab.Axes
def set_aspect_equal(ax):
'''Make axes of 3D plot have equal scale so that spheres appear as
spheres, cubes as cubes, etc.. This is one possible solution to
Matplotlib's ax.set_aspect('equal') and ax.axis('equal') not
working for 3D.
:param ax: a pylab axis
:type ax: pylab.Axes
Source: https://stackoverflow.com/a/35126679
'''
if ax.name == '3d':
xlim = ax.get_xlim3d()
ylim = ax.get_ylim3d()
zlim = ax.get_zlim3d()
xmean = mean(xlim)
ymean = mean(ylim)
zmean = mean(zlim)
plot_radius = max([abs(lim - mean_)
for lims, mean_ in ((xlim, xmean),
(ylim, ymean),
(zlim, zmean))
for lim in lims])
ax.set_xlim3d([xmean - plot_radius, xmean + plot_radius])
ax.set_ylim3d([ymean - plot_radius, ymean + plot_radius])
ax.set_zlim3d([zmean - plot_radius, zmean + plot_radius])
else:
ax.axis('equal')
def plot_post(ax):
if isinstance(ax, pylab.Axes):
ax = [ax]
for axi in ax:
if axi.name == '3d':
#axi.w_xaxis.set_pane_color((0, 0, 0, 0))
#axi.w_yaxis.set_pane_color((0, 0, 0, 0))
#axi.w_zaxis.set_pane_color((0, 0, 0, 0))
axi.w_xaxis.pane.fill = False
axi.w_yaxis.pane.fill = False
axi.w_zaxis.pane.fill = False
set_aspect_equal(axi)
def wireframe3d(world):
fig = pylab.figure()
ax = fig.add_subplot(111, projection='3d')
[ax.plot(*i, 'C0') for i in world.wireframes_xyz()]
plot_post(ax)
def cad_wireframe(world, centering=True):
"""
Graphical projections
* Parallel projections
* Orthographic
* Multiview
* \* First-angle
* Third-angle
* Plan Elevation
* Axonometric
* \* Isometric
* Dimetric
* Trimetri
* Oblique
* Carbinet
* Cavalier
* Military
* Top-down
* Perspective projections
* 1-point
* 2-point
* 3-point
* Curvilinear
"""
if centering:
world.center()
fig = pylab.figure('geometry-cad')
fig.clf()
ax = fig.add_subplot(111)
pylab.axis('off')
pylab.subplots_adjust(left=0, right=1, top=1, bottom=0)
lps = [ax.plot(*i, 'C0')[0] for i in world.wireframes_xy()]
plot_post(ax)
def press(event, world, lps):
#print('key pressed:', event.key)
#sys.stdout.flush()
if event.key in [
'left', 'right', 'up', 'down',
'f', 't', 'b', 'l', 'r', 'i', 'd',
'shift+left', 'shift+right', 'shift+up', 'shift+down',
'ctrl+up', 'ctrl+down', 'ctrl+left', 'ctrl+right']:
d = world.space_diagonal()
if event.key == 'left':
world.rotate_y(-math.pi/180*10)
elif event.key == 'right':
world.rotate_y(+math.pi/180*10)
elif event.key == 'up':
world.rotate_x(-math.pi/180*10)
elif event.key == 'down':
world.rotate_x(+math.pi/180*10)
elif event.key == 'f':
world.cs(CS())
if centering:
world.center()
elif event.key == 't':
world.cs(CS.x90())
if centering:
world.center()
elif event.key == 'b':
world.cs(CS.xm90())
if centering:
world.center()
elif event.key == 'l':
world.cs(CS.y90())
if centering:
world.center()
elif event.key == 'r':
world.cs(CS.ym90())
if centering:
world.center()
elif event.key == 'i':
#theta_y = -math.pi/2/3
#theta_x = math.pi/2/3
theta_y = -math.pi/2/2
theta_x = math.asin(math.tan(math.pi/2/3))
world.cs(CS().rotate_y(theta_y).rotate_x(theta_x))
if centering:
world.center()
elif event.key == 'd':
#theta_x = math.asin(math.tan(math.pi/2/3/2))
theta_y = -math.pi/2/2
theta_x = math.atan(1/2)
world.cs(CS().rotate_y(theta_y).rotate_x(theta_x))
if centering:
world.center()
elif event.key == 'shift+left':
world.translate(-0.1*d, 0, 0)
elif event.key == 'shift+right':
world.translate(0.1*d, 0, 0)
elif event.key == 'shift+up':
world.translate(0, 0.1*d, 0)
elif event.key == 'shift+down':
world.translate(0, -0.1*d, 0)
elif event.key == 'ctrl+left':
world.rotate_z(+math.pi/180*10)
elif event.key == 'ctrl+right':
world.rotate_z(-math.pi/180*10)
elif event.key == 'ctrl+up':
world.scale(1.1)
elif event.key == 'ctrl+down':
world.scale(0.9)
for i, j in zip(lps, world.wireframes_xy()):
i.set_data(j)
fig.canvas.draw()
def onresize(event, w):
r = 2 * w.space_diagonal()/2
pylab.xlim((-r, r))
pylab.ylim((-r, r))
fig.canvas.mpl_connect('key_press_event',
lambda event: press(event, world, lps))
fig.canvas.mpl_connect('resize_event',
lambda event: onresize(event, world))
pylab.text(
0+.01, 1-.015,
'rotate: left, right, up, down, ctrl+left, ctrl+right\n' +
'pan: shift+left, shift+right, shift+up, shift+down\n' +
'zoom: ctrl+up, ctrl+down\n' +
'view: f (front), l (left), r (right), t (top), b (bottom)\n' +
' i (isometric), d (dimetric)',
horizontalalignment='left',
verticalalignment='top',
transform=fig.transFigure,
bbox=dict(facecolor='black', alpha=0.5),
family='monospace'
)
pylab.show()

View File

@@ -21,64 +21,63 @@ def lcm(a, b):
class vector(list): class vector(list):
"""Use/create vector like lists """Use/create vector like lists
* size -> len(a) * size, length of a vector use len(a)
* abs -> abs(a) * absolute, magntude, norm of a vector use abs(a), see
* dot -> a * b :meth:`__abs__`
* outer -> a @ b * dot product use a * b, see :meth:`__mul__` and :meth:`__rmul__`
* outer product use a @ b, see :meth:`__matmul__`
use super constructor :__iter__:
use super __iter__ >>> [i*2 for i in vector([1, 2, 3])]
[2, 4, 6]
use super __setitem__ :__setitem__:
>>> v = vector([1,2,3,4,5]) >>> v = vector([1, 2, 3, 4, 5])
>>> v[3:5] = [1,2] >>> v[3:5] = [1, 2]
>>> print(v) >>> print(v)
[1, 2, 3, 1, 2] [1, 2, 3, 1, 2]
>>> isinstance(v, vector) >>> isinstance(v, vector)
True True
use super __lt__(a, b) :__eq__(a, b):
use super __le__(a, b) >>> vector([1, 2, 3, 1, 2]) == vector([1, 2, 3, 1, 2])
True
>>> vector([1, 2, 3, 1, 2]) == vector([1, 2, 3, 2, 1])
False
use super __eq__(a, b) :__ne__(a, b):
>>> v = vector([1,2,3,1,2]) >>> vector([1, 2, 3, 1, 2]) != vector([1, 2, 3, 1, 2])
>>> v2 = vector([1,2,3,1,2]) False
>>> v == v2 >>> vector([1, 2, 3, 1, 2]) != vector([1, 2, 3, 2, 1])
True True
use super __ne__(a, b) :__contains__:
use super __ge__(a, b) >>> 2 in vector([1, 2, 3])
use super __gt__(a, b)
use super __contains__
>>> 2 in vector([1,2,3])
True True
__isub__ :__isub__:
>>> v = vector([1,2,3]) >>> v = vector([1, 2, 3])
>>> v -= vector([3,3,3]) >>> v -= vector([3, 3, 3])
>>> print(v) >>> print(v)
[-2, -1, 0] [-2, -1, 0]
__imul__ :__imul__:
>>> v = vector([1,2,3]) >>> v = vector([1, 2, 3])
>>> v *= vector([3,3,3]) >>> v *= vector([3, 3, 3])
>>> print(v) >>> print(v)
18 18
__imatmul__ :__imatmul__:
>>> m = vector([1,2,3]) >>> m = vector([1, 2, 3])
>>> m *= vector([3,3,3]) >>> m *= vector([3, 3, 3])
>>> print(v) >>> print(v)
[[3, 3, 3], [6, 6, 6], [9, 9, 9]] [[3, 3, 3], [6, 6, 6], [9, 9, 9]]
""" """
@@ -101,33 +100,43 @@ class vector(list):
return vector(item) if isinstance(item, list) else item return vector(item) if isinstance(item, list) else item
def __pos__(self): def __pos__(self):
"""+ a (new object) """\+ a (new object)
.. math::
\mathbf{b} = +\mathbf{a}
""" """
return vector([*self]) return vector([*self])
def __neg__(self): def __neg__(self):
"""- a (new object) """\- a (new object)
.. math::
\mathbf{b} = -\mathbf{a}
""" """
return vector([-i for i in self]) return vector([-i for i in self])
def __add__(self, other): def __add__(self, other):
"""a + b (new object) """a + b (new object)
.. math::
\mathbf{c} = \mathbf{a} + \mathbf{b}
:Example: :Example:
>>> v = vector([1,2,3]) + vector([1,2,3]) >>> v = vector([1, 2, 3]) + vector([1, 2, 3])
>>> print(v) >>> print(v)
[2, 4, 6] [2, 4, 6]
""" """
return vector([i+j for i, j in zip(self, other)]) return vector([i+j for i, j in zip(self, other)])
# overwrite because [1, 2] + [5, 8] = [1, 2, 5, 8]
def __iadd__(self, other): def __iadd__(self, other):
"""a += b (new object) """a += b (new object)
:Example: :Example:
>>> v = vector([1,2,3]) >>> v = vector([1, 2, 3])
>>> v += vector([3,3,3]) >>> v += vector([3, 3, 3])
>>> print(v) >>> print(v)
[4, 5, 6] [4, 5, 6]
""" """
@@ -136,9 +145,12 @@ class vector(list):
def __sub__(self, other): def __sub__(self, other):
"""a - b (new object) """a - b (new object)
.. math::
\mathbf{c} = \mathbf{a} - \mathbf{b}
:Example: :Example:
>>> v = vector([1,2,3]) - vector([1,2,3]) >>> v = vector([1, 2, 3]) - vector([1, 2, 3])
>>> print(v) >>> print(v)
[0, 0, 0] [0, 0, 0]
""" """
@@ -146,9 +158,7 @@ class vector(list):
def __mul__(self, other): def __mul__(self, other):
r"""Scalar multiplication, dot product (inner product) or r"""Scalar multiplication, dot product (inner product) or
vector-matrix multiplication. vector-matrix multiplication. (new object)
a * b (new object)
:type other: scalar, vector (or 1d list), matrix (or 2d list) :type other: scalar, vector (or 1d list), matrix (or 2d list)
@@ -158,18 +168,18 @@ class vector(list):
\mathbf{c} &= \mathbf{a} \cdot \mathbf{B} \mathbf{c} &= \mathbf{a} \cdot \mathbf{B}
.. note:: .. note::
No size checking will be conducted, therefore no exceptions for No size checking will be conducted, therefore no exceptions
wrong usage (result will be nonsense). for wrong usage (result will be nonsense).
:Example: :Example:
>>> v = vector([1,2,3,4,5])*3 >>> v = vector([1, 2, 3, 4, 5]) * 3
>>> print(v) >>> print(v)
[3, 6, 9, 12, 15] [3, 6, 9, 12, 15]
>>> v = vector([1,2,3,4,5])*3. >>> v = vector([1, 2, 3, 4, 5]) * 3.
>>> print(v) >>> print(v)
[3.0, 6.0, 9.0, 12.0, 15.0] [3.0, 6.0, 9.0, 12.0, 15.0]
>>> s = vector([1,2,3])*vector([1,2,3]) >>> s = vector([1, 2, 3]) * vector([1, 2, 3])
>>> print(s) >>> print(s)
14 14
@@ -180,15 +190,14 @@ class vector(list):
return sum([i*j for i, j in zip(self, other)]) return sum([i*j for i, j in zip(self, other)])
except: except:
try: # vector * matrix try: # vector * matrix
return vector([sum(c*d for c, d in zip(self, b_col)) for b_col in zip(*other)]) return vector([sum(c*d for c, d in zip(self, b_col)) for
b_col in zip(*other)])
except: # vector * scalar except: # vector * scalar
return vector([i*other for i in self]) return vector([i*other for i in self])
def __rmul__(self, other): def __rmul__(self, other):
r"""Scalar multiplication, dot product (inner product) or r"""Scalar multiplication, dot product (inner product) or
matrix-vector multiplication. matrix-vector multiplication. (new object)
a * b (new object)
:type other: scalar (or 1d list and 2d list) :type other: scalar (or 1d list and 2d list)
@@ -198,24 +207,24 @@ class vector(list):
\mathbf{c} &= \mathbf{A} \cdot \mathbf{b} \mathbf{c} &= \mathbf{A} \cdot \mathbf{b}
.. note:: .. note::
No size checking will be conducted, therefore no exceptions for No size checking will be conducted, therefore no exceptions
wrong usage (result will be nonsense). for wrong usage (result will be nonsense).
:Example: :Example:
>>> v = 3*vector([1,2,3,4,5]) >>> v = 3 * vector([1, 2, 3, 4, 5])
>>> print(v) >>> print(v)
[3, 6, 9, 12, 15] [3, 6, 9, 12, 15]
>>> v = 3.*vector([1,2,3,4,5]) >>> v = 3. * vector([1, 2, 3, 4, 5])
>>> print(v) >>> print(v)
[3.0, 6.0, 9.0, 12.0, 15.0] [3.0, 6.0, 9.0, 12.0, 15.0]
.. seealso:: .. seealso::
:meth:`__mul__` :meth:`__mul__` and :meth:`matrix.__mul__` for matrix * vector
:meth:`matrix.__mul__` for matrix * vector
""" """
try: # 2d list * vector (matrix * vector see matrix.__mul__) try: # 2d list * vector (matrix * vector see matrix.__mul__)
return vector([sum(c*d for c, d in zip(a_row, self)) for a_row in other]) return vector([sum(c*d for c, d in zip(a_row, self)) for
a_row in other])
except: # scalar * vector except: # scalar * vector
return self*other return self*other
@@ -223,7 +232,7 @@ class vector(list):
r"""Outer product a @ b (new object) r"""Outer product a @ b (new object)
.. math:: .. math::
\vec{a} \otimes \vec{b} \mathbf{c} = \mathbf{a} \otimes \mathbf{b}
= =
\begin{pmatrix} \begin{pmatrix}
a_{1}\\ a_{1}\\
@@ -246,7 +255,7 @@ class vector(list):
:Example: :Example:
>>> m = vector([1,2,3]) @ vector([1,2,4]) >>> m = vector([1, 2, 3]) @ vector([1, 2, 4])
>>> print(m) >>> print(m)
[[1, 2, 4], [2, 4, 8], [3, 6, 12]] [[1, 2, 4], [2, 4, 8], [3, 6, 12]]
""" """
@@ -259,17 +268,80 @@ class vector(list):
r"""Magnitude / norm of a vector r"""Magnitude / norm of a vector
.. math:: .. math::
b = \sqrt{\sum a_i^2} b = |\mathbf{a}| = \sqrt{\sum a_i^2} =
\sqrt{\mathbf{a} \cdot \mathbf{a}}
:Example: :Example:
>>> norm([3, 4]) >>> v = vector([3, 4])
5 >>> abs(v)
>>> norm(vector([3, 4])) 5.0
5
""" """
return math.sqrt(self * self) return math.sqrt(self * self)
def __lt__(self, other):
"""Test if this object is lower (smaller) than the other object.
.. math::
|\mathbf{a}| \lt |\mathbf{b}|
:Example:
>>> vector([3, 2, 1]) < vector([1, 2, 3])
False
>>> vector([3, 2, 1]) < vector([1, 2, 4])
True
"""
return abs(self) < abs(other)
def __le__(self, other):
"""Test if this object is lower (smaller) than or equal the
other object.
.. math::
|\mathbf{a}| \le |\mathbf{b}|
:Example:
>>> vector([3, 2, 1]) <= vector([1, 2, 3])
True
>>> vector([3, 2, 1]) <= vector([1, 2, 2])
False
"""
return abs(self) <= abs(other)
def __gt__(self, other):
"""Test if this object is greater (larger) than the other
object.
.. math::
|\mathbf{a}| \gt |\mathbf{b}|
:Example:
>>> vector([1, 2, 3]) > vector([3, 2, 1])
False
>>> vector([1, 2, 3]) > vector([2, 2, 1])
True
"""
return abs(self) > abs(other)
def __ge__(self, other):
"""Test if this object is greater (larger) than or equal the
other object.
.. math::
|\mathbf{a}| \ge |\mathbf{b}|
:Example:
>>> vector([1, 2, 3]) >= vector([3, 2, 1])
True
>>> vector([1, 2, 3]) >= vector([4, 2, 1])
False
"""
return abs(self) >= abs(other)
def __str__(self): def __str__(self):
return str([*self]) return str([*self])
@@ -328,8 +400,8 @@ class vector(list):
@staticmethod @staticmethod
def random(shape, lmin=0.0, lmax=1.0): def random(shape, lmin=0.0, lmax=1.0):
"""Returns a random vector of length n or matrix of size m rows, n """Returns a random vector of length n or matrix of size m rows,
columns filled with random numbers. n columns filled with random numbers.
:Example: :Example:
@@ -351,10 +423,10 @@ class vector(list):
:type a: vector :type a: vector
.. math:: .. math::
\vec{e}_a = \frac{\vec{a}}{|\vec{a}|} \mathbf{\hat{a}} = \frac{\mathbf{a}}{|\mathbf{a}|}
.. seealso:: .. seealso::
:meth:`norm` for a norm (magnitude) of a vector :meth:`__abs__` for a norm (magnitude) of a vector
""" """
a_mag = abs(a) a_mag = abs(a)
return vector([i/a_mag for i in a]) return vector([i/a_mag for i in a])
@@ -415,15 +487,12 @@ class vector(list):
The direction of c can be found with the right-hand rule. The direction of c can be found with the right-hand rule.
.. math:: .. math::
\vec{c} = \vec{a} \times \vec{b} \mathbf{c} = \mathbf{a} \times \mathbf{b}
""" """
return [a[1]*b[2] - a[2]*b[1], return [a[1]*b[2] - a[2]*b[1],
a[2]*b[0] - a[0]*b[2], a[2]*b[0] - a[0]*b[2],
a[0]*b[1] - a[1]*b[0]] a[0]*b[1] - a[1]*b[0]]
def xyz(self):
return self[:3]
def rotate_x(self, theta): def rotate_x(self, theta):
r"""Rotation about the x dirction. r"""Rotation about the x dirction.
@@ -493,10 +562,10 @@ class vector(list):
uniform scaling if sx=sy=sz=s. uniform scaling if sx=sy=sz=s.
Note that scaling happens around the origin, so objects not Note that scaling happens around the origin, so objects not
centered at the origin will have their centers move. To avoid this, centered at the origin will have their centers move. To avoid
either scale the object when it's located at the origin, or this, either scale the object when it's located at the origin,
perform a translation afterwards to move the object back to where or perform a translation afterwards to move the object back to
it should be. where it should be.
.. math:: .. math::
\begin{bmatrix}x' \\ y' \\ z' \\ h'\end{bmatrix} = \begin{bmatrix}x' \\ y' \\ z' \\ h'\end{bmatrix} =
@@ -508,16 +577,17 @@ class vector(list):
\end{bmatrix} \end{bmatrix}
\begin{bmatrix}x \\ y \\ z \\ h\end{bmatrix} \begin{bmatrix}x \\ y \\ z \\ h\end{bmatrix}
""" """
if not sy: # if not sy is not suitable because 0 is also false
if sy is None:
sy = sx sy = sx
sz = sx sz = sx
self[:] = matrix.s(sx, sy, sz) * self self[:] = matrix.s(sx, sy, sz) * self
return self return self
def ch_cs(self, cs): def ch_cs(self, cs):
r"""Transform this vector from its defined coordinate system to a r"""Transform this vector from its defined coordinate system to
new coordinate system, defined by the given coordinate system (u, a new coordinate system, defined by the given coordinate system
v and w direction vectors). (u, v and w direction vectors).
.. math:: .. math::
\begin{bmatrix}x' \\ y' \\ z' \\ h'\end{bmatrix} = \begin{bmatrix}x' \\ y' \\ z' \\ h'\end{bmatrix} =
@@ -542,21 +612,23 @@ class matrix(list):
:Example: :Example:
>>> m = matrix([[1, 2, 3, 0], [4, 5, 6, 0], [7, 8, 9, 0], [0, 0, 0, 0]]) >>> m = matrix([[1, 2, 3, 0], [4, 5, 6, 0], [7, 8, 9, 0], \
[0, 0, 0, 0]])
>>> print(m[2]) >>> print(m[2])
[7, 8, 9, 0] [7, 8, 9, 0]
>>> print(m[:,1:3]) >>> print(m[:, 1:3])
[[2, 3], [5, 6], [8, 9], [0, 0]] [[2, 3], [5, 6], [8, 9], [0, 0]]
>>> print(m[0:2,1:3]) >>> print(m[0:2, 1:3])
[[2, 3], [5, 6]] [[2, 3], [5, 6]]
>>> print(m[::2,::2]) >>> print(m[::2, ::2])
[[1, 3], [7, 9]] [[1, 3], [7, 9]]
""" """
# index: slice(stop), slice(start, stop[, step]) # index: slice(stop), slice(start, stop[, step])
# for e. g. m[(1,3),:] -> index = ((1, 3), slice(None, None, None)) # for m[(1,3),:] -> index = ((1, 3), slice(None, None, None))
# use the list.__getslice__ method and convert result to vector # use the list.__getslice__ method and convert result to vector
try: # 2d slicing (tuple of sclices) try: # 2d slicing (tuple of sclices)
item = [row.__getitem__(index[1]) for row in super().__getitem__(index[0])] item = [row.__getitem__(index[1]) for
row in super().__getitem__(index[0])]
except: # 1d slicing except: # 1d slicing
item = super().__getitem__(index) item = super().__getitem__(index)
return matrix(item) if isinstance(item, list) else item return matrix(item) if isinstance(item, list) else item
@@ -568,7 +640,7 @@ class matrix(list):
Rotates the coordinate system of vectors Rotates the coordinate system of vectors
.. math:: .. math::
R_{x}(\theta) = \mathbf{R}_{x}(\theta) =
\begin{bmatrix} \begin{bmatrix}
1 & 0 & 0 & 0 \\ 1 & 0 & 0 & 0 \\
0 & \cos \theta & -\sin \theta & 0 \\ 0 & \cos \theta & -\sin \theta & 0 \\
@@ -591,7 +663,7 @@ class matrix(list):
Rotates the coordinate system of vectors Rotates the coordinate system of vectors
.. math:: .. math::
R_{y}(\theta) = \mathbf{R}_{y}(\theta) =
\begin{bmatrix} \begin{bmatrix}
\cos \theta & 0 & \sin \theta & 0 \\ \cos \theta & 0 & \sin \theta & 0 \\
0 & 1 & 0 & 0 \\ 0 & 1 & 0 & 0 \\
@@ -614,7 +686,7 @@ class matrix(list):
Rotates the coordinate system of vectors Rotates the coordinate system of vectors
.. math:: .. math::
R_{z}(\theta) = \mathbf{R}_{z}(\theta) =
\begin{bmatrix} \begin{bmatrix}
\cos \theta & -\sin \theta & 0 & 0 \\ \cos \theta & -\sin \theta & 0 & 0 \\
\sin \theta & \cos \theta & 0 & 0 \\ \sin \theta & \cos \theta & 0 & 0 \\
@@ -625,14 +697,17 @@ class matrix(list):
:Example: :Example:
.. math:: .. math::
R_{z}(\theta) \begin{bmatrix}1 \\ 0 \\ 0 \\ 1\end{bmatrix} = \mathbf{R}_{z}(\theta)
\begin{bmatrix}1 \\ 0 \\ 0 \\ 1\end{bmatrix}
&=
\begin{bmatrix} \begin{bmatrix}
\cos 90° & -\sin 90° & 0 & 0 \\ \cos 90° & -\sin 90° & 0 & 0 \\
\sin 90° & \cos 90° & 0 & 0 \\ \sin 90° & \cos 90° & 0 & 0 \\
0 & 0 & 1 & 0 \\ 0 & 0 & 1 & 0 \\
0 & 0 & 0 & 1 0 & 0 & 0 & 1
\end{bmatrix} \end{bmatrix}
\begin{bmatrix}1 \\ 0 \\ 0 \\ 1\end{bmatrix} = \begin{bmatrix}1 \\ 0 \\ 0 \\ 1\end{bmatrix} \\
&=
\begin{bmatrix} \begin{bmatrix}
0 & -1 & 0 & 0 \\ 0 & -1 & 0 & 0 \\
1 & 0 & 0 & 0 \\ 1 & 0 & 0 & 0 \\
@@ -655,7 +730,7 @@ class matrix(list):
r"""Translation matrix r"""Translation matrix
.. math:: .. math::
T = \mathbf{T} =
\begin{bmatrix} \begin{bmatrix}
1 & 0 & 0 & t_x \\ 1 & 0 & 0 & t_x \\
0 & 1 & 0 & t_y \\ 0 & 1 & 0 & t_y \\
@@ -675,13 +750,13 @@ class matrix(list):
uniform scaling if sx=sy=sz=s. uniform scaling if sx=sy=sz=s.
Note that scaling happens around the origin, so objects not Note that scaling happens around the origin, so objects not
centered at the origin will have their centers move. To avoid this, centered at the origin will have their centers move. To avoid
either scale the object when it's located at the origin, or this, either scale the object when it's located at the origin,
perform a translation afterwards to move the object back to where or perform a translation afterwards to move the object back to
it should be. where it should be.
.. math:: .. math::
S = \mathbf{S} =
\begin{bmatrix} \begin{bmatrix}
s_x & 0 & 0 & 0 \\ s_x & 0 & 0 & 0 \\
0 & s_y & 0 & 0 \\ 0 & s_y & 0 & 0 \\
@@ -689,7 +764,8 @@ class matrix(list):
0 & 0 & 0 & 1 0 & 0 & 0 & 1
\end{bmatrix} \end{bmatrix}
""" """
if not sy: # if not sy is not suitable because 0 is also false
if sy is None:
sy = sx sy = sx
sz = sx sz = sx
T = matrix([[sx, 0, 0, 0], T = matrix([[sx, 0, 0, 0],
@@ -700,9 +776,7 @@ class matrix(list):
def __mul__(self, other): def __mul__(self, other):
r"""Scalar multiplication, dot product (inner product) or r"""Scalar multiplication, dot product (inner product) or
matrix-vector multiplication. matrix-vector multiplication. (new object)
a * b (new object)
:type other: scalar, vector (or 1d list), matrix (or 2d list) :type other: scalar, vector (or 1d list), matrix (or 2d list)
@@ -712,21 +786,25 @@ class matrix(list):
\mathbf{C} &= \mathbf{A} \cdot \mathbf{B} \mathbf{C} &= \mathbf{A} \cdot \mathbf{B}
.. note:: .. note::
No size checking will be conducted, therefore no exceptions for No size checking will be conducted, therefore no exceptions
wrong usage (result will be nonsense). for wrong usage (result will be nonsense).
:Example: :Example:
>>> m = matrix([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [0, 0, 0, 1]]) * 5 >>> m = matrix([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], \
[0, 0, 0, 1]]) * 5
>>> print(m) >>> print(m)
[[5, 10, 15, 20], [25, 30, 35, 40], [45, 50, 55, 60], [0, 0, 0, 5]] [[5, 10, 15, 20], [25, 30, 35, 40], [45, 50, 55, 60], [0, 0, 0, 5]]
>>> m = matrix([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [0, 0, 0, 1]]) * 5. >>> m = matrix([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], \
[0, 0, 0, 1]]) * 5.
>>> print(m) >>> print(m)
[[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]] [[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]]
>>> v = matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) * vector([12, 12, 13]) >>> v = matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) * \
vector([12, 12, 13])
>>> print(v) >>> print(v)
[75, 186, 297] [75, 186, 297]
>>> m = matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) * matrix([[12, 12, 13], [14, 15, 16], [17, 18, 19]]) >>> m = matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) * \
matrix([[12, 12, 13], [14, 15, 16], [17, 18, 19]])
>>> print(m) >>> print(m)
[[91, 96, 102], [220, 231, 246], [349, 366, 390]] [[91, 96, 102], [220, 231, 246], [349, 366, 390]]
@@ -734,18 +812,18 @@ class matrix(list):
:meth:`__rmul__` :meth:`__rmul__`
""" """
try: # matrix * matrix try: # matrix * matrix
return matrix([[sum(c*d for c, d in zip(a_row, b_col)) for b_col in zip(*other)] for a_row in self]) return matrix([[sum(c*d for c, d in zip(a_row, b_col)) for
b_col in zip(*other)] for a_row in self])
except: except:
try: # matrix * vector try: # matrix * vector
return vector([sum(c*d for c, d in zip(a_row, other)) for a_row in self]) return vector([sum(c*d for c, d in zip(a_row, other)) for
a_row in self])
except: # matrix * scalar except: # matrix * scalar
return matrix([[a*other for a in a_row] for a_row in self]) return matrix([[a*other for a in a_row] for a_row in self])
def __rmul__(self, other): def __rmul__(self, other):
r"""Scalar multiplication, dot product (inner product) or r"""Scalar multiplication, dot product (inner product) or
vector-matrix multiplication. vector-matrix multiplication. (new object)
a * b (new object)
:type other: scalar (or 1d list and 2d list) :type other: scalar (or 1d list and 2d list)
@@ -755,27 +833,30 @@ class matrix(list):
\mathbf{C} &= \mathbf{A} \cdot \mathbf{B} \mathbf{C} &= \mathbf{A} \cdot \mathbf{B}
.. note:: .. note::
No size checking will be conducted, therefore no exceptions for No size checking will be conducted, therefore no exceptions
wrong usage (result will be nonsense). for wrong usage (result will be nonsense).
:Example: :Example:
>>> m = 5 * matrix([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [0, 0, 0, 1]]) * 5 >>> m = 5 * matrix([[1, 2, 3, 4], [5, 6, 7, 8], \
[9, 10, 11, 12], [0, 0, 0, 1]])
>>> print(m) >>> print(m)
[[5, 10, 15, 20], [25, 30, 35, 40], [45, 50, 55, 60], [0, 0, 0, 5]] [[5, 10, 15, 20], [25, 30, 35, 40], [45, 50, 55, 60], [0, 0, 0, 5]]
>>> m = 5. * matrix([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [0, 0, 0, 1]]) >>> m = 5. * matrix([[1, 2, 3, 4], [5, 6, 7, 8], \
[9, 10, 11, 12], [0, 0, 0, 1]])
>>> print(m) >>> print(m)
[[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]] [[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]]
.. seealso:: .. seealso::
:meth:`__mul__` :meth:`__mul__` and :meth:`vector.__mul__` for vector * matrix
:meth:`vector.__mul__` for vector * matrix
""" """
try: # 2d list * matrix (matrix * matrix see matrix.__mul__) try: # 2d list * matrix (matrix * matrix see matrix.__mul__)
return matrix([[sum(c*d for c, d in zip(a_row, b_col)) for b_col in zip(*self)] for a_row in other]) return matrix([[sum(c*d for c, d in zip(a_row, b_col)) for
b_col in zip(*self)] for a_row in other])
except: except:
try: # 1d list * matrix (vector * matrix see vector.__mul__) try: # 1d list * matrix (vector * matrix see vector.__mul__)
return vector([sum(c*d for c, d in zip(other, b_col)) for b_col in zip(*self)]) return vector([sum(c*d for c, d in zip(other, b_col)) for
b_col in zip(*self)])
except: # scalar * vector except: # scalar * vector
return self*other return self*other
@@ -894,10 +975,10 @@ class matrix(list):
uniform scaling if sx=sy=sz=s. uniform scaling if sx=sy=sz=s.
Note that scaling happens around the origin, so objects not Note that scaling happens around the origin, so objects not
centered at the origin will have their centers move. To avoid this, centered at the origin will have their centers move. To avoid
either scale the object when it's located at the origin, or this, either scale the object when it's located at the origin,
perform a translation afterwards to move the object back to where or perform a translation afterwards to move the object back to
it should be. where it should be.
.. math:: .. math::
\begin{bmatrix} \begin{bmatrix}
@@ -919,7 +1000,8 @@ class matrix(list):
0 & 0 & 0 & h 0 & 0 & 0 & h
\end{bmatrix} \end{bmatrix}
""" """
if not sy: # if not sy is not suitable because 0 is also false
if sy is None:
sy = sx sy = sx
sz = sx sz = sx
self[:] = matrix.s(sx, sy, sz) * self self[:] = matrix.s(sx, sy, sz) * self

View File

@@ -12,8 +12,8 @@ import unittest
import os import os
import sys import sys
sys.path.insert(0, os.path.abspath('../pylib')) sys.path.insert(0, os.path.abspath('..'))
from data import read, unique_ending, get_id, seq from pylib.data import read, unique_ending, get_id, seq
class TestData(unittest.TestCase): class TestData(unittest.TestCase):

View File

@@ -13,9 +13,9 @@ import unittest
import os import os
import sys import sys
from pylab import array, argmax, subplot, plot, title, xlim, show, gradient, linspace from pylab import array, argmax, subplot, plot, title, xlim, show, gradient, linspace
sys.path.insert(0, os.path.abspath('../pylib')) sys.path.insert(0, os.path.abspath('..'))
from data import data_read from pylib.data import read
from numerical.fit import gauss_fit from pylib.numerical.fit import gauss_fit
class TestFit(unittest.TestCase): class TestFit(unittest.TestCase):
@@ -23,7 +23,7 @@ class TestFit(unittest.TestCase):
def test_gauss(self): def test_gauss(self):
"""test function""" """test function"""
file_name = "test_fit.dat" file_name = "test_fit.dat"
x, y = data_read(file_name, 3, 2) x, y = read(file_name, 3, 2)
subplot(2, 2, 1) subplot(2, 2, 1)
plot(x, y, '.-') plot(x, y, '.-')

View File

@@ -13,69 +13,85 @@ import unittest
import os import os
import sys import sys
import math import math
sys.path.insert(0, os.path.abspath('../pylib')) sys.path.insert(0, os.path.abspath('..'))
from mathematics import vector from pylib.geometry import Direction, Point, CS, Wireframe, Line, Polygon, Circle
from geometry import Direction, Point, CS, Wireframe, Polygon
class TestGeometry(unittest.TestCase): class TestGeometry(unittest.TestCase):
def test_Direction(self): def test_Direction(self):
p = Direction() p = Direction()
self.assertIsInstance( self.assertIsInstance(
p, list) p,
list)
self.assertEqual( self.assertEqual(
p, [1, 0, 0, 0]) p,
[1, 0, 0, 0])
self.assertEqual( self.assertEqual(
Direction(2, 3, 4), [2, 3, 4, 0]) Direction(2, 3, 4),
[2, 3, 4, 0])
self.assertIsInstance( def test_Direction_getitem(self):
p, vector)
self.assertEqual( self.assertEqual(
p, vector([1, 0, 0, 0])) Direction()[:3],
[1, 0, 0])
self.assertEqual( self.assertEqual(
Direction(2, 3, 4), vector([2, 3, 4, 0])) Direction(1, -1, 1)[:3],
[1, -1, 1])
def test_Direction_xyz(self):
self.assertEqual(
Direction().xyz(), [1, 0, 0])
self.assertEqual(
Direction(1, -1, 1).xyz(), [1, -1, 1])
def test_Point(self): def test_Point(self):
p = Point() p = Point()
self.assertIsInstance( self.assertIsInstance(
p, list) p,
list)
self.assertEqual( self.assertEqual(
p, [0, 0, 0, 1]) p,
[0, 0, 0, 1])
self.assertEqual( self.assertEqual(
Point(2, 3, 4), [2, 3, 4, 1]) Point(2, 3, 4),
[2, 3, 4, 1])
self.assertIsInstance( def test_Point_getitem(self):
p, vector)
self.assertEqual( self.assertEqual(
p, vector([0, 0, 0, 1])) Point()[:3],
[0, 0, 0])
self.assertEqual( self.assertEqual(
Point(2, 3, 4), vector([2, 3, 4, 1])) Point(1, -1, 1)[:3],
[1, -1, 1])
def test_Point_xyz(self): def test_Point_rotate(self):
[self.assertAlmostEqual(i, j) for i, j in
zip(Point(1, 1, 1).rotate_x(math.pi/4), [1, 0, 1.414213562373095, 1])]
def test_CS(self):
self.assertEqual( self.assertEqual(
Point().xyz(), [0, 0, 0]) CS(),
self.assertEqual( [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]])
Point(1, -1, 1).xyz(), [1, -1, 1])
def test_CS_rotate(self):
[self.assertAlmostEqual(k, l) for i, j in
zip(CS().rotate_y(-math.pi/2),
[[0, 0.0, -1.0, 0.0], [0, 1, 0, 0], [1.0, 0.0, 0, 0.0], [0, 0, 0, 1]])
for k, l in zip(i, j)]
def test_Wireframe(self): def test_Wireframe(self):
self.assertEqual( self.assertEqual(
Wireframe().points(), []) Wireframe().points(),
[])
# it is possible to assign other objects then Points but/and the # it is possible to assign other objects then Points but/and the
# class will not test if Points are used, this is just assumed # class will not test if Points are used, this is just assumed
self.assertEqual( self.assertEqual(
Wireframe([]).points(), [[]]) Wireframe([]).points(),
[[]])
self.assertEqual( self.assertEqual(
Wireframe(Point()).points(), [[0, 0, 0, 1]]) Wireframe(Point()).points(),
[[0, 0, 0, 1]])
def test_Line(self):
self.assertEqual( self.assertEqual(
Wireframe(Point()).points(), [vector([0, 0, 0, 1])]) Line().points(),
[[-1, 0, 0, 1], [1, 0, 0, 1]])
def test_Polygon(self): def test_Polygon(self):
p0 = Point() p0 = Point()
@@ -87,6 +103,14 @@ class TestGeometry(unittest.TestCase):
pg.points(), pg.points(),
[[0, 0, 0, 1], [1, 0 , 0, 1], [1, 1, 1, 1], [0, 1, 1, 1], [0, 0, 0, 1]]) [[0, 0, 0, 1], [1, 0 , 0, 1], [1, 1, 1, 1], [0, 1, 1, 1], [0, 0, 0, 1]])
def test_Polygon_rotate(self):
pg = Polygon(Point(1, 1, 1)).rotate_x(math.pi/4)
[self.assertAlmostEqual(i, j) for i, j in
zip(pg.points()[0], [1, 0, 1.414213562373095, 1])]
[self.assertAlmostEqual(k, l) for i, j in
zip(pg.xyz(), ((1, 1), (0, 0), (1.414213562373095, 1.414213562373095)))
for k, l in zip(i, j)]
def test_Polygon_ch_cs(self): def test_Polygon_ch_cs(self):
# example object to rotate # example object to rotate
p0 = Point() p0 = Point()
@@ -103,5 +127,23 @@ class TestGeometry(unittest.TestCase):
pg.ch_cs(cs) pg.ch_cs(cs)
[self.assertAlmostEqual(i, j) for i, j in zip(pg.points(), test)] [self.assertAlmostEqual(i, j) for i, j in zip(pg.points(), test)]
def test_Circle(self):
cs = Circle(n=4).points()
test = [[1, 0, 0, 1], [0, 1, 0, 1], [-1, 0, 0, 1], [0, -1, 0 ,1], [1, 0, 0, 1]]
[self.assertAlmostEqual(i, j) for i, j in zip(cs, test)]
cs = Circle().points()
test = [[1.0, 0.0, 0, 1],
[0.8090169943749475, 0.5877852522924731, 0, 1],
[0.30901699437494745, 0.9510565162951535, 0, 1],
[-0.30901699437494734, 0.9510565162951536, 0, 1],
[-0.8090169943749473, 0.5877852522924732, 0, 1],
[-1.0, 1.2246467991473532e-16, 0, 1],
[-0.8090169943749476, -0.587785252292473, 0, 1],
[-0.30901699437494756, -0.9510565162951535, 0, 1],
[0.30901699437494723, -0.9510565162951536, 0, 1],
[0.8090169943749473, -0.5877852522924734, 0, 1]]
[self.assertAlmostEqual(k, l) for i, j in zip(cs, test) for k, l in zip(i, j) ]
if __name__ == '__main__': if __name__ == '__main__':
unittest.main(verbosity=2) unittest.main(verbosity=2)

View File

@@ -14,10 +14,10 @@ import os
import sys import sys
import math import math
from numpy import allclose from numpy import allclose
sys.path.insert(0, os.path.abspath('../pylib')) sys.path.insert(0, os.path.abspath('..'))
from data import fold_list from pylib.data import fold_list
from geometry2d import translate_xy, rotate_xy, interpolate_hermite, lines, cubics from pylib.geometry2d import translate_xy, rotate_xy, interpolate_hermite, lines, cubics
from geometry2d_plot import plot_lines, plot_cubic_lines from pylib.geometry2d_plot import plot_lines, plot_cubic_lines
class TestGeometry2d(unittest.TestCase): class TestGeometry2d(unittest.TestCase):

View File

@@ -12,10 +12,10 @@ import unittest
import os import os
import sys import sys
sys.path.insert(0, os.path.abspath('../pylib')) sys.path.insert(0, os.path.abspath('..'))
import math import math
from mathematics import vector, matrix from pylib.mathematics import vector, matrix
class TestGeometry(unittest.TestCase): class TestGeometry(unittest.TestCase):

View File

@@ -19,10 +19,10 @@ from matplotlib.pyplot import figure, subplots, plot, show
import os import os
import sys import sys
sys.path.insert(0, os.path.abspath('../pylib')) sys.path.insert(0, os.path.abspath('..'))
from numerical.ode import (e1, e2, e4, i1, newmark_newtonraphson, from pylib.numerical.ode import (e1, e2, e4, i1,
newmark_newtonraphson_rdk) newmark_newtonraphson, newmark_newtonraphson_rdk)
from numerical.ode_model import disk, disk_nm, disk_nmmdk from pylib.numerical.ode_model import disk, disk_nm, disk_nmmdk
def plotx1rphi(x, t, title): def plotx1rphi(x, t, title):
"""Plot plane rotation (x, y, phi) """Plot plane rotation (x, y, phi)

View File

@@ -14,8 +14,8 @@ from time import mktime
import os import os
import sys import sys
sys.path.insert(0, os.path.abspath('../pylib')) sys.path.insert(0, os.path.abspath('..'))
from time_of_day import (in_seconds, seconds, seconds_norm, from pylib.time_of_day import (in_seconds, seconds, seconds_norm,
minutes, minutes_norm, hours, hours_norm, days, days_norm, minutes, minutes_norm, hours, hours_norm, days, days_norm,
transform) transform)