add issequence function to data and plot functions and examples for geometry
This commit is contained in:
2
docs/build/html/.buildinfo
vendored
2
docs/build/html/.buildinfo
vendored
@@ -1,4 +1,4 @@
|
||||
# Sphinx build info version 1
|
||||
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
|
||||
config: 2cbc17343901b023dfef01a2244f3120
|
||||
config: caf5792fd17da2c604992977d35f1f60
|
||||
tags: 645f666f9bcd5a90fca523b33c5a78b7
|
||||
|
||||
1
docs/build/html/_modules/index.html
vendored
1
docs/build/html/_modules/index.html
vendored
@@ -40,6 +40,7 @@
|
||||
<li><a href="pylib/geometry.html">pylib.geometry</a></li>
|
||||
<li><a href="pylib/geometry2d.html">pylib.geometry2d</a></li>
|
||||
<li><a href="pylib/geometry2d_plot.html">pylib.geometry2d_plot</a></li>
|
||||
<li><a href="pylib/geometry_plot_pylab.html">pylib.geometry_plot_pylab</a></li>
|
||||
<li><a href="pylib/mathematics.html">pylib.mathematics</a></li>
|
||||
<li><a href="pylib/numerical/fit.html">pylib.numerical.fit</a></li>
|
||||
<li><a href="pylib/numerical/integration.html">pylib.numerical.integration</a></li>
|
||||
|
||||
30
docs/build/html/_modules/pylib/data.html
vendored
30
docs/build/html/_modules/pylib/data.html
vendored
@@ -47,6 +47,36 @@
|
||||
<span class="sd">"""</span>
|
||||
<span class="kn">import</span> <span class="nn">math</span>
|
||||
<span class="kn">import</span> <span class="nn">pickle</span>
|
||||
<span class="kn">import</span> <span class="nn">collections</span>
|
||||
|
||||
<div class="viewcode-block" id="issequence"><a class="viewcode-back" href="../../pylib.data.html#pylib.data.issequence">[docs]</a><span class="k">def</span> <span class="nf">issequence</span><span class="p">(</span><span class="n">obj</span><span class="p">):</span>
|
||||
<span class="sd">"""</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"> >>> issequence(())</span>
|
||||
<span class="sd"> True</span>
|
||||
<span class="sd"> >>> issequence((3, ))</span>
|
||||
<span class="sd"> True</span>
|
||||
<span class="sd"> >>> issequence([])</span>
|
||||
<span class="sd"> True</span>
|
||||
<span class="sd"> >>> issequence([1])</span>
|
||||
<span class="sd"> True</span>
|
||||
<span class="sd"> >>> issequence([1, 2])</span>
|
||||
<span class="sd"> True</span>
|
||||
<span class="sd"> >>> issequence('')</span>
|
||||
<span class="sd"> True</span>
|
||||
|
||||
<span class="sd"> >>> issequence((3))</span>
|
||||
<span class="sd"> False</span>
|
||||
<span class="sd"> >>> issequence({})</span>
|
||||
<span class="sd"> False</span>
|
||||
<span class="sd"> >>> issequence(set())</span>
|
||||
<span class="sd"> False</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">collections</span><span class="o">.</span><span class="n">abc</span><span class="o">.</span><span class="n">Sequence</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="read"><a class="viewcode-back" href="../../pylib.data.html#pylib.data.read">[docs]</a><span class="k">def</span> <span class="nf">read</span><span class="p">(</span><span class="n">file_name</span><span class="p">,</span> <span class="n">x_column</span><span class="p">,</span> <span class="n">y_column</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||
<span class="sd">"""Read ascii data file.</span>
|
||||
|
||||
8
docs/build/html/_modules/pylib/function.html
vendored
8
docs/build/html/_modules/pylib/function.html
vendored
@@ -235,7 +235,7 @@
|
||||
<span class="sd"> >>> x, y, theta_end = hyotrochoid(20, 6, 6)</span>
|
||||
|
||||
<span class="sd"> .. seealso::</span>
|
||||
<span class="sd"> :meth:`mathematics.lcm`</span>
|
||||
<span class="sd"> :meth:`pylib.mathematics.lcm`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">x</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">theta</span><span class="p">:</span> <span class="p">(</span><span class="n">R</span><span class="o">-</span><span class="n">r</span><span class="p">)</span><span class="o">*</span><span class="n">math</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span> <span class="o">+</span> <span class="n">d</span><span class="o">*</span><span class="n">math</span><span class="o">.</span><span class="n">cos</span><span class="p">((</span><span class="n">R</span><span class="o">-</span><span class="n">r</span><span class="p">)</span><span class="o">/</span><span class="n">r</span> <span class="o">*</span> <span class="n">theta</span><span class="p">)</span>
|
||||
<span class="n">y</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">theta</span><span class="p">:</span> <span class="p">(</span><span class="n">R</span><span class="o">-</span><span class="n">r</span><span class="p">)</span><span class="o">*</span><span class="n">math</span><span class="o">.</span><span class="n">sin</span><span class="p">(</span><span class="n">theta</span><span class="p">)</span> <span class="o">-</span> <span class="n">d</span><span class="o">*</span><span class="n">math</span><span class="o">.</span><span class="n">sin</span><span class="p">((</span><span class="n">R</span><span class="o">-</span><span class="n">r</span><span class="p">)</span><span class="o">/</span><span class="n">r</span> <span class="o">*</span> <span class="n">theta</span><span class="p">)</span>
|
||||
@@ -412,7 +412,7 @@
|
||||
|
||||
|
||||
<span class="sd"> .. seealso::</span>
|
||||
<span class="sd"> :meth:`pylib.function.transformation`</span>
|
||||
<span class="sd"> :meth:`transformation`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="c1"># scale function to used chars and dots/pixel in y direction (4 for braille characters): from [0, 1] to [0, chars*4-1]</span>
|
||||
<span class="c1"># negate the function because the y axis is pointing downwards: from [0, 1] to [-1, 0] or from [0, chars*4-1] to [-(chars*4-1), 0]</span>
|
||||
@@ -437,7 +437,7 @@
|
||||
<span class="c1">#frame = canvas.frame(min_x=a*pixel_per_char, min_y=1, max_x=b*pixel_per_char, max_y=21)</span>
|
||||
<span class="n">frame</span> <span class="o">=</span> <span class="n">canvas</span><span class="o">.</span><span class="n">frame</span><span class="p">()</span>
|
||||
<span class="k">elif</span> <span class="n">char_set</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">"histogram"</span><span class="p">,</span> <span class="s2">"block"</span><span class="p">]:</span>
|
||||
<span class="kn">import</span> <span class="nn">drawblock</span>
|
||||
<span class="kn">from</span> <span class="nn">.drawblock</span> <span class="kn">import</span> <span class="n">histogram</span>
|
||||
|
||||
<span class="n">pixels_horizontal</span> <span class="o">=</span> <span class="mi">1</span>
|
||||
<span class="n">pixels_vertical</span> <span class="o">=</span> <span class="mi">8</span>
|
||||
@@ -447,7 +447,7 @@
|
||||
<span class="n">density</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="n">density</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> <span class="c1"># density max 1!</span>
|
||||
<span class="n">x</span> <span class="o">=</span> <span class="n">seq</span><span class="p">(</span><span class="n">x_0</span><span class="o">*</span><span class="n">window_factor</span><span class="p">,</span> <span class="n">x_1</span><span class="o">*</span><span class="n">window_factor</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="n">pixels_horizontal</span><span class="o">/</span><span class="n">density</span><span class="p">)</span>
|
||||
<span class="n">f</span> <span class="o">=</span> <span class="p">[</span><span class="n">f</span><span class="p">(</span><span class="n">xi</span><span class="p">,</span> <span class="n">t</span><span class="p">)</span> <span class="k">for</span> <span class="n">xi</span> <span class="ow">in</span> <span class="n">x</span><span class="p">]</span>
|
||||
<span class="n">frame</span> <span class="o">=</span> <span class="n">drawblock</span><span class="o">.</span><span class="n">histogram</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span>
|
||||
<span class="n">frame</span> <span class="o">=</span> <span class="n">histogram</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span>
|
||||
|
||||
<span class="k">return</span> <span class="n">frame</span></div>
|
||||
</pre></div>
|
||||
|
||||
277
docs/build/html/_modules/pylib/geometry.html
vendored
277
docs/build/html/_modules/pylib/geometry.html
vendored
@@ -35,7 +35,7 @@
|
||||
<h1>Source code for pylib.geometry</h1><div class="highlight"><pre>
|
||||
<span></span><span class="ch">#!/usr/bin/env python</span>
|
||||
<span class="c1"># -*- coding: utf-8 -*-</span>
|
||||
<span class="sd">"""2D geometry objects.</span>
|
||||
<span class="sd">"""Geometry objects.</span>
|
||||
|
||||
<span class="sd">:Date: 2019-12-21</span>
|
||||
|
||||
@@ -44,26 +44,37 @@
|
||||
<span class="sd"> :synopsis: Geometry objects.</span>
|
||||
|
||||
<span class="sd">.. moduleauthor:: Daniel Weschke <daniel.weschke@directbox.de></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">"""</span>
|
||||
<span class="kn">import</span> <span class="nn">math</span>
|
||||
<span class="kn">import</span> <span class="nn">copy</span>
|
||||
<span class="kn">from</span> <span class="nn">mathematics</span> <span class="kn">import</span> <span class="n">vector</span><span class="p">,</span> <span class="n">matrix</span>
|
||||
<span class="kn">from</span> <span class="nn">.mathematics</span> <span class="kn">import</span> <span class="n">vector</span><span class="p">,</span> <span class="n">matrix</span>
|
||||
|
||||
<div class="viewcode-block" id="Direction"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Direction">[docs]</a><span class="k">class</span> <span class="nc">Direction</span><span class="p">(</span><span class="n">vector</span><span class="p">):</span>
|
||||
<span class="sd">"""Direction in local coordinate system"""</span>
|
||||
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">z</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">([</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">z</span><span class="p">,</span> <span class="mi">0</span><span class="p">])</span>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">xyz</span><span class="p">())</span></div>
|
||||
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">([</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">z</span><span class="p">,</span> <span class="mi">0</span><span class="p">])</span></div>
|
||||
|
||||
<div class="viewcode-block" id="Point"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Point">[docs]</a><span class="k">class</span> <span class="nc">Point</span><span class="p">(</span><span class="n">vector</span><span class="p">):</span>
|
||||
<span class="sd">"""Point in local coordinate system"""</span>
|
||||
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">z</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
|
||||
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">([</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">z</span><span class="p">,</span> <span class="mi">1</span><span class="p">])</span>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">xyz</span><span class="p">())</span></div>
|
||||
<span class="c1"># TODO</span>
|
||||
<div class="viewcode-block" id="Point.projection"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Point.projection">[docs]</a> <span class="k">def</span> <span class="nf">projection</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Orthographic projection to the xy-plane</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="c1"># P = matrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]])</span>
|
||||
<span class="c1">#return (P*self)[:2]</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="p">[:</span><span class="mi">2</span><span class="p">]</span></div></div>
|
||||
|
||||
<div class="viewcode-block" id="CS"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.CS">[docs]</a><span class="k">class</span> <span class="nc">CS</span><span class="p">(</span><span class="n">matrix</span><span class="p">):</span>
|
||||
<span class="sd">"""Coordinate system</span>
|
||||
@@ -71,9 +82,6 @@
|
||||
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="o">=</span><span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="n">y</span><span class="o">=</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="n">z</span><span class="o">=</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">]):</span>
|
||||
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">([[</span><span class="o">*</span><span class="n">x</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="p">[</span><span class="o">*</span><span class="n">y</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="p">[</span><span class="o">*</span><span class="n">z</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">]])</span>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="s1">'['</span> <span class="o">+</span> <span class="s1">', '</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">']'</span>
|
||||
|
||||
<div class="viewcode-block" id="CS.x90"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.CS.x90">[docs]</a> <span class="nd">@staticmethod</span>
|
||||
<span class="k">def</span> <span class="nf">x90</span><span class="p">():</span>
|
||||
<span class="k">return</span> <span class="n">CS</span><span class="p">((</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span></div>
|
||||
@@ -94,7 +102,133 @@
|
||||
<span class="sd">"""Get coordinates in 3d space"""</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="p">[:</span><span class="mi">3</span><span class="p">,:</span><span class="mi">3</span><span class="p">]</span></div></div>
|
||||
|
||||
<div class="viewcode-block" id="World"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.World">[docs]</a><span class="k">class</span> <span class="nc">World</span><span class="p">():</span>
|
||||
<span class="c1"># TODO: Wireframe(list) or Wireframe(matrix) ?</span>
|
||||
<span class="c1"># list of Points</span>
|
||||
<div class="viewcode-block" id="Wireframe"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Wireframe">[docs]</a><span class="k">class</span> <span class="nc">Wireframe</span><span class="p">:</span>
|
||||
<span class="sd">"""Open and closed wireframe object in local coordinate system</span>
|
||||
|
||||
<span class="sd"> This class create its own points (copy).</span>
|
||||
<span class="sd"> """</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">'['</span> <span class="o">+</span> <span class="s1">', '</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">']'</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">"""Returns the Iterator object"""</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">"""Get coordinates in 3d space"""</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">"""Get coordinates in 3d space"""</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">"""Get coordinates in 3d space"""</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">"""Line a open wireframe object in local coordinate system"""</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">"""Polygon as closed wireframe object in local coordinate system"""</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">"""Circle a closed wireframe object in local coordinate system"""</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">"""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"> """</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">"""Line a open wireframe object in local coordinate system"""</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">"""World-space with world-space coordinates</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
@@ -102,12 +236,13 @@
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_objects</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_store_init</span><span class="p">()</span>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="World.__iter__"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.World.__iter__">[docs]</a> <span class="k">def</span> <span class="fm">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Returns the Iterator object"""</span>
|
||||
<span class="k">return</span> <span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">objects</span><span class="p">())</span>
|
||||
<span class="k">return</span> <span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">objects</span><span class="p">())</span></div>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_store_init</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Initialize or reset calculated values, because a new object was added.</span>
|
||||
<span class="sd">"""Initialize or reset calculated values, because a new object</span>
|
||||
<span class="sd"> was added.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_bb</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_sd</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
@@ -141,6 +276,33 @@
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_cs</span><span class="o">.</span><span class="n">scale</span><span class="p">(</span><span class="n">sx</span><span class="p">,</span> <span class="n">sy</span><span class="p">,</span> <span class="n">sz</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="bp">self</span></div>
|
||||
|
||||
<div class="viewcode-block" id="World.wireframes"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.World.wireframes">[docs]</a> <span class="k">def</span> <span class="nf">wireframes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">objects</span><span class="p">():</span>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">Wireframe</span><span class="p">):</span>
|
||||
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">i</span><span class="o">.</span><span class="n">points</span><span class="p">())</span>
|
||||
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">Solid</span><span class="p">):</span>
|
||||
<span class="p">[</span><span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">j</span><span class="o">.</span><span class="n">points</span><span class="p">())</span> <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="n">i</span><span class="o">.</span><span class="n">wireframes</span><span class="p">()]</span>
|
||||
<span class="k">return</span> <span class="n">result</span></div>
|
||||
|
||||
<div class="viewcode-block" id="World.wireframes_xy"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.World.wireframes_xy">[docs]</a> <span class="k">def</span> <span class="nf">wireframes_xy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">objects</span><span class="p">():</span>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">Wireframe</span><span class="p">):</span>
|
||||
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">i</span><span class="o">.</span><span class="n">xy</span><span class="p">())</span>
|
||||
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">Solid</span><span class="p">):</span>
|
||||
<span class="p">[</span><span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">j</span><span class="o">.</span><span class="n">xy</span><span class="p">())</span> <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="n">i</span><span class="o">.</span><span class="n">wireframes</span><span class="p">()]</span>
|
||||
<span class="k">return</span> <span class="n">result</span></div>
|
||||
|
||||
<div class="viewcode-block" id="World.wireframes_xyz"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.World.wireframes_xyz">[docs]</a> <span class="k">def</span> <span class="nf">wireframes_xyz</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">objects</span><span class="p">():</span>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">Wireframe</span><span class="p">):</span>
|
||||
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">i</span><span class="o">.</span><span class="n">xyz</span><span class="p">())</span>
|
||||
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">Solid</span><span class="p">):</span>
|
||||
<span class="p">[</span><span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">j</span><span class="o">.</span><span class="n">xyz</span><span class="p">())</span> <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="n">i</span><span class="o">.</span><span class="n">wireframes</span><span class="p">()]</span>
|
||||
<span class="k">return</span> <span class="n">result</span></div>
|
||||
|
||||
<div class="viewcode-block" id="World.objects"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.World.objects">[docs]</a> <span class="k">def</span> <span class="nf">objects</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="p">[</span><span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="n">i</span><span class="p">)</span><span class="o">.</span><span class="n">ch_cs</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_cs</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_objects</span><span class="p">]</span></div>
|
||||
|
||||
@@ -159,10 +321,9 @@
|
||||
<span class="n">xmax</span> <span class="o">=</span> <span class="o">-</span><span class="n">math</span><span class="o">.</span><span class="n">inf</span>
|
||||
<span class="n">ymax</span> <span class="o">=</span> <span class="o">-</span><span class="n">math</span><span class="o">.</span><span class="n">inf</span>
|
||||
<span class="n">zmax</span> <span class="o">=</span> <span class="o">-</span><span class="n">math</span><span class="o">.</span><span class="n">inf</span>
|
||||
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_objects</span><span class="p">:</span>
|
||||
<span class="n">xi</span><span class="p">,</span> <span class="n">yi</span><span class="p">,</span> <span class="n">zi</span> <span class="o">=</span> <span class="nb">map</span><span class="p">(</span><span class="nb">min</span><span class="p">,</span> <span class="n">i</span><span class="o">.</span><span class="n">xyz</span><span class="p">())</span>
|
||||
<span class="n">xs</span><span class="p">,</span> <span class="n">ys</span><span class="p">,</span> <span class="n">zs</span> <span class="o">=</span> <span class="nb">map</span><span class="p">(</span><span class="nb">max</span><span class="p">,</span> <span class="n">i</span><span class="o">.</span><span class="n">xyz</span><span class="p">())</span>
|
||||
<span class="c1">#xmax = x if x > xmax: xmax = x</span>
|
||||
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">wireframes_xyz</span><span class="p">():</span>
|
||||
<span class="n">xi</span><span class="p">,</span> <span class="n">yi</span><span class="p">,</span> <span class="n">zi</span> <span class="o">=</span> <span class="nb">map</span><span class="p">(</span><span class="nb">min</span><span class="p">,</span> <span class="n">i</span><span class="p">)</span>
|
||||
<span class="n">xs</span><span class="p">,</span> <span class="n">ys</span><span class="p">,</span> <span class="n">zs</span> <span class="o">=</span> <span class="nb">map</span><span class="p">(</span><span class="nb">max</span><span class="p">,</span> <span class="n">i</span><span class="p">)</span>
|
||||
<span class="n">xmin</span> <span class="o">=</span> <span class="n">xi</span> <span class="k">if</span> <span class="n">xi</span> <span class="o"><</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"><</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"><</span> <span class="n">zmin</span> <span class="k">else</span> <span class="n">zmin</span>
|
||||
@@ -183,81 +344,11 @@
|
||||
|
||||
<div class="viewcode-block" id="World.center"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.World.center">[docs]</a> <span class="k">def</span> <span class="nf">center</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">bb</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">bounding_box</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">ch_cs</span><span class="p">([[</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="o">-</span><span class="p">(</span><span class="n">bb</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">bb</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="o">/</span><span class="mi">2</span><span class="p">],[</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="o">-</span><span class="p">(</span><span class="n">bb</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="o">-</span><span class="n">bb</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">/</span><span class="mi">2</span><span class="p">],[</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="p">(</span><span class="n">bb</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span><span class="o">-</span><span class="n">bb</span><span class="p">[</span><span class="mi">4</span><span class="p">])</span><span class="o">/</span><span class="mi">2</span><span class="p">],[</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">]])</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">ch_cs</span><span class="p">([[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="p">(</span><span class="n">bb</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="n">bb</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span><span class="o">/</span><span class="mi">2</span><span class="p">],</span>
|
||||
<span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="p">(</span><span class="n">bb</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">+</span><span class="n">bb</span><span class="p">[</span><span class="mi">3</span><span class="p">])</span><span class="o">/</span><span class="mi">2</span><span class="p">],</span>
|
||||
<span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="p">(</span><span class="n">bb</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span><span class="o">+</span><span class="n">bb</span><span class="p">[</span><span class="mi">5</span><span class="p">])</span><span class="o">/</span><span class="mi">2</span><span class="p">],</span>
|
||||
<span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">]])</span>
|
||||
<span class="k">return</span> <span class="bp">self</span></div></div>
|
||||
|
||||
<span class="c1"># TODO: Wireframe(list) or Wireframe(matrix) ?</span>
|
||||
<span class="c1"># list of Points</span>
|
||||
<div class="viewcode-block" id="Wireframe"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Wireframe">[docs]</a><span class="k">class</span> <span class="nc">Wireframe</span><span class="p">():</span>
|
||||
<span class="sd">"""Open and closed wireframe object in local coordinate system</span>
|
||||
|
||||
<span class="sd"> This class create its own points (copy).</span>
|
||||
<span class="sd"> """</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">'['</span> <span class="o">+</span> <span class="s1">', '</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">']'</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">"""Returns the Iterator object"""</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">"""Get coordinates in 3d space"""</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">"""Line a open wireframe object in local coordinate system"""</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">"""Polygon as closed wireframe object in local coordinate system"""</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">"""Circle a closed wireframe object in local coordinate system"""</span>
|
||||
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">radius</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">n</span><span class="o">=</span><span class="mi">10</span><span class="p">):</span>
|
||||
<span class="n">points</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">n</span><span class="p">):</span>
|
||||
<span class="n">x</span> <span class="o">=</span> <span class="n">radius</span> <span class="o">*</span> <span class="n">math</span><span class="o">.</span><span class="n">sin</span><span class="p">(</span><span class="n">i</span><span class="o">*</span><span class="mi">2</span><span class="o">*</span><span class="n">math</span><span class="o">.</span><span class="n">pi</span><span class="o">/</span><span class="n">n</span><span class="p">)</span>
|
||||
<span class="n">y</span> <span class="o">=</span> <span class="n">radius</span> <span class="o">*</span> <span class="n">math</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="n">i</span><span class="o">*</span><span class="mi">2</span><span class="o">*</span><span class="n">math</span><span class="o">.</span><span class="n">pi</span><span class="o">/</span><span class="n">n</span><span class="p">)</span>
|
||||
<span class="n">points</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">Point</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
|
||||
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">points</span><span class="p">)</span></div>
|
||||
</pre></div>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
<span class="sd">.. moduleauthor:: Daniel Weschke <daniel.weschke@directbox.de></span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="kn">import</span> <span class="nn">pylab</span>
|
||||
<span class="kn">from</span> <span class="nn">geometry2d</span> <span class="kn">import</span> <span class="p">(</span>
|
||||
<span class="kn">from</span> <span class="nn">.geometry2d</span> <span class="kn">import</span> <span class="p">(</span>
|
||||
<span class="n">distance</span><span class="p">,</span> <span class="n">angle</span><span class="p">,</span> <span class="n">line</span><span class="p">,</span> <span class="n">interpolate_hermite</span><span class="p">,</span> <span class="n">rotate_xy</span><span class="p">,</span> <span class="n">translate_xy</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
|
||||
346
docs/build/html/_modules/pylib/geometry_plot_pylab.html
vendored
Normal file
346
docs/build/html/_modules/pylib/geometry_plot_pylab.html
vendored
Normal 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 — 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">"""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 <daniel.weschke@directbox.de></span>
|
||||
<span class="sd">"""</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">'dark_background'</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">'text.color'</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'grey'</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">'axes.edgecolor'</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'grey'</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">'grid.color'</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'grey'</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">'xtick.color'</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'grey'</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">'ytick.color'</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'grey'</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">'axes3d.grid'</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"># 'color', ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd',</span>
|
||||
<span class="c1"># '#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf'])</span>
|
||||
<span class="n">pylab</span><span class="o">.</span><span class="n">rcParams</span><span class="p">[</span><span class="s1">'axes.prop_cycle'</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">"color"</span><span class="p">,</span> <span class="p">[</span><span class="s1">'#3498DB'</span><span class="p">,</span> <span class="s1">'#ff7f0e'</span><span class="p">,</span> <span class="s1">'#2ca02c'</span><span class="p">,</span> <span class="s1">'#d62728'</span><span class="p">,</span> <span class="s1">'#9467bd'</span><span class="p">,</span>
|
||||
<span class="s1">'#8c564b'</span><span class="p">,</span> <span class="s1">'#e377c2'</span><span class="p">,</span> <span class="s1">'#7f7f7f'</span><span class="p">,</span> <span class="s1">'#bcbd22'</span><span class="p">,</span> <span class="s1">'#17becf'</span><span class="p">])</span>
|
||||
|
||||
<span class="c1"># remove f for fullscreen toggle, default ['f', 'ctrl+f']</span>
|
||||
<span class="n">pylab</span><span class="o">.</span><span class="n">rcParams</span><span class="p">[</span><span class="s1">'keymap.fullscreen'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'ctrl+f'</span><span class="p">]</span>
|
||||
<span class="c1"># remove L for log/lin toggle, default ['k', 'L']</span>
|
||||
<span class="n">pylab</span><span class="o">.</span><span class="n">rcParams</span><span class="p">[</span><span class="s1">'keymap.xscale'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'k'</span><span class="p">]</span>
|
||||
<span class="c1"># remove l for log/lin toggle, default ['l']</span>
|
||||
<span class="n">pylab</span><span class="o">.</span><span class="n">rcParams</span><span class="p">[</span><span class="s1">'keymap.yscale'</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">'''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's ax.set_aspect('equal') and ax.axis('equal') 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"> '''</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">'3d'</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">'equal'</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">'3d'</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">'3d'</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">'C0'</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">"""</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"> """</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">'geometry-cad'</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">'off'</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">'C0'</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('key pressed:', 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">'left'</span><span class="p">,</span> <span class="s1">'right'</span><span class="p">,</span> <span class="s1">'up'</span><span class="p">,</span> <span class="s1">'down'</span><span class="p">,</span>
|
||||
<span class="s1">'f'</span><span class="p">,</span> <span class="s1">'t'</span><span class="p">,</span> <span class="s1">'b'</span><span class="p">,</span> <span class="s1">'l'</span><span class="p">,</span> <span class="s1">'r'</span><span class="p">,</span> <span class="s1">'i'</span><span class="p">,</span> <span class="s1">'d'</span><span class="p">,</span>
|
||||
<span class="s1">'shift+left'</span><span class="p">,</span> <span class="s1">'shift+right'</span><span class="p">,</span> <span class="s1">'shift+up'</span><span class="p">,</span> <span class="s1">'shift+down'</span><span class="p">,</span>
|
||||
<span class="s1">'ctrl+up'</span><span class="p">,</span> <span class="s1">'ctrl+down'</span><span class="p">,</span> <span class="s1">'ctrl+left'</span><span class="p">,</span> <span class="s1">'ctrl+right'</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">'left'</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">'right'</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">'up'</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">'down'</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">'f'</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">'t'</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">'b'</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">'l'</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">'r'</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">'i'</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">'d'</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">'shift+left'</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">'shift+right'</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">'shift+up'</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">'shift+down'</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">'ctrl+left'</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">'ctrl+right'</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">'ctrl+up'</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">'ctrl+down'</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">'key_press_event'</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">'resize_event'</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">'rotate: left, right, up, down, ctrl+left, ctrl+right</span><span class="se">\n</span><span class="s1">'</span> <span class="o">+</span>
|
||||
<span class="s1">'pan: shift+left, shift+right, shift+up, shift+down</span><span class="se">\n</span><span class="s1">'</span> <span class="o">+</span>
|
||||
<span class="s1">'zoom: ctrl+up, ctrl+down</span><span class="se">\n</span><span class="s1">'</span> <span class="o">+</span>
|
||||
<span class="s1">'view: f (front), l (left), r (right), t (top), b (bottom)</span><span class="se">\n</span><span class="s1">'</span> <span class="o">+</span>
|
||||
<span class="s1">' i (isometric), d (dimetric)'</span><span class="p">,</span>
|
||||
<span class="n">horizontalalignment</span><span class="o">=</span><span class="s1">'left'</span><span class="p">,</span>
|
||||
<span class="n">verticalalignment</span><span class="o">=</span><span class="s1">'top'</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">'black'</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">'monospace'</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">
|
||||
©2019, Daniel Weschke.
|
||||
|
||||
|
|
||||
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.1</a>
|
||||
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
400
docs/build/html/_modules/pylib/mathematics.html
vendored
400
docs/build/html/_modules/pylib/mathematics.html
vendored
@@ -56,69 +56,68 @@
|
||||
<div class="viewcode-block" id="vector"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.vector">[docs]</a><span class="k">class</span> <span class="nc">vector</span><span class="p">(</span><span class="nb">list</span><span class="p">):</span>
|
||||
<span class="sd">"""Use/create vector like lists</span>
|
||||
|
||||
<span class="sd"> * size -> len(a)</span>
|
||||
<span class="sd"> * abs -> abs(a)</span>
|
||||
<span class="sd"> * dot -> a * b</span>
|
||||
<span class="sd"> * outer -> a @ b</span>
|
||||
<span class="sd"> * size, length of a vector use len(a)</span>
|
||||
<span class="sd"> * absolute, magntude, norm of a vector use abs(a), see</span>
|
||||
<span class="sd"> :meth:`__abs__`</span>
|
||||
<span class="sd"> * dot product use a * b, see :meth:`__mul__` and :meth:`__rmul__`</span>
|
||||
<span class="sd"> * outer product use a @ b, see :meth:`__matmul__`</span>
|
||||
|
||||
<span class="sd"> use super constructor</span>
|
||||
<span class="sd"> :__iter__:</span>
|
||||
|
||||
<span class="sd"> use super __iter__</span>
|
||||
<span class="sd"> >>> [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"> >>> v = vector([1,2,3,4,5])</span>
|
||||
<span class="sd"> >>> v[3:5] = [1,2]</span>
|
||||
<span class="sd"> >>> v = vector([1, 2, 3, 4, 5])</span>
|
||||
<span class="sd"> >>> v[3:5] = [1, 2]</span>
|
||||
<span class="sd"> >>> print(v)</span>
|
||||
<span class="sd"> [1, 2, 3, 1, 2]</span>
|
||||
<span class="sd"> >>> isinstance(v, vector)</span>
|
||||
<span class="sd"> True</span>
|
||||
|
||||
<span class="sd"> use super __lt__(a, b)</span>
|
||||
<span class="sd"> :__eq__(a, b):</span>
|
||||
|
||||
<span class="sd"> use super __le__(a, b)</span>
|
||||
<span class="sd"> >>> vector([1, 2, 3, 1, 2]) == vector([1, 2, 3, 1, 2])</span>
|
||||
<span class="sd"> True</span>
|
||||
<span class="sd"> >>> 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"> >>> v = vector([1,2,3,1,2])</span>
|
||||
<span class="sd"> >>> v2 = vector([1,2,3,1,2])</span>
|
||||
<span class="sd"> >>> v == v2</span>
|
||||
<span class="sd"> >>> vector([1, 2, 3, 1, 2]) != vector([1, 2, 3, 1, 2])</span>
|
||||
<span class="sd"> False</span>
|
||||
<span class="sd"> >>> vector([1, 2, 3, 1, 2]) != vector([1, 2, 3, 2, 1])</span>
|
||||
<span class="sd"> True</span>
|
||||
|
||||
<span class="sd"> use super __ne__(a, b)</span>
|
||||
<span class="sd"> :__contains__:</span>
|
||||
|
||||
<span class="sd"> use super __ge__(a, b)</span>
|
||||
|
||||
<span class="sd"> use super __gt__(a, b)</span>
|
||||
|
||||
<span class="sd"> use super __contains__</span>
|
||||
|
||||
<span class="sd"> >>> 2 in vector([1,2,3])</span>
|
||||
<span class="sd"> >>> 2 in vector([1, 2, 3])</span>
|
||||
<span class="sd"> True</span>
|
||||
|
||||
<span class="sd"> __isub__</span>
|
||||
<span class="sd"> :__isub__:</span>
|
||||
|
||||
<span class="sd"> >>> v = vector([1,2,3])</span>
|
||||
<span class="sd"> >>> v -= vector([3,3,3])</span>
|
||||
<span class="sd"> >>> v = vector([1, 2, 3])</span>
|
||||
<span class="sd"> >>> v -= vector([3, 3, 3])</span>
|
||||
<span class="sd"> >>> print(v)</span>
|
||||
<span class="sd"> [-2, -1, 0]</span>
|
||||
|
||||
<span class="sd"> __imul__</span>
|
||||
<span class="sd"> :__imul__:</span>
|
||||
|
||||
<span class="sd"> >>> v = vector([1,2,3])</span>
|
||||
<span class="sd"> >>> v *= vector([3,3,3])</span>
|
||||
<span class="sd"> >>> v = vector([1, 2, 3])</span>
|
||||
<span class="sd"> >>> v *= vector([3, 3, 3])</span>
|
||||
<span class="sd"> >>> print(v)</span>
|
||||
<span class="sd"> 18</span>
|
||||
|
||||
<span class="sd"> __imatmul__</span>
|
||||
<span class="sd"> :__imatmul__:</span>
|
||||
|
||||
<span class="sd"> >>> m = vector([1,2,3])</span>
|
||||
<span class="sd"> >>> m *= vector([3,3,3])</span>
|
||||
<span class="sd"> >>> m = vector([1, 2, 3])</span>
|
||||
<span class="sd"> >>> m *= vector([3, 3, 3])</span>
|
||||
<span class="sd"> >>> print(v)</span>
|
||||
<span class="sd"> [[3, 3, 3], [6, 6, 6], [9, 9, 9]]</span>
|
||||
<span class="sd"> """</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">"""</span>
|
||||
<span class="sd"> For index return value, for range return new vector object.</span>
|
||||
|
||||
@@ -133,57 +132,68 @@
|
||||
<span class="sd"> """</span>
|
||||
<span class="c1"># use the list.__getslice__ method and convert result to vector</span>
|
||||
<span class="n">item</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__getitem__</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">vector</span><span class="p">(</span><span class="n">item</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="nb">list</span><span class="p">)</span> <span class="k">else</span> <span class="n">item</span>
|
||||
<span class="k">return</span> <span class="n">vector</span><span class="p">(</span><span class="n">item</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="nb">list</span><span class="p">)</span> <span class="k">else</span> <span class="n">item</span></div>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__pos__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""+ a (new object)</span>
|
||||
<div class="viewcode-block" id="vector.__pos__"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.vector.__pos__">[docs]</a> <span class="k">def</span> <span class="fm">__pos__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""\+ a (new object)</span>
|
||||
|
||||
<span class="sd"> .. math::</span>
|
||||
<span class="sd"> \mathbf{b} = +\mathbf{a}</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="o">*</span><span class="bp">self</span><span class="p">])</span>
|
||||
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="o">*</span><span class="bp">self</span><span class="p">])</span></div>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__neg__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""- a (new object)</span>
|
||||
<div class="viewcode-block" id="vector.__neg__"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.vector.__neg__">[docs]</a> <span class="k">def</span> <span class="fm">__neg__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""\- a (new object)</span>
|
||||
|
||||
<span class="sd"> .. math::</span>
|
||||
<span class="sd"> \mathbf{b} = -\mathbf{a}</span>
|
||||
<span class="sd"> """</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">"""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"> >>> v = vector([1,2,3]) + vector([1,2,3])</span>
|
||||
<span class="sd"> >>> v = vector([1, 2, 3]) + vector([1, 2, 3])</span>
|
||||
<span class="sd"> >>> print(v)</span>
|
||||
<span class="sd"> [2, 4, 6]</span>
|
||||
<span class="sd"> """</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">"""a += b (new object)</span>
|
||||
|
||||
<span class="sd"> :Example:</span>
|
||||
|
||||
<span class="sd"> >>> v = vector([1,2,3])</span>
|
||||
<span class="sd"> >>> v += vector([3,3,3])</span>
|
||||
<span class="sd"> >>> v = vector([1, 2, 3])</span>
|
||||
<span class="sd"> >>> v += vector([3, 3, 3])</span>
|
||||
<span class="sd"> >>> print(v)</span>
|
||||
<span class="sd"> [4, 5, 6]</span>
|
||||
<span class="sd"> """</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">"""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"> >>> v = vector([1,2,3]) - vector([1,2,3])</span>
|
||||
<span class="sd"> >>> v = vector([1, 2, 3]) - vector([1, 2, 3])</span>
|
||||
<span class="sd"> >>> print(v)</span>
|
||||
<span class="sd"> [0, 0, 0]</span>
|
||||
<span class="sd"> """</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">"""Scalar multiplication, dot product (inner product) or</span>
|
||||
<span class="sd"> vector-matrix multiplication.</span>
|
||||
|
||||
<span class="sd"> a * b (new object)</span>
|
||||
<span class="sd"> vector-matrix multiplication. (new object)</span>
|
||||
|
||||
<span class="sd"> :type other: scalar, vector (or 1d list), matrix (or 2d list)</span>
|
||||
|
||||
@@ -193,18 +203,18 @@
|
||||
<span class="sd"> \mathbf{c} &= \mathbf{a} \cdot \mathbf{B}</span>
|
||||
|
||||
<span class="sd"> .. note::</span>
|
||||
<span class="sd"> No size checking will be conducted, therefore no exceptions for</span>
|
||||
<span class="sd"> wrong usage (result will be nonsense).</span>
|
||||
<span class="sd"> No size checking will be conducted, therefore no exceptions</span>
|
||||
<span class="sd"> for wrong usage (result will be nonsense).</span>
|
||||
|
||||
<span class="sd"> :Example:</span>
|
||||
|
||||
<span class="sd"> >>> v = vector([1,2,3,4,5])*3</span>
|
||||
<span class="sd"> >>> v = vector([1, 2, 3, 4, 5]) * 3</span>
|
||||
<span class="sd"> >>> print(v)</span>
|
||||
<span class="sd"> [3, 6, 9, 12, 15]</span>
|
||||
<span class="sd"> >>> v = vector([1,2,3,4,5])*3.</span>
|
||||
<span class="sd"> >>> v = vector([1, 2, 3, 4, 5]) * 3.</span>
|
||||
<span class="sd"> >>> print(v)</span>
|
||||
<span class="sd"> [3.0, 6.0, 9.0, 12.0, 15.0]</span>
|
||||
<span class="sd"> >>> s = vector([1,2,3])*vector([1,2,3])</span>
|
||||
<span class="sd"> >>> s = vector([1, 2, 3]) * vector([1, 2, 3])</span>
|
||||
<span class="sd"> >>> print(s)</span>
|
||||
<span class="sd"> 14</span>
|
||||
|
||||
@@ -215,15 +225,14 @@
|
||||
<span class="k">return</span> <span class="nb">sum</span><span class="p">([</span><span class="n">i</span><span class="o">*</span><span class="n">j</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)])</span>
|
||||
<span class="k">except</span><span class="p">:</span>
|
||||
<span class="k">try</span><span class="p">:</span> <span class="c1"># vector * matrix</span>
|
||||
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="nb">sum</span><span class="p">(</span><span class="n">c</span><span class="o">*</span><span class="n">d</span> <span class="k">for</span> <span class="n">c</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">b_col</span><span class="p">))</span> <span class="k">for</span> <span class="n">b_col</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="n">other</span><span class="p">)])</span>
|
||||
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="nb">sum</span><span class="p">(</span><span class="n">c</span><span class="o">*</span><span class="n">d</span> <span class="k">for</span> <span class="n">c</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">b_col</span><span class="p">))</span> <span class="k">for</span>
|
||||
<span class="n">b_col</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="n">other</span><span class="p">)])</span>
|
||||
<span class="k">except</span><span class="p">:</span> <span class="c1"># vector * scalar</span>
|
||||
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="n">i</span><span class="o">*</span><span class="n">other</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="p">])</span>
|
||||
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="n">i</span><span class="o">*</span><span class="n">other</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="p">])</span></div>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__rmul__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="vector.__rmul__"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.vector.__rmul__">[docs]</a> <span class="k">def</span> <span class="fm">__rmul__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
|
||||
<span class="sa">r</span><span class="sd">"""Scalar multiplication, dot product (inner product) or</span>
|
||||
<span class="sd"> matrix-vector multiplication.</span>
|
||||
|
||||
<span class="sd"> a * b (new object)</span>
|
||||
<span class="sd"> matrix-vector multiplication. (new object)</span>
|
||||
|
||||
<span class="sd"> :type other: scalar (or 1d list and 2d list)</span>
|
||||
|
||||
@@ -233,32 +242,32 @@
|
||||
<span class="sd"> \mathbf{c} &= \mathbf{A} \cdot \mathbf{b}</span>
|
||||
|
||||
<span class="sd"> .. note::</span>
|
||||
<span class="sd"> No size checking will be conducted, therefore no exceptions for</span>
|
||||
<span class="sd"> wrong usage (result will be nonsense).</span>
|
||||
<span class="sd"> No size checking will be conducted, therefore no exceptions</span>
|
||||
<span class="sd"> for wrong usage (result will be nonsense).</span>
|
||||
|
||||
<span class="sd"> :Example:</span>
|
||||
|
||||
<span class="sd"> >>> v = 3*vector([1,2,3,4,5])</span>
|
||||
<span class="sd"> >>> v = 3 * vector([1, 2, 3, 4, 5])</span>
|
||||
<span class="sd"> >>> print(v)</span>
|
||||
<span class="sd"> [3, 6, 9, 12, 15]</span>
|
||||
<span class="sd"> >>> v = 3.*vector([1,2,3,4,5])</span>
|
||||
<span class="sd"> >>> v = 3. * vector([1, 2, 3, 4, 5])</span>
|
||||
<span class="sd"> >>> print(v)</span>
|
||||
<span class="sd"> [3.0, 6.0, 9.0, 12.0, 15.0]</span>
|
||||
|
||||
<span class="sd"> .. seealso::</span>
|
||||
<span class="sd"> :meth:`__mul__`</span>
|
||||
<span class="sd"> :meth:`matrix.__mul__` for matrix * vector</span>
|
||||
<span class="sd"> :meth:`__mul__` and :meth:`matrix.__mul__` for matrix * vector</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span> <span class="c1"># 2d list * vector (matrix * vector see matrix.__mul__)</span>
|
||||
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="nb">sum</span><span class="p">(</span><span class="n">c</span><span class="o">*</span><span class="n">d</span> <span class="k">for</span> <span class="n">c</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">a_row</span><span class="p">,</span> <span class="bp">self</span><span class="p">))</span> <span class="k">for</span> <span class="n">a_row</span> <span class="ow">in</span> <span class="n">other</span><span class="p">])</span>
|
||||
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="nb">sum</span><span class="p">(</span><span class="n">c</span><span class="o">*</span><span class="n">d</span> <span class="k">for</span> <span class="n">c</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">a_row</span><span class="p">,</span> <span class="bp">self</span><span class="p">))</span> <span class="k">for</span>
|
||||
<span class="n">a_row</span> <span class="ow">in</span> <span class="n">other</span><span class="p">])</span>
|
||||
<span class="k">except</span><span class="p">:</span> <span class="c1"># scalar * vector</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">*</span><span class="n">other</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">*</span><span class="n">other</span></div>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__matmul__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="vector.__matmul__"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.vector.__matmul__">[docs]</a> <span class="k">def</span> <span class="fm">__matmul__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
|
||||
<span class="sa">r</span><span class="sd">"""Outer product a @ b (new object)</span>
|
||||
|
||||
<span class="sd"> .. math::</span>
|
||||
<span class="sd"> \vec{a} \otimes \vec{b}</span>
|
||||
<span class="sd"> \mathbf{c} = \mathbf{a} \otimes \mathbf{b}</span>
|
||||
<span class="sd"> =</span>
|
||||
<span class="sd"> \begin{pmatrix}</span>
|
||||
<span class="sd"> a_{1}\\</span>
|
||||
@@ -281,35 +290,98 @@
|
||||
|
||||
<span class="sd"> :Example:</span>
|
||||
|
||||
<span class="sd"> >>> m = vector([1,2,3]) @ vector([1,2,4])</span>
|
||||
<span class="sd"> >>> m = vector([1, 2, 3]) @ vector([1, 2, 4])</span>
|
||||
<span class="sd"> >>> print(m)</span>
|
||||
<span class="sd"> [[1, 2, 4], [2, 4, 8], [3, 6, 12]]</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span> <span class="c1"># vector * vector</span>
|
||||
<span class="k">return</span> <span class="n">matrix</span><span class="p">([[</span><span class="n">i</span><span class="o">*</span><span class="n">j</span> <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="n">other</span><span class="p">]</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="bp">self</span><span class="p">])</span>
|
||||
<span class="k">except</span><span class="p">:</span> <span class="c1"># vector * number</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">*</span><span class="n">other</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">*</span><span class="n">other</span></div>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__abs__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="vector.__abs__"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.vector.__abs__">[docs]</a> <span class="k">def</span> <span class="fm">__abs__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sa">r</span><span class="sd">"""Magnitude / norm of a vector</span>
|
||||
|
||||
<span class="sd"> .. math::</span>
|
||||
<span class="sd"> b = \sqrt{\sum a_i^2}</span>
|
||||
<span class="sd"> b = |\mathbf{a}| = \sqrt{\sum a_i^2} =</span>
|
||||
<span class="sd"> \sqrt{\mathbf{a} \cdot \mathbf{a}}</span>
|
||||
|
||||
<span class="sd"> :Example:</span>
|
||||
|
||||
<span class="sd"> >>> norm([3, 4])</span>
|
||||
<span class="sd"> 5</span>
|
||||
<span class="sd"> >>> norm(vector([3, 4]))</span>
|
||||
<span class="sd"> 5</span>
|
||||
<span class="sd"> >>> v = vector([3, 4])</span>
|
||||
<span class="sd"> >>> abs(v)</span>
|
||||
<span class="sd"> 5.0</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="n">math</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="bp">self</span> <span class="o">*</span> <span class="bp">self</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">math</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="bp">self</span> <span class="o">*</span> <span class="bp">self</span><span class="p">)</span></div>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="nb">str</span><span class="p">([</span><span class="o">*</span><span class="bp">self</span><span class="p">])</span>
|
||||
<div class="viewcode-block" id="vector.__lt__"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.vector.__lt__">[docs]</a> <span class="k">def</span> <span class="fm">__lt__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
|
||||
<span class="sd">"""Test if this object is lower (smaller) than the other object.</span>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="s2">"vector("</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">")"</span>
|
||||
<span class="sd"> .. math::</span>
|
||||
<span class="sd"> |\mathbf{a}| \lt |\mathbf{b}|</span>
|
||||
|
||||
<span class="sd"> :Example:</span>
|
||||
|
||||
<span class="sd"> >>> vector([3, 2, 1]) < vector([1, 2, 3])</span>
|
||||
<span class="sd"> False</span>
|
||||
<span class="sd"> >>> vector([3, 2, 1]) < vector([1, 2, 4])</span>
|
||||
<span class="sd"> True</span>
|
||||
<span class="sd"> """</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"><</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">"""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"> >>> vector([3, 2, 1]) <= vector([1, 2, 3])</span>
|
||||
<span class="sd"> True</span>
|
||||
<span class="sd"> >>> vector([3, 2, 1]) <= vector([1, 2, 2])</span>
|
||||
<span class="sd"> False</span>
|
||||
<span class="sd"> """</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"><=</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">"""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"> >>> vector([1, 2, 3]) > vector([3, 2, 1])</span>
|
||||
<span class="sd"> False</span>
|
||||
<span class="sd"> >>> vector([1, 2, 3]) > vector([2, 2, 1])</span>
|
||||
<span class="sd"> True</span>
|
||||
<span class="sd"> """</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">></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">"""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"> >>> vector([1, 2, 3]) >= vector([3, 2, 1])</span>
|
||||
<span class="sd"> True</span>
|
||||
<span class="sd"> >>> vector([1, 2, 3]) >= vector([4, 2, 1])</span>
|
||||
<span class="sd"> False</span>
|
||||
<span class="sd"> """</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">>=</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">"vector("</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">")"</span></div>
|
||||
|
||||
<div class="viewcode-block" id="vector.full"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.vector.full">[docs]</a> <span class="nd">@staticmethod</span>
|
||||
<span class="k">def</span> <span class="nf">full</span><span class="p">(</span><span class="n">length</span><span class="p">,</span> <span class="n">fill_value</span><span class="p">):</span>
|
||||
@@ -363,8 +435,8 @@
|
||||
|
||||
<div class="viewcode-block" id="vector.random"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.vector.random">[docs]</a> <span class="nd">@staticmethod</span>
|
||||
<span class="k">def</span> <span class="nf">random</span><span class="p">(</span><span class="n">shape</span><span class="p">,</span> <span class="n">lmin</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">lmax</span><span class="o">=</span><span class="mf">1.0</span><span class="p">):</span>
|
||||
<span class="sd">"""Returns a random vector of length n or matrix of size m rows, n</span>
|
||||
<span class="sd"> columns filled with random numbers.</span>
|
||||
<span class="sd">"""Returns a random vector of length n or matrix of size m rows,</span>
|
||||
<span class="sd"> n columns filled with random numbers.</span>
|
||||
|
||||
<span class="sd"> :Example:</span>
|
||||
|
||||
@@ -386,10 +458,10 @@
|
||||
<span class="sd"> :type a: vector</span>
|
||||
|
||||
<span class="sd"> .. math::</span>
|
||||
<span class="sd"> \vec{e}_a = \frac{\vec{a}}{|\vec{a}|}</span>
|
||||
<span class="sd"> \mathbf{\hat{a}} = \frac{\mathbf{a}}{|\mathbf{a}|}</span>
|
||||
|
||||
<span class="sd"> .. seealso::</span>
|
||||
<span class="sd"> :meth:`norm` for a norm (magnitude) of a vector</span>
|
||||
<span class="sd"> :meth:`__abs__` for a norm (magnitude) of a vector</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">a_mag</span> <span class="o">=</span> <span class="nb">abs</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="n">i</span><span class="o">/</span><span class="n">a_mag</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">a</span><span class="p">])</span></div>
|
||||
@@ -450,15 +522,12 @@
|
||||
<span class="sd"> The direction of c can be found with the right-hand rule.</span>
|
||||
|
||||
<span class="sd"> .. math::</span>
|
||||
<span class="sd"> \vec{c} = \vec{a} \times \vec{b}</span>
|
||||
<span class="sd"> \mathbf{c} = \mathbf{a} \times \mathbf{b}</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="p">[</span><span class="n">a</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">b</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">-</span> <span class="n">a</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">*</span><span class="n">b</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span>
|
||||
<span class="n">a</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">*</span><span class="n">b</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="n">a</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">b</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span>
|
||||
<span class="n">a</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">b</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">a</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">b</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span></div>
|
||||
|
||||
<div class="viewcode-block" id="vector.xyz"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.vector.xyz">[docs]</a> <span class="k">def</span> <span class="nf">xyz</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="p">[:</span><span class="mi">3</span><span class="p">]</span></div>
|
||||
|
||||
<div class="viewcode-block" id="vector.rotate_x"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.vector.rotate_x">[docs]</a> <span class="k">def</span> <span class="nf">rotate_x</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">theta</span><span class="p">):</span>
|
||||
<span class="sa">r</span><span class="sd">"""Rotation about the x dirction.</span>
|
||||
|
||||
@@ -528,10 +597,10 @@
|
||||
|
||||
<span class="sd"> uniform scaling if sx=sy=sz=s.</span>
|
||||
<span class="sd"> Note that scaling happens around the origin, so objects not</span>
|
||||
<span class="sd"> centered at the origin will have their centers move. To avoid this,</span>
|
||||
<span class="sd"> either scale the object when it's located at the origin, or</span>
|
||||
<span class="sd"> perform a translation afterwards to move the object back to where</span>
|
||||
<span class="sd"> it should be.</span>
|
||||
<span class="sd"> centered at the origin will have their centers move. To avoid</span>
|
||||
<span class="sd"> this, either scale the object when it's located at the origin,</span>
|
||||
<span class="sd"> or perform a translation afterwards to move the object back to</span>
|
||||
<span class="sd"> where it should be.</span>
|
||||
|
||||
<span class="sd"> .. math::</span>
|
||||
<span class="sd"> \begin{bmatrix}x' \\ y' \\ z' \\ h'\end{bmatrix} =</span>
|
||||
@@ -543,16 +612,17 @@
|
||||
<span class="sd"> \end{bmatrix}</span>
|
||||
<span class="sd"> \begin{bmatrix}x \\ y \\ z \\ h\end{bmatrix}</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">sy</span><span class="p">:</span>
|
||||
<span class="c1"># if not sy is not suitable because 0 is also false</span>
|
||||
<span class="k">if</span> <span class="n">sy</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">sy</span> <span class="o">=</span> <span class="n">sx</span>
|
||||
<span class="n">sz</span> <span class="o">=</span> <span class="n">sx</span>
|
||||
<span class="bp">self</span><span class="p">[:]</span> <span class="o">=</span> <span class="n">matrix</span><span class="o">.</span><span class="n">s</span><span class="p">(</span><span class="n">sx</span><span class="p">,</span> <span class="n">sy</span><span class="p">,</span> <span class="n">sz</span><span class="p">)</span> <span class="o">*</span> <span class="bp">self</span>
|
||||
<span class="k">return</span> <span class="bp">self</span></div>
|
||||
|
||||
<div class="viewcode-block" id="vector.ch_cs"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.vector.ch_cs">[docs]</a> <span class="k">def</span> <span class="nf">ch_cs</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cs</span><span class="p">):</span>
|
||||
<span class="sa">r</span><span class="sd">"""Transform this vector from its defined coordinate system to a</span>
|
||||
<span class="sd"> new coordinate system, defined by the given coordinate system (u,</span>
|
||||
<span class="sd"> v and w direction vectors).</span>
|
||||
<span class="sa">r</span><span class="sd">"""Transform this vector from its defined coordinate system to</span>
|
||||
<span class="sd"> a new coordinate system, defined by the given coordinate system</span>
|
||||
<span class="sd"> (u, v and w direction vectors).</span>
|
||||
|
||||
<span class="sd"> .. math::</span>
|
||||
<span class="sd"> \begin{bmatrix}x' \\ y' \\ z' \\ h'\end{bmatrix} =</span>
|
||||
@@ -571,30 +641,32 @@
|
||||
<span class="sd">"""Use/create matrix like list of lists</span>
|
||||
<span class="sd"> """</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">"""</span>
|
||||
<span class="sd"> For index return value, for range return new vector object.</span>
|
||||
|
||||
<span class="sd"> :Example:</span>
|
||||
|
||||
<span class="sd"> >>> m = matrix([[1, 2, 3, 0], [4, 5, 6, 0], [7, 8, 9, 0], [0, 0, 0, 0]])</span>
|
||||
<span class="sd"> >>> 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"> >>> print(m[2])</span>
|
||||
<span class="sd"> [7, 8, 9, 0]</span>
|
||||
<span class="sd"> >>> print(m[:,1:3])</span>
|
||||
<span class="sd"> >>> print(m[:, 1:3])</span>
|
||||
<span class="sd"> [[2, 3], [5, 6], [8, 9], [0, 0]]</span>
|
||||
<span class="sd"> >>> print(m[0:2,1:3])</span>
|
||||
<span class="sd"> >>> print(m[0:2, 1:3])</span>
|
||||
<span class="sd"> [[2, 3], [5, 6]]</span>
|
||||
<span class="sd"> >>> print(m[::2,::2])</span>
|
||||
<span class="sd"> >>> print(m[::2, ::2])</span>
|
||||
<span class="sd"> [[1, 3], [7, 9]]</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="c1"># index: slice(stop), slice(start, stop[, step])</span>
|
||||
<span class="c1"># for e. g. m[(1,3),:] -> index = ((1, 3), slice(None, None, None))</span>
|
||||
<span class="c1"># for m[(1,3),:] -> index = ((1, 3), slice(None, None, None))</span>
|
||||
<span class="c1"># use the list.__getslice__ method and convert result to vector</span>
|
||||
<span class="k">try</span><span class="p">:</span> <span class="c1"># 2d slicing (tuple of sclices)</span>
|
||||
<span class="n">item</span> <span class="o">=</span> <span class="p">[</span><span class="n">row</span><span class="o">.</span><span class="fm">__getitem__</span><span class="p">(</span><span class="n">index</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__getitem__</span><span class="p">(</span><span class="n">index</span><span class="p">[</span><span class="mi">0</span><span class="p">])]</span>
|
||||
<span class="n">item</span> <span class="o">=</span> <span class="p">[</span><span class="n">row</span><span class="o">.</span><span class="fm">__getitem__</span><span class="p">(</span><span class="n">index</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="k">for</span>
|
||||
<span class="n">row</span> <span class="ow">in</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__getitem__</span><span class="p">(</span><span class="n">index</span><span class="p">[</span><span class="mi">0</span><span class="p">])]</span>
|
||||
<span class="k">except</span><span class="p">:</span> <span class="c1"># 1d slicing</span>
|
||||
<span class="n">item</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__getitem__</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">matrix</span><span class="p">(</span><span class="n">item</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="nb">list</span><span class="p">)</span> <span class="k">else</span> <span class="n">item</span>
|
||||
<span class="k">return</span> <span class="n">matrix</span><span class="p">(</span><span class="n">item</span><span class="p">)</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="nb">list</span><span class="p">)</span> <span class="k">else</span> <span class="n">item</span></div>
|
||||
|
||||
<div class="viewcode-block" id="matrix.rx"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.matrix.rx">[docs]</a> <span class="nd">@staticmethod</span>
|
||||
<span class="k">def</span> <span class="nf">rx</span><span class="p">(</span><span class="n">theta</span><span class="p">):</span>
|
||||
@@ -603,7 +675,7 @@
|
||||
<span class="sd"> Rotates the coordinate system of vectors</span>
|
||||
|
||||
<span class="sd"> .. math::</span>
|
||||
<span class="sd"> R_{x}(\theta) =</span>
|
||||
<span class="sd"> \mathbf{R}_{x}(\theta) =</span>
|
||||
<span class="sd"> \begin{bmatrix}</span>
|
||||
<span class="sd"> 1 & 0 & 0 & 0 \\</span>
|
||||
<span class="sd"> 0 & \cos \theta & -\sin \theta & 0 \\</span>
|
||||
@@ -626,7 +698,7 @@
|
||||
<span class="sd"> Rotates the coordinate system of vectors</span>
|
||||
|
||||
<span class="sd"> .. math::</span>
|
||||
<span class="sd"> R_{y}(\theta) =</span>
|
||||
<span class="sd"> \mathbf{R}_{y}(\theta) =</span>
|
||||
<span class="sd"> \begin{bmatrix}</span>
|
||||
<span class="sd"> \cos \theta & 0 & \sin \theta & 0 \\</span>
|
||||
<span class="sd"> 0 & 1 & 0 & 0 \\</span>
|
||||
@@ -649,7 +721,7 @@
|
||||
<span class="sd"> Rotates the coordinate system of vectors</span>
|
||||
|
||||
<span class="sd"> .. math::</span>
|
||||
<span class="sd"> R_{z}(\theta) =</span>
|
||||
<span class="sd"> \mathbf{R}_{z}(\theta) =</span>
|
||||
<span class="sd"> \begin{bmatrix}</span>
|
||||
<span class="sd"> \cos \theta & -\sin \theta & 0 & 0 \\</span>
|
||||
<span class="sd"> \sin \theta & \cos \theta & 0 & 0 \\</span>
|
||||
@@ -660,14 +732,17 @@
|
||||
<span class="sd"> :Example:</span>
|
||||
|
||||
<span class="sd"> .. math::</span>
|
||||
<span class="sd"> R_{z}(\theta) \begin{bmatrix}1 \\ 0 \\ 0 \\ 1\end{bmatrix} =</span>
|
||||
<span class="sd"> \mathbf{R}_{z}(\theta)</span>
|
||||
<span class="sd"> \begin{bmatrix}1 \\ 0 \\ 0 \\ 1\end{bmatrix}</span>
|
||||
<span class="sd"> &=</span>
|
||||
<span class="sd"> \begin{bmatrix}</span>
|
||||
<span class="sd"> \cos 90° & -\sin 90° & 0 & 0 \\</span>
|
||||
<span class="sd"> \sin 90° & \cos 90° & 0 & 0 \\</span>
|
||||
<span class="sd"> 0 & 0 & 1 & 0 \\</span>
|
||||
<span class="sd"> 0 & 0 & 0 & 1</span>
|
||||
<span class="sd"> \end{bmatrix}</span>
|
||||
<span class="sd"> \begin{bmatrix}1 \\ 0 \\ 0 \\ 1\end{bmatrix} =</span>
|
||||
<span class="sd"> \begin{bmatrix}1 \\ 0 \\ 0 \\ 1\end{bmatrix} \\</span>
|
||||
<span class="sd"> &=</span>
|
||||
<span class="sd"> \begin{bmatrix}</span>
|
||||
<span class="sd"> 0 & -1 & 0 & 0 \\</span>
|
||||
<span class="sd"> 1 & 0 & 0 & 0 \\</span>
|
||||
@@ -690,7 +765,7 @@
|
||||
<span class="sa">r</span><span class="sd">"""Translation matrix</span>
|
||||
|
||||
<span class="sd"> .. math::</span>
|
||||
<span class="sd"> T =</span>
|
||||
<span class="sd"> \mathbf{T} =</span>
|
||||
<span class="sd"> \begin{bmatrix}</span>
|
||||
<span class="sd"> 1 & 0 & 0 & t_x \\</span>
|
||||
<span class="sd"> 0 & 1 & 0 & t_y \\</span>
|
||||
@@ -710,13 +785,13 @@
|
||||
|
||||
<span class="sd"> uniform scaling if sx=sy=sz=s.</span>
|
||||
<span class="sd"> Note that scaling happens around the origin, so objects not</span>
|
||||
<span class="sd"> centered at the origin will have their centers move. To avoid this,</span>
|
||||
<span class="sd"> either scale the object when it's located at the origin, or</span>
|
||||
<span class="sd"> perform a translation afterwards to move the object back to where</span>
|
||||
<span class="sd"> it should be.</span>
|
||||
<span class="sd"> centered at the origin will have their centers move. To avoid</span>
|
||||
<span class="sd"> this, either scale the object when it's located at the origin,</span>
|
||||
<span class="sd"> or perform a translation afterwards to move the object back to</span>
|
||||
<span class="sd"> where it should be.</span>
|
||||
|
||||
<span class="sd"> .. math::</span>
|
||||
<span class="sd"> S =</span>
|
||||
<span class="sd"> \mathbf{S} =</span>
|
||||
<span class="sd"> \begin{bmatrix}</span>
|
||||
<span class="sd"> s_x & 0 & 0 & 0 \\</span>
|
||||
<span class="sd"> 0 & s_y & 0 & 0 \\</span>
|
||||
@@ -724,7 +799,8 @@
|
||||
<span class="sd"> 0 & 0 & 0 & 1</span>
|
||||
<span class="sd"> \end{bmatrix}</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">sy</span><span class="p">:</span>
|
||||
<span class="c1"># if not sy is not suitable because 0 is also false</span>
|
||||
<span class="k">if</span> <span class="n">sy</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">sy</span> <span class="o">=</span> <span class="n">sx</span>
|
||||
<span class="n">sz</span> <span class="o">=</span> <span class="n">sx</span>
|
||||
<span class="n">T</span> <span class="o">=</span> <span class="n">matrix</span><span class="p">([[</span><span class="n">sx</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span>
|
||||
@@ -733,11 +809,9 @@
|
||||
<span class="p">[</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">]])</span>
|
||||
<span class="k">return</span> <span class="n">T</span></div>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__mul__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="matrix.__mul__"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.matrix.__mul__">[docs]</a> <span class="k">def</span> <span class="fm">__mul__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
|
||||
<span class="sa">r</span><span class="sd">"""Scalar multiplication, dot product (inner product) or</span>
|
||||
<span class="sd"> matrix-vector multiplication.</span>
|
||||
|
||||
<span class="sd"> a * b (new object)</span>
|
||||
<span class="sd"> matrix-vector multiplication. (new object)</span>
|
||||
|
||||
<span class="sd"> :type other: scalar, vector (or 1d list), matrix (or 2d list)</span>
|
||||
|
||||
@@ -747,21 +821,25 @@
|
||||
<span class="sd"> \mathbf{C} &= \mathbf{A} \cdot \mathbf{B}</span>
|
||||
|
||||
<span class="sd"> .. note::</span>
|
||||
<span class="sd"> No size checking will be conducted, therefore no exceptions for</span>
|
||||
<span class="sd"> wrong usage (result will be nonsense).</span>
|
||||
<span class="sd"> No size checking will be conducted, therefore no exceptions</span>
|
||||
<span class="sd"> for wrong usage (result will be nonsense).</span>
|
||||
|
||||
<span class="sd"> :Example:</span>
|
||||
|
||||
<span class="sd"> >>> m = matrix([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [0, 0, 0, 1]]) * 5</span>
|
||||
<span class="sd"> >>> 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"> >>> 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"> >>> m = matrix([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [0, 0, 0, 1]]) * 5.</span>
|
||||
<span class="sd"> >>> 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"> >>> 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"> >>> v = matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) * vector([12, 12, 13])</span>
|
||||
<span class="sd"> >>> v = matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) * \</span>
|
||||
<span class="sd"> vector([12, 12, 13])</span>
|
||||
<span class="sd"> >>> print(v)</span>
|
||||
<span class="sd"> [75, 186, 297]</span>
|
||||
<span class="sd"> >>> 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"> >>> 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"> >>> print(m)</span>
|
||||
<span class="sd"> [[91, 96, 102], [220, 231, 246], [349, 366, 390]]</span>
|
||||
|
||||
@@ -769,18 +847,18 @@
|
||||
<span class="sd"> :meth:`__rmul__`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span> <span class="c1"># matrix * matrix</span>
|
||||
<span class="k">return</span> <span class="n">matrix</span><span class="p">([[</span><span class="nb">sum</span><span class="p">(</span><span class="n">c</span><span class="o">*</span><span class="n">d</span> <span class="k">for</span> <span class="n">c</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">a_row</span><span class="p">,</span> <span class="n">b_col</span><span class="p">))</span> <span class="k">for</span> <span class="n">b_col</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="n">other</span><span class="p">)]</span> <span class="k">for</span> <span class="n">a_row</span> <span class="ow">in</span> <span class="bp">self</span><span class="p">])</span>
|
||||
<span class="k">return</span> <span class="n">matrix</span><span class="p">([[</span><span class="nb">sum</span><span class="p">(</span><span class="n">c</span><span class="o">*</span><span class="n">d</span> <span class="k">for</span> <span class="n">c</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">a_row</span><span class="p">,</span> <span class="n">b_col</span><span class="p">))</span> <span class="k">for</span>
|
||||
<span class="n">b_col</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="n">other</span><span class="p">)]</span> <span class="k">for</span> <span class="n">a_row</span> <span class="ow">in</span> <span class="bp">self</span><span class="p">])</span>
|
||||
<span class="k">except</span><span class="p">:</span>
|
||||
<span class="k">try</span><span class="p">:</span> <span class="c1"># matrix * vector</span>
|
||||
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="nb">sum</span><span class="p">(</span><span class="n">c</span><span class="o">*</span><span class="n">d</span> <span class="k">for</span> <span class="n">c</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">a_row</span><span class="p">,</span> <span class="n">other</span><span class="p">))</span> <span class="k">for</span> <span class="n">a_row</span> <span class="ow">in</span> <span class="bp">self</span><span class="p">])</span>
|
||||
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="nb">sum</span><span class="p">(</span><span class="n">c</span><span class="o">*</span><span class="n">d</span> <span class="k">for</span> <span class="n">c</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">a_row</span><span class="p">,</span> <span class="n">other</span><span class="p">))</span> <span class="k">for</span>
|
||||
<span class="n">a_row</span> <span class="ow">in</span> <span class="bp">self</span><span class="p">])</span>
|
||||
<span class="k">except</span><span class="p">:</span> <span class="c1"># matrix * scalar</span>
|
||||
<span class="k">return</span> <span class="n">matrix</span><span class="p">([[</span><span class="n">a</span><span class="o">*</span><span class="n">other</span> <span class="k">for</span> <span class="n">a</span> <span class="ow">in</span> <span class="n">a_row</span><span class="p">]</span> <span class="k">for</span> <span class="n">a_row</span> <span class="ow">in</span> <span class="bp">self</span><span class="p">])</span>
|
||||
<span class="k">return</span> <span class="n">matrix</span><span class="p">([[</span><span class="n">a</span><span class="o">*</span><span class="n">other</span> <span class="k">for</span> <span class="n">a</span> <span class="ow">in</span> <span class="n">a_row</span><span class="p">]</span> <span class="k">for</span> <span class="n">a_row</span> <span class="ow">in</span> <span class="bp">self</span><span class="p">])</span></div>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__rmul__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="matrix.__rmul__"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.matrix.__rmul__">[docs]</a> <span class="k">def</span> <span class="fm">__rmul__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
|
||||
<span class="sa">r</span><span class="sd">"""Scalar multiplication, dot product (inner product) or</span>
|
||||
<span class="sd"> vector-matrix multiplication.</span>
|
||||
|
||||
<span class="sd"> a * b (new object)</span>
|
||||
<span class="sd"> vector-matrix multiplication. (new object)</span>
|
||||
|
||||
<span class="sd"> :type other: scalar (or 1d list and 2d list)</span>
|
||||
|
||||
@@ -790,35 +868,38 @@
|
||||
<span class="sd"> \mathbf{C} &= \mathbf{A} \cdot \mathbf{B}</span>
|
||||
|
||||
<span class="sd"> .. note::</span>
|
||||
<span class="sd"> No size checking will be conducted, therefore no exceptions for</span>
|
||||
<span class="sd"> wrong usage (result will be nonsense).</span>
|
||||
<span class="sd"> No size checking will be conducted, therefore no exceptions</span>
|
||||
<span class="sd"> for wrong usage (result will be nonsense).</span>
|
||||
|
||||
<span class="sd"> :Example:</span>
|
||||
|
||||
<span class="sd"> >>> m = 5 * matrix([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [0, 0, 0, 1]]) * 5</span>
|
||||
<span class="sd"> >>> 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"> >>> 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"> >>> m = 5. * matrix([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [0, 0, 0, 1]])</span>
|
||||
<span class="sd"> >>> 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"> >>> print(m)</span>
|
||||
<span class="sd"> [[5.0, 10.0, 15.0, 20.0], [25.0, 30.0, 35.0, 40.0], [45.0, 50.0, 55.0, 60.0], [0.0, 0.0, 0.0, 5.0]]</span>
|
||||
|
||||
<span class="sd"> .. seealso::</span>
|
||||
<span class="sd"> :meth:`__mul__`</span>
|
||||
<span class="sd"> :meth:`vector.__mul__` for vector * matrix</span>
|
||||
<span class="sd"> :meth:`__mul__` and :meth:`vector.__mul__` for vector * matrix</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span> <span class="c1"># 2d list * matrix (matrix * matrix see matrix.__mul__)</span>
|
||||
<span class="k">return</span> <span class="n">matrix</span><span class="p">([[</span><span class="nb">sum</span><span class="p">(</span><span class="n">c</span><span class="o">*</span><span class="n">d</span> <span class="k">for</span> <span class="n">c</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">a_row</span><span class="p">,</span> <span class="n">b_col</span><span class="p">))</span> <span class="k">for</span> <span class="n">b_col</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="bp">self</span><span class="p">)]</span> <span class="k">for</span> <span class="n">a_row</span> <span class="ow">in</span> <span class="n">other</span><span class="p">])</span>
|
||||
<span class="k">return</span> <span class="n">matrix</span><span class="p">([[</span><span class="nb">sum</span><span class="p">(</span><span class="n">c</span><span class="o">*</span><span class="n">d</span> <span class="k">for</span> <span class="n">c</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">a_row</span><span class="p">,</span> <span class="n">b_col</span><span class="p">))</span> <span class="k">for</span>
|
||||
<span class="n">b_col</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="bp">self</span><span class="p">)]</span> <span class="k">for</span> <span class="n">a_row</span> <span class="ow">in</span> <span class="n">other</span><span class="p">])</span>
|
||||
<span class="k">except</span><span class="p">:</span>
|
||||
<span class="k">try</span><span class="p">:</span> <span class="c1"># 1d list * matrix (vector * matrix see vector.__mul__)</span>
|
||||
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="nb">sum</span><span class="p">(</span><span class="n">c</span><span class="o">*</span><span class="n">d</span> <span class="k">for</span> <span class="n">c</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">b_col</span><span class="p">))</span> <span class="k">for</span> <span class="n">b_col</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="bp">self</span><span class="p">)])</span>
|
||||
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="nb">sum</span><span class="p">(</span><span class="n">c</span><span class="o">*</span><span class="n">d</span> <span class="k">for</span> <span class="n">c</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">b_col</span><span class="p">))</span> <span class="k">for</span>
|
||||
<span class="n">b_col</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="bp">self</span><span class="p">)])</span>
|
||||
<span class="k">except</span><span class="p">:</span> <span class="c1"># scalar * vector</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">*</span><span class="n">other</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">*</span><span class="n">other</span></div>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="nb">str</span><span class="p">([</span><span class="o">*</span><span class="bp">self</span><span class="p">])</span>
|
||||
<div class="viewcode-block" id="matrix.__str__"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.matrix.__str__">[docs]</a> <span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="nb">str</span><span class="p">([</span><span class="o">*</span><span class="bp">self</span><span class="p">])</span></div>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="s2">"matrix("</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">")"</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">"matrix("</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">")"</span></div>
|
||||
|
||||
<div class="viewcode-block" id="matrix.rotate_x"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.matrix.rotate_x">[docs]</a> <span class="k">def</span> <span class="nf">rotate_x</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">theta</span><span class="p">):</span>
|
||||
<span class="sa">r</span><span class="sd">"""Rotation about the x dirction.</span>
|
||||
@@ -929,10 +1010,10 @@
|
||||
|
||||
<span class="sd"> uniform scaling if sx=sy=sz=s.</span>
|
||||
<span class="sd"> Note that scaling happens around the origin, so objects not</span>
|
||||
<span class="sd"> centered at the origin will have their centers move. To avoid this,</span>
|
||||
<span class="sd"> either scale the object when it's located at the origin, or</span>
|
||||
<span class="sd"> perform a translation afterwards to move the object back to where</span>
|
||||
<span class="sd"> it should be.</span>
|
||||
<span class="sd"> centered at the origin will have their centers move. To avoid</span>
|
||||
<span class="sd"> this, either scale the object when it's located at the origin,</span>
|
||||
<span class="sd"> or perform a translation afterwards to move the object back to</span>
|
||||
<span class="sd"> where it should be.</span>
|
||||
|
||||
<span class="sd"> .. math::</span>
|
||||
<span class="sd"> \begin{bmatrix}</span>
|
||||
@@ -954,7 +1035,8 @@
|
||||
<span class="sd"> 0 & 0 & 0 & h</span>
|
||||
<span class="sd"> \end{bmatrix}</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">sy</span><span class="p">:</span>
|
||||
<span class="c1"># if not sy is not suitable because 0 is also false</span>
|
||||
<span class="k">if</span> <span class="n">sy</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">sy</span> <span class="o">=</span> <span class="n">sx</span>
|
||||
<span class="n">sz</span> <span class="o">=</span> <span class="n">sx</span>
|
||||
<span class="bp">self</span><span class="p">[:]</span> <span class="o">=</span> <span class="n">matrix</span><span class="o">.</span><span class="n">s</span><span class="p">(</span><span class="n">sx</span><span class="p">,</span> <span class="n">sy</span><span class="p">,</span> <span class="n">sz</span><span class="p">)</span> <span class="o">*</span> <span class="bp">self</span>
|
||||
|
||||
7
docs/build/html/_sources/pylib.geometry_plot.rst.txt
vendored
Normal file
7
docs/build/html/_sources/pylib.geometry_plot.rst.txt
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
pylib.geometry\_plot module
|
||||
===========================
|
||||
|
||||
.. automodule:: pylib.geometry_plot
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
7
docs/build/html/_sources/pylib.geometry_plot_pylab.rst.txt
vendored
Normal file
7
docs/build/html/_sources/pylib.geometry_plot_pylab.rst.txt
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
pylib.geometry\_plot\_pylab module
|
||||
==================================
|
||||
|
||||
.. automodule:: pylib.geometry_plot_pylab
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
2
docs/build/html/_sources/pylib.rst.txt
vendored
2
docs/build/html/_sources/pylib.rst.txt
vendored
@@ -25,5 +25,7 @@ Submodules
|
||||
pylib.geometry
|
||||
pylib.geometry2d
|
||||
pylib.geometry2d_plot
|
||||
pylib.geometry_plot
|
||||
pylib.geometry_plot_pylab
|
||||
pylib.mathematics
|
||||
pylib.time_of_day
|
||||
|
||||
4
docs/build/html/_static/alabaster.css
vendored
4
docs/build/html/_static/alabaster.css
vendored
@@ -295,8 +295,8 @@ div.important {
|
||||
}
|
||||
|
||||
div.note {
|
||||
background-color: #EEE;
|
||||
border: 1px solid #CCC;
|
||||
background-color: #25272c;
|
||||
border: 1px solid #2C2C2C;
|
||||
}
|
||||
|
||||
div.tip {
|
||||
|
||||
6
docs/build/html/_static/custom.css
vendored
6
docs/build/html/_static/custom.css
vendored
@@ -7,7 +7,7 @@ table.indextable tr.cap {
|
||||
}
|
||||
/* move doc link a bit up */
|
||||
.viewcode-back {
|
||||
float: right;
|
||||
position: relative;
|
||||
top: -1.5em;
|
||||
float: right;
|
||||
position: relative;
|
||||
top: -1.5em;
|
||||
}
|
||||
|
||||
137
docs/build/html/genindex.html
vendored
137
docs/build/html/genindex.html
vendored
@@ -37,7 +37,8 @@
|
||||
<h1 id="index">Index</h1>
|
||||
|
||||
<div class="genindex-jumpbox">
|
||||
<a href="#A"><strong>A</strong></a>
|
||||
<a href="#_"><strong>_</strong></a>
|
||||
| <a href="#A"><strong>A</strong></a>
|
||||
| <a href="#B"><strong>B</strong></a>
|
||||
| <a href="#C"><strong>C</strong></a>
|
||||
| <a href="#D"><strong>D</strong></a>
|
||||
@@ -62,6 +63,74 @@
|
||||
| <a href="#Z"><strong>Z</strong></a>
|
||||
|
||||
</div>
|
||||
<h2 id="_">_</h2>
|
||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__abs__">__abs__() (vector method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__add__">__add__() (vector method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__ge__">__ge__() (vector method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix.__getitem__">__getitem__() (matrix method)</a>
|
||||
|
||||
<ul>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__getitem__">(vector method)</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__gt__">__gt__() (vector method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__iadd__">__iadd__() (vector method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Wireframe.__iter__">__iter__() (Wireframe method)</a>
|
||||
|
||||
<ul>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.World.__iter__">(World method)</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__le__">__le__() (vector method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__lt__">__lt__() (vector method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__matmul__">__matmul__() (vector method)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix.__mul__">__mul__() (matrix method)</a>
|
||||
|
||||
<ul>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__mul__">(vector method)</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__neg__">__neg__() (vector method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__pos__">__pos__() (vector method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix.__repr__">__repr__() (matrix method)</a>
|
||||
|
||||
<ul>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__repr__">(vector method)</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix.__rmul__">__rmul__() (matrix method)</a>
|
||||
|
||||
<ul>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__rmul__">(vector method)</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix.__str__">__str__() (matrix method)</a>
|
||||
|
||||
<ul>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__str__">(vector method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Wireframe.__str__">(Wireframe method)</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__sub__">__sub__() (vector method)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
</tr></table>
|
||||
|
||||
<h2 id="A">A</h2>
|
||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
@@ -93,22 +162,26 @@
|
||||
<h2 id="C">C</h2>
|
||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.geometry_plot_pylab.html#pylib.geometry_plot_pylab.cad_wireframe">cad_wireframe() (in module pylib.geometry_plot_pylab)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.World.center">center() (World method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.ch_cs">ch_cs() (vector method)</a>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Solid.ch_cs">ch_cs() (Solid method)</a>
|
||||
|
||||
<ul>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.ch_cs">(vector method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Wireframe.ch_cs">(Wireframe method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.World.ch_cs">(World method)</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Circle">Circle (class in pylib.geometry)</a>
|
||||
</li>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.conjugate">conjugate() (vector static method)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.conjugate">conjugate() (vector static method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.function.html#pylib.function.cosine_wave">cosine_wave() (in module pylib.function)</a>
|
||||
</li>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.cross">cross() (vector static method)</a>
|
||||
@@ -205,11 +278,15 @@
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#module-geometry">geometry (module)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.geometry2d.html#module-geometry2d">geometry2d (module)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.geometry2d_plot.html#module-geometry2d_plot">geometry2d_plot (module)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry_plot.html#module-geometry_plot">geometry_plot (module)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry_plot_pylab.html#module-geometry_plot_pylab">geometry_plot_pylab (module)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.CS.get_coordinates">get_coordinates() (CS method)</a>
|
||||
</li>
|
||||
@@ -221,12 +298,14 @@
|
||||
<h2 id="H">H</h2>
|
||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.drawblock.html#pylib.drawblock.histogram">histogram() (in module pylib.drawblock)</a>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Hexahedron">Hexahedron (class in pylib.geometry)</a>
|
||||
</li>
|
||||
<li><a href="pylib.time_of_day.html#pylib.time_of_day.hours">hours() (in module pylib.time_of_day)</a>
|
||||
<li><a href="pylib.drawblock.html#pylib.drawblock.histogram">histogram() (in module pylib.drawblock)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.time_of_day.html#pylib.time_of_day.hours">hours() (in module pylib.time_of_day)</a>
|
||||
</li>
|
||||
<li><a href="pylib.time_of_day.html#pylib.time_of_day.hours_norm">hours_norm() (in module pylib.time_of_day)</a>
|
||||
</li>
|
||||
<li><a href="pylib.function.html#pylib.function.hypotrochoid">hypotrochoid() (in module pylib.function)</a>
|
||||
@@ -241,13 +320,15 @@
|
||||
</li>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.im">im() (vector static method)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.time_of_day.html#pylib.time_of_day.in_seconds">in_seconds() (in module pylib.time_of_day)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.numerical.integration.html#module-integration">integration (module)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry2d.html#pylib.geometry2d.interpolate_hermite">interpolate_hermite() (in module pylib.geometry2d)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data.html#pylib.data.issequence">issequence() (in module pylib.data)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
</tr></table>
|
||||
@@ -324,12 +405,16 @@
|
||||
<li><a href="pylib.geometry2d_plot.html#pylib.geometry2d_plot.plot_cubic_lines">plot_cubic_lines() (in module pylib.geometry2d_plot)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry2d_plot.html#pylib.geometry2d_plot.plot_lines">plot_lines() (in module pylib.geometry2d_plot)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry_plot_pylab.html#pylib.geometry_plot_pylab.plot_post">plot_post() (in module pylib.geometry_plot_pylab)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Point">Point (class in pylib.geometry)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Wireframe.points">points() (Wireframe method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Polygon">Polygon (class in pylib.geometry)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Point.projection">projection() (Point method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.html#module-pylib">pylib (module)</a>
|
||||
</li>
|
||||
@@ -348,6 +433,10 @@
|
||||
<li><a href="pylib.geometry2d.html#module-pylib.geometry2d">pylib.geometry2d (module)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry2d_plot.html#module-pylib.geometry2d_plot">pylib.geometry2d_plot (module)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry_plot.html#module-pylib.geometry_plot">pylib.geometry_plot (module)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry_plot_pylab.html#module-pylib.geometry_plot_pylab">pylib.geometry_plot_pylab (module)</a>
|
||||
</li>
|
||||
<li><a href="pylib.mathematics.html#module-pylib.mathematics">pylib.mathematics (module)</a>
|
||||
</li>
|
||||
@@ -432,6 +521,8 @@
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix.scale">scale() (matrix method)</a>
|
||||
|
||||
<ul>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Solid.scale">(Solid method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.scale">(vector method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Wireframe.scale">(Wireframe method)</a>
|
||||
@@ -446,8 +537,12 @@
|
||||
<li><a href="pylib.time_of_day.html#pylib.time_of_day.seconds_norm">seconds_norm() (in module pylib.time_of_day)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data.html#pylib.data.seq">seq() (in module pylib.data)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry_plot_pylab.html#pylib.geometry_plot_pylab.set_aspect_equal">set_aspect_equal() (in module pylib.geometry_plot_pylab)</a>
|
||||
</li>
|
||||
<li><a href="pylib.function.html#pylib.function.sine_wave">sine_wave() (in module pylib.function)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Solid">Solid (class in pylib.geometry)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.World.space_diagonal">space_diagonal() (World method)</a>
|
||||
</li>
|
||||
@@ -475,6 +570,8 @@
|
||||
|
||||
<ul>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix.translate">(matrix method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Solid.translate">(Solid method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.translate">(vector method)</a>
|
||||
</li>
|
||||
@@ -513,8 +610,20 @@
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Wireframe">Wireframe (class in pylib.geometry)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry_plot_pylab.html#pylib.geometry_plot_pylab.wireframe3d">wireframe3d() (in module pylib.geometry_plot_pylab)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Solid.wireframes">wireframes() (Solid method)</a>
|
||||
|
||||
<ul>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.World.wireframes">(World method)</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
</ul></td>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.World.wireframes_xy">wireframes_xy() (World method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.World.wireframes_xyz">wireframes_xyz() (World method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.World">World (class in pylib.geometry)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data.html#pylib.data.write">write() (in module pylib.data)</a>
|
||||
@@ -531,12 +640,10 @@
|
||||
</li>
|
||||
</ul></td>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.xyz">xyz() (vector method)</a>
|
||||
|
||||
<ul>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Wireframe.xyz">(Wireframe method)</a>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Wireframe.xy">xy() (Wireframe method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Wireframe.xyz">xyz() (Wireframe method)</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
</ul></td>
|
||||
</tr></table>
|
||||
|
||||
|
||||
7
docs/build/html/modules.html
vendored
7
docs/build/html/modules.html
vendored
@@ -51,9 +51,14 @@
|
||||
<li class="toctree-l3"><a class="reference internal" href="pylib.date.html">pylib.date module</a></li>
|
||||
<li class="toctree-l3"><a class="reference internal" href="pylib.drawblock.html">pylib.drawblock module</a></li>
|
||||
<li class="toctree-l3"><a class="reference internal" href="pylib.function.html">pylib.function module</a></li>
|
||||
<li class="toctree-l3"><a class="reference internal" href="pylib.geometry.html">pylib.geometry module</a></li>
|
||||
<li class="toctree-l3"><a class="reference internal" href="pylib.geometry.html">pylib.geometry module</a><ul>
|
||||
<li class="toctree-l4"><a class="reference internal" href="pylib.geometry.html#affine-transforms">Affine transforms</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l3"><a class="reference internal" href="pylib.geometry2d.html">pylib.geometry2d module</a></li>
|
||||
<li class="toctree-l3"><a class="reference internal" href="pylib.geometry2d_plot.html">pylib.geometry2d_plot module</a></li>
|
||||
<li class="toctree-l3"><a class="reference internal" href="pylib.geometry_plot.html">pylib.geometry_plot module</a></li>
|
||||
<li class="toctree-l3"><a class="reference internal" href="pylib.geometry_plot_pylab.html">pylib.geometry_plot_pylab module</a></li>
|
||||
<li class="toctree-l3"><a class="reference internal" href="pylib.mathematics.html">pylib.mathematics module</a></li>
|
||||
<li class="toctree-l3"><a class="reference internal" href="pylib.time_of_day.html">pylib.time_of_day module</a></li>
|
||||
</ul>
|
||||
|
||||
BIN
docs/build/html/objects.inv
vendored
BIN
docs/build/html/objects.inv
vendored
Binary file not shown.
20
docs/build/html/py-modindex.html
vendored
20
docs/build/html/py-modindex.html
vendored
@@ -99,6 +99,16 @@
|
||||
<td>
|
||||
<a href="pylib.geometry2d_plot.html#module-geometry2d_plot"><code class="xref">geometry2d_plot</code></a> <em>(*nix, Windows)</em></td><td>
|
||||
<em>2D geometry plotting.</em></td></tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>
|
||||
<a href="pylib.geometry_plot.html#module-geometry_plot"><code class="xref">geometry_plot</code></a> <em>(*nix, Windows)</em></td><td>
|
||||
<em>Geometry plotting.</em></td></tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>
|
||||
<a href="pylib.geometry_plot_pylab.html#module-geometry_plot_pylab"><code class="xref">geometry_plot_pylab</code></a> <em>(*nix, Windows)</em></td><td>
|
||||
<em>Geometry plotting (pylab).</em></td></tr>
|
||||
<tr class="pcap"><td></td><td> </td><td></td></tr>
|
||||
<tr class="cap" id="cap-i"><td></td><td>
|
||||
<strong>i</strong></td><td></td></tr>
|
||||
@@ -172,6 +182,16 @@
|
||||
<td>   
|
||||
<a href="pylib.geometry2d_plot.html#module-pylib.geometry2d_plot"><code class="xref">pylib.geometry2d_plot</code></a></td><td>
|
||||
<em></em></td></tr>
|
||||
<tr class="cg-1">
|
||||
<td></td>
|
||||
<td>   
|
||||
<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>   
|
||||
<a href="pylib.geometry_plot_pylab.html#module-pylib.geometry_plot_pylab"><code class="xref">pylib.geometry_plot_pylab</code></a></td><td>
|
||||
<em></em></td></tr>
|
||||
<tr class="cg-1">
|
||||
<td></td>
|
||||
<td>   
|
||||
|
||||
33
docs/build/html/pylib.data.html
vendored
33
docs/build/html/pylib.data.html
vendored
@@ -83,6 +83,39 @@ array. m = k / n</p>
|
||||
</dl>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="function">
|
||||
<dt id="pylib.data.issequence">
|
||||
<code class="sig-name descname">issequence</code><span class="sig-paren">(</span><em class="sig-param">obj</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data.html#issequence"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data.issequence" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>True for tuple, list, str
|
||||
False for int, dict, set</p>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Example</dt>
|
||||
<dd class="field-odd"><p></p></dd>
|
||||
</dl>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">issequence</span><span class="p">(())</span>
|
||||
<span class="go">True</span>
|
||||
<span class="gp">>>> </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">>>> </span><span class="n">issequence</span><span class="p">([])</span>
|
||||
<span class="go">True</span>
|
||||
<span class="gp">>>> </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">>>> </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">>>> </span><span class="n">issequence</span><span class="p">(</span><span class="s1">''</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">>>> </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">>>> </span><span class="n">issequence</span><span class="p">({})</span>
|
||||
<span class="go">False</span>
|
||||
<span class="gp">>>> </span><span class="n">issequence</span><span class="p">(</span><span class="nb">set</span><span class="p">())</span>
|
||||
<span class="go">False</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="function">
|
||||
<dt id="pylib.data.load">
|
||||
<code class="sig-name descname">load</code><span class="sig-paren">(</span><em class="sig-param">file_name</em>, <em class="sig-param">default=None</em>, <em class="sig-param">verbose=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data.html#load"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data.load" title="Permalink to this definition">¶</a></dt>
|
||||
|
||||
4
docs/build/html/pylib.function.html
vendored
4
docs/build/html/pylib.function.html
vendored
@@ -172,7 +172,7 @@ y(\theta) = (R - r)\sin\theta - d\sin\left(\frac{R-r}{r}\theta\right) \\
|
||||
</div>
|
||||
<div class="admonition seealso">
|
||||
<p class="admonition-title">See also</p>
|
||||
<p><code class="xref py py-meth docutils literal notranslate"><span class="pre">mathematics.lcm()</span></code></p>
|
||||
<p><a class="reference internal" href="pylib.mathematics.html#pylib.mathematics.lcm" title="pylib.mathematics.lcm"><code class="xref py py-meth docutils literal notranslate"><span class="pre">pylib.mathematics.lcm()</span></code></a></p>
|
||||
</div>
|
||||
</dd></dl>
|
||||
|
||||
@@ -359,7 +359,7 @@ Example of 3 columns and 3 rows (upside down view of ‘normal’ braille/drawil
|
||||
</dl>
|
||||
<div class="admonition seealso">
|
||||
<p class="admonition-title">See also</p>
|
||||
<p><a class="reference internal" href="#pylib.function.transformation" title="pylib.function.transformation"><code class="xref py py-meth docutils literal notranslate"><span class="pre">pylib.function.transformation()</span></code></a></p>
|
||||
<p><a class="reference internal" href="#pylib.function.transformation" title="pylib.function.transformation"><code class="xref py py-meth docutils literal notranslate"><span class="pre">transformation()</span></code></a></p>
|
||||
</div>
|
||||
</dd></dl>
|
||||
|
||||
|
||||
104
docs/build/html/pylib.geometry.html
vendored
104
docs/build/html/pylib.geometry.html
vendored
@@ -36,16 +36,23 @@
|
||||
|
||||
<div class="section" id="module-pylib.geometry">
|
||||
<span id="pylib-geometry-module"></span><h1>pylib.geometry module<a class="headerlink" href="#module-pylib.geometry" title="Permalink to this headline">¶</a></h1>
|
||||
<p>2D geometry objects.</p>
|
||||
<p>Geometry objects.</p>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Date</dt>
|
||||
<dd class="field-odd"><p>2019-12-21</p>
|
||||
</dd>
|
||||
</dl>
|
||||
<span class="target" id="module-geometry"></span><dl class="class">
|
||||
<span class="target" id="module-geometry"></span><div class="section" id="affine-transforms">
|
||||
<h2>Affine transforms<a class="headerlink" href="#affine-transforms" title="Permalink to this headline">¶</a></h2>
|
||||
<p>Functions in augmented space, in homogenous coordinates.
|
||||
Points are augment to 4 dimensions, by adding a dummy coordinate.
|
||||
For points the dummy coordinate is always normalized to 1.
|
||||
With homogenous coordinates translation of points is repesentable
|
||||
as a linear transformation.</p>
|
||||
<dl class="class">
|
||||
<dt id="pylib.geometry.CS">
|
||||
<em class="property">class </em><code class="sig-name descname">CS</code><span class="sig-paren">(</span><em class="sig-param">x=[1, 0, 0], y=[0, 1, 0], z=[0, 0, 1]</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#CS"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.CS" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">mathematics.matrix</span></code></p>
|
||||
<dd><p>Bases: <a class="reference internal" href="pylib.mathematics.html#pylib.mathematics.matrix" title="pylib.mathematics.matrix"><code class="xref py py-class docutils literal notranslate"><span class="pre">pylib.mathematics.matrix</span></code></a></p>
|
||||
<p>Coordinate system</p>
|
||||
<dl class="method">
|
||||
<dt id="pylib.geometry.CS.get_coordinates">
|
||||
@@ -85,13 +92,20 @@
|
||||
<dl class="class">
|
||||
<dt id="pylib.geometry.Direction">
|
||||
<em class="property">class </em><code class="sig-name descname">Direction</code><span class="sig-paren">(</span><em class="sig-param">x=1</em>, <em class="sig-param">y=0</em>, <em class="sig-param">z=0</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Direction"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Direction" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">mathematics.vector</span></code></p>
|
||||
<dd><p>Bases: <a class="reference internal" href="pylib.mathematics.html#pylib.mathematics.vector" title="pylib.mathematics.vector"><code class="xref py py-class docutils literal notranslate"><span class="pre">pylib.mathematics.vector</span></code></a></p>
|
||||
<p>Direction in local coordinate system</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="class">
|
||||
<dt id="pylib.geometry.Hexahedron">
|
||||
<em class="property">class </em><code class="sig-name descname">Hexahedron</code><span class="sig-paren">(</span><em class="sig-param">point1=vector([-1</em>, <em class="sig-param">-1</em>, <em class="sig-param">-1</em>, <em class="sig-param">1])</em>, <em class="sig-param">point2=vector([1</em>, <em class="sig-param">-1</em>, <em class="sig-param">-1</em>, <em class="sig-param">1])</em>, <em class="sig-param">point3=vector([1</em>, <em class="sig-param">1</em>, <em class="sig-param">-1</em>, <em class="sig-param">1])</em>, <em class="sig-param">point4=vector([-1</em>, <em class="sig-param">1</em>, <em class="sig-param">-1</em>, <em class="sig-param">1])</em>, <em class="sig-param">point5=vector([-1</em>, <em class="sig-param">-1</em>, <em class="sig-param">1</em>, <em class="sig-param">1])</em>, <em class="sig-param">point6=vector([1</em>, <em class="sig-param">-1</em>, <em class="sig-param">1</em>, <em class="sig-param">1])</em>, <em class="sig-param">point7=vector([1</em>, <em class="sig-param">1</em>, <em class="sig-param">1</em>, <em class="sig-param">1])</em>, <em class="sig-param">point8=vector([-1</em>, <em class="sig-param">1</em>, <em class="sig-param">1</em>, <em class="sig-param">1])</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Hexahedron"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Hexahedron" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Bases: <a class="reference internal" href="#pylib.geometry.Solid" title="pylib.geometry.Solid"><code class="xref py py-class docutils literal notranslate"><span class="pre">pylib.geometry.Solid</span></code></a></p>
|
||||
<p>Line a open wireframe object in local coordinate system</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="class">
|
||||
<dt id="pylib.geometry.Line">
|
||||
<em class="property">class </em><code class="sig-name descname">Line</code><span class="sig-paren">(</span><em class="sig-param">point1=vector([-1</em>, <em class="sig-param">0</em>, <em class="sig-param">0])</em>, <em class="sig-param">point2=vector([1</em>, <em class="sig-param">0</em>, <em class="sig-param">0])</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Line"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Line" title="Permalink to this definition">¶</a></dt>
|
||||
<em class="property">class </em><code class="sig-name descname">Line</code><span class="sig-paren">(</span><em class="sig-param">point1=vector([-1</em>, <em class="sig-param">0</em>, <em class="sig-param">0</em>, <em class="sig-param">1])</em>, <em class="sig-param">point2=vector([1</em>, <em class="sig-param">0</em>, <em class="sig-param">0</em>, <em class="sig-param">1])</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Line"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Line" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Bases: <a class="reference internal" href="#pylib.geometry.Wireframe" title="pylib.geometry.Wireframe"><code class="xref py py-class docutils literal notranslate"><span class="pre">pylib.geometry.Wireframe</span></code></a></p>
|
||||
<p>Line a open wireframe object in local coordinate system</p>
|
||||
</dd></dl>
|
||||
@@ -99,8 +113,14 @@
|
||||
<dl class="class">
|
||||
<dt id="pylib.geometry.Point">
|
||||
<em class="property">class </em><code class="sig-name descname">Point</code><span class="sig-paren">(</span><em class="sig-param">x=0</em>, <em class="sig-param">y=0</em>, <em class="sig-param">z=0</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Point"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Point" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">mathematics.vector</span></code></p>
|
||||
<dd><p>Bases: <a class="reference internal" href="pylib.mathematics.html#pylib.mathematics.vector" title="pylib.mathematics.vector"><code class="xref py py-class docutils literal notranslate"><span class="pre">pylib.mathematics.vector</span></code></a></p>
|
||||
<p>Point in local coordinate system</p>
|
||||
<dl class="method">
|
||||
<dt id="pylib.geometry.Point.projection">
|
||||
<code class="sig-name descname">projection</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Point.projection"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Point.projection" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Orthographic projection to the xy-plane</p>
|
||||
</dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<dl class="class">
|
||||
@@ -110,12 +130,53 @@
|
||||
<p>Polygon as closed wireframe object in local coordinate system</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="class">
|
||||
<dt id="pylib.geometry.Solid">
|
||||
<em class="property">class </em><code class="sig-name descname">Solid</code><span class="sig-paren">(</span><em class="sig-param">*wireframes</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Solid"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Solid" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
|
||||
<p>Solid object in local coordinate system</p>
|
||||
<p>This class lists Wireframe objects.
|
||||
The Wireframe class create its own points (copy).</p>
|
||||
<dl class="method">
|
||||
<dt id="pylib.geometry.Solid.ch_cs">
|
||||
<code class="sig-name descname">ch_cs</code><span class="sig-paren">(</span><em class="sig-param">cs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Solid.ch_cs"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Solid.ch_cs" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.geometry.Solid.scale">
|
||||
<code class="sig-name descname">scale</code><span class="sig-paren">(</span><em class="sig-param">sx</em>, <em class="sig-param">sy=None</em>, <em class="sig-param">sz=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Solid.scale"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Solid.scale" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.geometry.Solid.translate">
|
||||
<code class="sig-name descname">translate</code><span class="sig-paren">(</span><em class="sig-param">tx</em>, <em class="sig-param">ty</em>, <em class="sig-param">tz</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Solid.translate"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Solid.translate" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.geometry.Solid.wireframes">
|
||||
<code class="sig-name descname">wireframes</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Solid.wireframes"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Solid.wireframes" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<dl class="class">
|
||||
<dt id="pylib.geometry.Wireframe">
|
||||
<em class="property">class </em><code class="sig-name descname">Wireframe</code><span class="sig-paren">(</span><em class="sig-param">*points</em>, <em class="sig-param">closed=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Wireframe"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Wireframe" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
|
||||
<p>Open and closed wireframe object in local coordinate system</p>
|
||||
<p>This class create its own points (copy).</p>
|
||||
<dl class="method">
|
||||
<dt id="pylib.geometry.Wireframe.__iter__">
|
||||
<code class="sig-name descname">__iter__</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Wireframe.__iter__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Wireframe.__iter__" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Returns the Iterator object</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.geometry.Wireframe.__str__">
|
||||
<code class="sig-name descname">__str__</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Wireframe.__str__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Wireframe.__str__" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Return str(self).</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.geometry.Wireframe.ch_cs">
|
||||
<code class="sig-name descname">ch_cs</code><span class="sig-paren">(</span><em class="sig-param">cs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Wireframe.ch_cs"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Wireframe.ch_cs" title="Permalink to this definition">¶</a></dt>
|
||||
@@ -152,10 +213,17 @@
|
||||
<code class="sig-name descname">translate</code><span class="sig-paren">(</span><em class="sig-param">tx</em>, <em class="sig-param">ty</em>, <em class="sig-param">tz</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Wireframe.translate"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Wireframe.translate" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.geometry.Wireframe.xy">
|
||||
<code class="sig-name descname">xy</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Wireframe.xy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Wireframe.xy" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Get coordinates in 3d space</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.geometry.Wireframe.xyz">
|
||||
<code class="sig-name descname">xyz</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Wireframe.xyz"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Wireframe.xyz" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
<dd><p>Get coordinates in 3d space</p>
|
||||
</dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
@@ -164,6 +232,12 @@
|
||||
<em class="property">class </em><code class="sig-name descname">World</code><a class="reference internal" href="_modules/pylib/geometry.html#World"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.World" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
|
||||
<p>World-space with world-space coordinates</p>
|
||||
<dl class="method">
|
||||
<dt id="pylib.geometry.World.__iter__">
|
||||
<code class="sig-name descname">__iter__</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#World.__iter__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.World.__iter__" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Returns the Iterator object</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.geometry.World.add">
|
||||
<code class="sig-name descname">add</code><span class="sig-paren">(</span><em class="sig-param">*objects</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#World.add"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.World.add" title="Permalink to this definition">¶</a></dt>
|
||||
@@ -224,8 +298,24 @@
|
||||
<code class="sig-name descname">translate</code><span class="sig-paren">(</span><em class="sig-param">tx</em>, <em class="sig-param">ty</em>, <em class="sig-param">tz</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#World.translate"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.World.translate" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.geometry.World.wireframes">
|
||||
<code class="sig-name descname">wireframes</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#World.wireframes"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.World.wireframes" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.geometry.World.wireframes_xy">
|
||||
<code class="sig-name descname">wireframes_xy</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#World.wireframes_xy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.World.wireframes_xy" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.geometry.World.wireframes_xyz">
|
||||
<code class="sig-name descname">wireframes_xyz</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#World.wireframes_xyz"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.World.wireframes_xyz" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
2
docs/build/html/pylib.geometry2d.html
vendored
2
docs/build/html/pylib.geometry2d.html
vendored
@@ -276,7 +276,7 @@ decides what the left and the right end point of the line is.</p></li>
|
||||
</dl>
|
||||
<div class="admonition seealso">
|
||||
<p class="admonition-title">See also</p>
|
||||
<p><code class="xref py py-meth docutils literal notranslate"><span class="pre">plot_lines()</span></code> of the <code class="xref py py-mod docutils literal notranslate"><span class="pre">geometry_plot</span></code>
|
||||
<p><code class="xref py py-meth docutils literal notranslate"><span class="pre">plot_lines()</span></code> of the <a class="reference internal" href="pylib.geometry_plot.html#module-geometry_plot" title="geometry_plot: Geometry plotting. (*nix, Windows)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">geometry_plot</span></code></a>
|
||||
module to plot the lines</p>
|
||||
</div>
|
||||
</dd></dl>
|
||||
|
||||
4
docs/build/html/pylib.geometry2d_plot.html
vendored
4
docs/build/html/pylib.geometry2d_plot.html
vendored
@@ -16,7 +16,7 @@
|
||||
<script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
|
||||
<link rel="index" title="Index" href="genindex.html" />
|
||||
<link rel="search" title="Search" href="search.html" />
|
||||
<link rel="next" title="pylib.mathematics module" href="pylib.mathematics.html" />
|
||||
<link rel="next" title="pylib.geometry_plot module" href="pylib.geometry_plot.html" />
|
||||
<link rel="prev" title="pylib.geometry2d module" href="pylib.geometry2d.html" />
|
||||
|
||||
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
|
||||
@@ -86,7 +86,7 @@
|
||||
<li><a href="modules.html">pylib</a><ul>
|
||||
<li><a href="pylib.html">pylib package</a><ul>
|
||||
<li>Previous: <a href="pylib.geometry2d.html" title="previous chapter">pylib.geometry2d module</a></li>
|
||||
<li>Next: <a href="pylib.mathematics.html" title="next chapter">pylib.mathematics module</a></li>
|
||||
<li>Next: <a href="pylib.geometry_plot.html" title="next chapter">pylib.geometry_plot module</a></li>
|
||||
</ul></li>
|
||||
</ul></li>
|
||||
</ul></li>
|
||||
|
||||
123
docs/build/html/pylib.geometry_plot.html
vendored
Normal file
123
docs/build/html/pylib.geometry_plot.html
vendored
Normal 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 — 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">
|
||||
©2019, Daniel Weschke.
|
||||
|
||||
|
|
||||
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.1</a>
|
||||
& <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>
|
||||
194
docs/build/html/pylib.geometry_plot_pylab.html
vendored
Normal file
194
docs/build/html/pylib.geometry_plot_pylab.html
vendored
Normal 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 — 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
|
||||
Matplotlib’s 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">
|
||||
©2019, Daniel Weschke.
|
||||
|
||||
|
|
||||
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.1</a>
|
||||
& <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>
|
||||
7
docs/build/html/pylib.html
vendored
7
docs/build/html/pylib.html
vendored
@@ -61,9 +61,14 @@
|
||||
<li class="toctree-l1"><a class="reference internal" href="pylib.date.html">pylib.date module</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="pylib.drawblock.html">pylib.drawblock module</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="pylib.function.html">pylib.function module</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="pylib.geometry.html">pylib.geometry module</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="pylib.geometry.html">pylib.geometry module</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="pylib.geometry.html#affine-transforms">Affine transforms</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="pylib.geometry2d.html">pylib.geometry2d module</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="pylib.geometry2d_plot.html">pylib.geometry2d_plot module</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="pylib.geometry_plot.html">pylib.geometry_plot module</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="pylib.geometry_plot_pylab.html">pylib.geometry_plot_pylab module</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="pylib.mathematics.html">pylib.mathematics module</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="pylib.time_of_day.html">pylib.time_of_day module</a></li>
|
||||
</ul>
|
||||
|
||||
562
docs/build/html/pylib.mathematics.html
vendored
562
docs/build/html/pylib.mathematics.html
vendored
@@ -17,7 +17,7 @@
|
||||
<link rel="index" title="Index" href="genindex.html" />
|
||||
<link rel="search" title="Search" href="search.html" />
|
||||
<link rel="next" title="pylib.time_of_day module" href="pylib.time_of_day.html" />
|
||||
<link rel="prev" title="pylib.geometry2d_plot module" href="pylib.geometry2d_plot.html" />
|
||||
<link rel="prev" title="pylib.geometry_plot_pylab module" href="pylib.geometry_plot_pylab.html" />
|
||||
|
||||
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
|
||||
|
||||
@@ -53,6 +53,119 @@
|
||||
<em class="property">class </em><code class="sig-name descname">matrix</code><a class="reference internal" href="_modules/pylib/mathematics.html#matrix"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.matrix" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">list</span></code></p>
|
||||
<p>Use/create matrix like list of lists</p>
|
||||
<dl class="method">
|
||||
<dt id="pylib.mathematics.matrix.__getitem__">
|
||||
<code class="sig-name descname">__getitem__</code><span class="sig-paren">(</span><em class="sig-param">index</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#matrix.__getitem__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.matrix.__getitem__" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>For index return value, for range return new vector object.</p>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Example</dt>
|
||||
<dd class="field-odd"><p></p></dd>
|
||||
</dl>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </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">>>> </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">>>> </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">>>> </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">>>> </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} &= \mathbf{A} \cdot b \\
|
||||
\mathbf{c} &= \mathbf{A} \cdot \mathbf{b} \\
|
||||
\mathbf{C} &= \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">>>> </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">>>> </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">>>> </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">>>> </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">>>> </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">>>> </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">>>> </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">>>> </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} &= a \cdot \mathbf{B} \\
|
||||
\mathbf{c} &= \mathbf{a} \cdot \mathbf{B} \\
|
||||
\mathbf{C} &= \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">>>> </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">>>> </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">>>> </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">>>> </span><span class="nb">print</span><span class="p">(</span><span class="n">m</span><span class="p">)</span>
|
||||
<span class="go">[[5.0, 10.0, 15.0, 20.0], [25.0, 30.0, 35.0, 40.0], [45.0, 50.0, 55.0, 60.0], [0.0, 0.0, 0.0, 5.0]]</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<div class="admonition seealso">
|
||||
<p class="admonition-title">See also</p>
|
||||
<p><a class="reference internal" href="#pylib.mathematics.matrix.__mul__" title="pylib.mathematics.matrix.__mul__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__mul__()</span></code></a> and <a class="reference internal" href="#pylib.mathematics.vector.__mul__" title="pylib.mathematics.vector.__mul__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">vector.__mul__()</span></code></a> for vector * matrix</p>
|
||||
</div>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.mathematics.matrix.__str__">
|
||||
<code class="sig-name descname">__str__</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#matrix.__str__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.matrix.__str__" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Return str(self).</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.mathematics.matrix.rotate_x">
|
||||
<code class="sig-name descname">rotate_x</code><span class="sig-paren">(</span><em class="sig-param">theta</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#matrix.rotate_x"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.matrix.rotate_x" title="Permalink to this definition">¶</a></dt>
|
||||
@@ -134,7 +247,7 @@
|
||||
<dd><p>Rotation matrix about the x direction.</p>
|
||||
<p>Rotates the coordinate system of vectors</p>
|
||||
<div class="math notranslate nohighlight">
|
||||
\[\begin{split}R_{x}(\theta) =
|
||||
\[\begin{split}\mathbf{R}_{x}(\theta) =
|
||||
\begin{bmatrix}
|
||||
1 & 0 & 0 & 0 \\
|
||||
0 & \cos \theta & -\sin \theta & 0 \\
|
||||
@@ -149,7 +262,7 @@
|
||||
<dd><p>Rotation matrix about the y direction.</p>
|
||||
<p>Rotates the coordinate system of vectors</p>
|
||||
<div class="math notranslate nohighlight">
|
||||
\[\begin{split}R_{y}(\theta) =
|
||||
\[\begin{split}\mathbf{R}_{y}(\theta) =
|
||||
\begin{bmatrix}
|
||||
\cos \theta & 0 & \sin \theta & 0 \\
|
||||
0 & 1 & 0 & 0 \\
|
||||
@@ -164,7 +277,7 @@
|
||||
<dd><p>Rotation matrix about the z direction.</p>
|
||||
<p>Rotates the coordinate system of vectors</p>
|
||||
<div class="math notranslate nohighlight">
|
||||
\[\begin{split}R_{z}(\theta) =
|
||||
\[\begin{split}\mathbf{R}_{z}(\theta) =
|
||||
\begin{bmatrix}
|
||||
\cos \theta & -\sin \theta & 0 & 0 \\
|
||||
\sin \theta & \cos \theta & 0 & 0 \\
|
||||
@@ -176,14 +289,17 @@
|
||||
<dd class="field-odd"><p></p></dd>
|
||||
</dl>
|
||||
<div class="math notranslate nohighlight">
|
||||
\[\begin{split}R_{z}(\theta) \begin{bmatrix}1 \\ 0 \\ 0 \\ 1\end{bmatrix} =
|
||||
\[\begin{split}\mathbf{R}_{z}(\theta)
|
||||
\begin{bmatrix}1 \\ 0 \\ 0 \\ 1\end{bmatrix}
|
||||
&=
|
||||
\begin{bmatrix}
|
||||
\cos 90° & -\sin 90° & 0 & 0 \\
|
||||
\sin 90° & \cos 90° & 0 & 0 \\
|
||||
0 & 0 & 1 & 0 \\
|
||||
0 & 0 & 0 & 1
|
||||
\end{bmatrix}
|
||||
\begin{bmatrix}1 \\ 0 \\ 0 \\ 1\end{bmatrix} =
|
||||
\begin{bmatrix}1 \\ 0 \\ 0 \\ 1\end{bmatrix} \\
|
||||
&=
|
||||
\begin{bmatrix}
|
||||
0 & -1 & 0 & 0 \\
|
||||
1 & 0 & 0 & 0 \\
|
||||
@@ -200,12 +316,12 @@
|
||||
<dd><p>Scaling matrix</p>
|
||||
<p>uniform scaling if sx=sy=sz=s.
|
||||
Note that scaling happens around the origin, so objects not
|
||||
centered at the origin will have their centers move. To avoid this,
|
||||
either scale the object when it’s located at the origin, or
|
||||
perform a translation afterwards to move the object back to where
|
||||
it should be.</p>
|
||||
centered at the origin will have their centers move. To avoid
|
||||
this, either scale the object when it’s located at the origin,
|
||||
or perform a translation afterwards to move the object back to
|
||||
where it should be.</p>
|
||||
<div class="math notranslate nohighlight">
|
||||
\[\begin{split}S =
|
||||
\[\begin{split}\mathbf{S} =
|
||||
\begin{bmatrix}
|
||||
s_x & 0 & 0 & 0 \\
|
||||
0 & s_y & 0 & 0 \\
|
||||
@@ -220,10 +336,10 @@ it should be.</p>
|
||||
<dd><p>Scaling</p>
|
||||
<p>uniform scaling if sx=sy=sz=s.
|
||||
Note that scaling happens around the origin, so objects not
|
||||
centered at the origin will have their centers move. To avoid this,
|
||||
either scale the object when it’s located at the origin, or
|
||||
perform a translation afterwards to move the object back to where
|
||||
it should be.</p>
|
||||
centered at the origin will have their centers move. To avoid
|
||||
this, either scale the object when it’s located at the origin,
|
||||
or perform a translation afterwards to move the object back to
|
||||
where it should be.</p>
|
||||
<div class="math notranslate nohighlight">
|
||||
\[\begin{split}\begin{bmatrix}
|
||||
xx' & xy' & xz' & t_x' \\
|
||||
@@ -250,7 +366,7 @@ it should be.</p>
|
||||
<em class="property">static </em><code class="sig-name descname">t</code><span class="sig-paren">(</span><em class="sig-param">tx</em>, <em class="sig-param">ty</em>, <em class="sig-param">tz</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#matrix.t"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.matrix.t" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Translation matrix</p>
|
||||
<div class="math notranslate nohighlight">
|
||||
\[\begin{split}T =
|
||||
\[\begin{split}\mathbf{T} =
|
||||
\begin{bmatrix}
|
||||
1 & 0 & 0 & t_x \\
|
||||
0 & 1 & 0 & t_y \\
|
||||
@@ -292,60 +408,385 @@ it should be.</p>
|
||||
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">list</span></code></p>
|
||||
<p>Use/create vector like lists</p>
|
||||
<ul class="simple">
|
||||
<li><p>size -> len(a)</p></li>
|
||||
<li><p>abs -> abs(a)</p></li>
|
||||
<li><p>dot -> a * b</p></li>
|
||||
<li><p>outer -> a @ b</p></li>
|
||||
<li><p>size, length of a vector use len(a)</p></li>
|
||||
<li><p>absolute, magntude, norm of a vector use abs(a), see
|
||||
<a class="reference internal" href="#pylib.mathematics.vector.__abs__" title="pylib.mathematics.vector.__abs__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__abs__()</span></code></a></p></li>
|
||||
<li><p>dot product use a * b, see <a class="reference internal" href="#pylib.mathematics.vector.__mul__" title="pylib.mathematics.vector.__mul__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__mul__()</span></code></a> and <a class="reference internal" href="#pylib.mathematics.vector.__rmul__" title="pylib.mathematics.vector.__rmul__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__rmul__()</span></code></a></p></li>
|
||||
<li><p>outer product use a @ b, see <a class="reference internal" href="#pylib.mathematics.vector.__matmul__" title="pylib.mathematics.vector.__matmul__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__matmul__()</span></code></a></p></li>
|
||||
</ul>
|
||||
<p>use super constructor</p>
|
||||
<p>use super __iter__</p>
|
||||
<p>use super __setitem__</p>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </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">>>> </span><span class="n">v</span><span class="p">[</span><span class="mi">3</span><span class="p">:</span><span class="mi">5</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">]</span>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">__iter__</dt>
|
||||
<dd class="field-odd"><p></p></dd>
|
||||
</dl>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </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">>>> </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">>>> </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">>>> </span><span class="nb">print</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
|
||||
<span class="go">[1, 2, 3, 1, 2]</span>
|
||||
<span class="gp">>>> </span><span class="nb">isinstance</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="n">vector</span><span class="p">)</span>
|
||||
<span class="go">True</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>use super __lt__(a, b)</p>
|
||||
<p>use super __le__(a, b)</p>
|
||||
<p>use super __eq__(a, b)</p>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">v</span> <span class="o">=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">])</span>
|
||||
<span class="gp">>>> </span><span class="n">v2</span> <span class="o">=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">])</span>
|
||||
<span class="gp">>>> </span><span class="n">v</span> <span class="o">==</span> <span class="n">v2</span>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">__eq__(a, b)</dt>
|
||||
<dd class="field-odd"><p></p></dd>
|
||||
</dl>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">])</span> <span class="o">==</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">])</span>
|
||||
<span class="go">True</span>
|
||||
<span class="gp">>>> </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">>>> </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">>>> </span><span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">])</span> <span class="o">!=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">])</span>
|
||||
<span class="go">True</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>use super __ne__(a, b)</p>
|
||||
<p>use super __ge__(a, b)</p>
|
||||
<p>use super __gt__(a, b)</p>
|
||||
<p>use super __contains__</p>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="mi">2</span> <span class="ow">in</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">])</span>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">__contains__</dt>
|
||||
<dd class="field-odd"><p></p></dd>
|
||||
</dl>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="mi">2</span> <span class="ow">in</span> <span class="n">vector</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">])</span>
|
||||
<span class="go">True</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>__isub__</p>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </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">>>> </span><span class="n">v</span> <span class="o">-=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">3</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">3</span><span class="p">])</span>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">__isub__</dt>
|
||||
<dd class="field-odd"><p></p></dd>
|
||||
</dl>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </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">>>> </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">>>> </span><span class="nb">print</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
|
||||
<span class="go">[-2, -1, 0]</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>__imul__</p>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </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">>>> </span><span class="n">v</span> <span class="o">*=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">3</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">3</span><span class="p">])</span>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">__imul__</dt>
|
||||
<dd class="field-odd"><p></p></dd>
|
||||
</dl>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </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">>>> </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">>>> </span><span class="nb">print</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
|
||||
<span class="go">18</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>__imatmul__</p>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </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">>>> </span><span class="n">m</span> <span class="o">*=</span> <span class="n">vector</span><span class="p">([</span><span class="mi">3</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">3</span><span class="p">])</span>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">__imatmul__</dt>
|
||||
<dd class="field-odd"><p></p></dd>
|
||||
</dl>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </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">>>> </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">>>> </span><span class="nb">print</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
|
||||
<span class="go">[[3, 3, 3], [6, 6, 6], [9, 9, 9]]</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<dl class="method">
|
||||
<dt id="pylib.mathematics.vector.__abs__">
|
||||
<code class="sig-name descname">__abs__</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.__abs__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.__abs__" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Magnitude / norm of a vector</p>
|
||||
<div class="math notranslate nohighlight">
|
||||
\[b = |\mathbf{a}| = \sqrt{\sum a_i^2} =
|
||||
\sqrt{\mathbf{a} \cdot \mathbf{a}}\]</div>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Example</dt>
|
||||
<dd class="field-odd"><p></p></dd>
|
||||
</dl>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </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">>>> </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">>>> </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">>>> </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">>>> </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">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">>>> </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">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">>>> </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">>>> </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">>>> </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">>>> </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">>>> </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">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">>>> </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">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">>>> </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">>>> </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">>>> </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">>>> </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"><=</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">>>> </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"><=</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">>>> </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"><</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">>>> </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"><</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 @ 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}&a_{1}b_{2}&a_{1}b_{3}\\
|
||||
a_{2}b_{1}&a_{2}b_{2}&a_{2}b_{3}\\
|
||||
a_{3}b_{1}&a_{3}b_{2}&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">>>> </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">>>> </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} &= \mathbf{a} \cdot b \\
|
||||
\mathbf{c} &= \mathbf{a} \cdot \mathbf{b} \\
|
||||
\mathbf{c} &= \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">>>> </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">>>> </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">>>> </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">>>> </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">>>> </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">>>> </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} &= a \cdot \mathbf{b} \\
|
||||
\mathbf{c} &= \mathbf{a} \cdot \mathbf{b} \\
|
||||
\mathbf{c} &= \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">>>> </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">>>> </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">>>> </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">>>> </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">>>> </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">>>> </span><span class="nb">print</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
|
||||
<span class="go">[0, 0, 0]</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.mathematics.vector.abs">
|
||||
<em class="property">static </em><code class="sig-name descname">abs</code><span class="sig-paren">(</span><em class="sig-param">a</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.abs"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.abs" title="Permalink to this definition">¶</a></dt>
|
||||
@@ -370,9 +811,9 @@ it should be.</p>
|
||||
<dl class="method">
|
||||
<dt id="pylib.mathematics.vector.ch_cs">
|
||||
<code class="sig-name descname">ch_cs</code><span class="sig-paren">(</span><em class="sig-param">cs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.ch_cs"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.ch_cs" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Transform this vector from its defined coordinate system to a
|
||||
new coordinate system, defined by the given coordinate system (u,
|
||||
v and w direction vectors).</p>
|
||||
<dd><p>Transform this vector from its defined coordinate system to
|
||||
a new coordinate system, defined by the given coordinate system
|
||||
(u, v and w direction vectors).</p>
|
||||
<div class="math notranslate nohighlight">
|
||||
\[\begin{split}\begin{bmatrix}x' \\ y' \\ z' \\ h'\end{bmatrix} =
|
||||
\begin{bmatrix}
|
||||
@@ -401,7 +842,7 @@ v and w direction vectors).</p>
|
||||
<p>c is orthogonal to both a and b.
|
||||
The direction of c can be found with the right-hand rule.</p>
|
||||
<div class="math notranslate nohighlight">
|
||||
\[\vec{c} = \vec{a} \times \vec{b}\]</div>
|
||||
\[\mathbf{c} = \mathbf{a} \times \mathbf{b}\]</div>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
@@ -444,10 +885,10 @@ columns filled with v.</p>
|
||||
<dl class="field-list simple">
|
||||
</dl>
|
||||
<div class="math notranslate nohighlight">
|
||||
\[\vec{e}_a = \frac{\vec{a}}{|\vec{a}|}\]</div>
|
||||
\[\mathbf{\hat{a}} = \frac{\mathbf{a}}{|\mathbf{a}|}\]</div>
|
||||
<div class="admonition seealso">
|
||||
<p class="admonition-title">See also</p>
|
||||
<p><code class="xref py py-meth docutils literal notranslate"><span class="pre">norm()</span></code> for a norm (magnitude) of a vector</p>
|
||||
<p><a class="reference internal" href="#pylib.mathematics.vector.__abs__" title="pylib.mathematics.vector.__abs__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__abs__()</span></code></a> for a norm (magnitude) of a vector</p>
|
||||
</div>
|
||||
</dd></dl>
|
||||
|
||||
@@ -473,8 +914,8 @@ columns filled with ones.</p>
|
||||
<dl class="method">
|
||||
<dt id="pylib.mathematics.vector.random">
|
||||
<em class="property">static </em><code class="sig-name descname">random</code><span class="sig-paren">(</span><em class="sig-param">shape</em>, <em class="sig-param">lmin=0.0</em>, <em class="sig-param">lmax=1.0</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.random"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.random" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Returns a random vector of length n or matrix of size m rows, n
|
||||
columns filled with random numbers.</p>
|
||||
<dd><p>Returns a random vector of length n or matrix of size m rows,
|
||||
n columns filled with random numbers.</p>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Example</dt>
|
||||
<dd class="field-odd"><p></p></dd>
|
||||
@@ -548,10 +989,10 @@ columns filled with random numbers.</p>
|
||||
<dd><p>Scaling</p>
|
||||
<p>uniform scaling if sx=sy=sz=s.
|
||||
Note that scaling happens around the origin, so objects not
|
||||
centered at the origin will have their centers move. To avoid this,
|
||||
either scale the object when it’s located at the origin, or
|
||||
perform a translation afterwards to move the object back to where
|
||||
it should be.</p>
|
||||
centered at the origin will have their centers move. To avoid
|
||||
this, either scale the object when it’s located at the origin,
|
||||
or perform a translation afterwards to move the object back to
|
||||
where it should be.</p>
|
||||
<div class="math notranslate nohighlight">
|
||||
\[\begin{split}\begin{bmatrix}x' \\ y' \\ z' \\ h'\end{bmatrix} =
|
||||
\begin{bmatrix}
|
||||
@@ -578,11 +1019,6 @@ it should be.</p>
|
||||
\begin{bmatrix}x \\ y \\ z \\ h\end{bmatrix}\end{split}\]</div>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.mathematics.vector.xyz">
|
||||
<code class="sig-name descname">xyz</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.xyz"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.xyz" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.mathematics.vector.zeros">
|
||||
<em class="property">static </em><code class="sig-name descname">zeros</code><span class="sig-paren">(</span><em class="sig-param">length</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.zeros"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.zeros" title="Permalink to this definition">¶</a></dt>
|
||||
@@ -637,7 +1073,7 @@ columns filled with zeros.</p>
|
||||
<li><a href="index.html">Documentation overview</a><ul>
|
||||
<li><a href="modules.html">pylib</a><ul>
|
||||
<li><a href="pylib.html">pylib package</a><ul>
|
||||
<li>Previous: <a href="pylib.geometry2d_plot.html" title="previous chapter">pylib.geometry2d_plot module</a></li>
|
||||
<li>Previous: <a href="pylib.geometry_plot_pylab.html" title="previous chapter">pylib.geometry_plot_pylab module</a></li>
|
||||
<li>Next: <a href="pylib.time_of_day.html" title="next chapter">pylib.time_of_day module</a></li>
|
||||
</ul></li>
|
||||
</ul></li>
|
||||
|
||||
2
docs/build/html/searchindex.js
vendored
2
docs/build/html/searchindex.js
vendored
File diff suppressed because one or more lines are too long
@@ -7,7 +7,7 @@ table.indextable tr.cap {
|
||||
}
|
||||
/* move doc link a bit up */
|
||||
.viewcode-back {
|
||||
float: right;
|
||||
position: relative;
|
||||
top: -1.5em;
|
||||
float: right;
|
||||
position: relative;
|
||||
top: -1.5em;
|
||||
}
|
||||
|
||||
@@ -82,4 +82,10 @@ html_theme_options = {
|
||||
'xref_border': 'transparent',
|
||||
'seealso_bg': '#25272c',
|
||||
'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__'
|
||||
}
|
||||
|
||||
7
docs/source/pylib.geometry_plot.rst
Normal file
7
docs/source/pylib.geometry_plot.rst
Normal file
@@ -0,0 +1,7 @@
|
||||
pylib.geometry\_plot module
|
||||
===========================
|
||||
|
||||
.. automodule:: pylib.geometry_plot
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
7
docs/source/pylib.geometry_plot_pylab.rst
Normal file
7
docs/source/pylib.geometry_plot_pylab.rst
Normal file
@@ -0,0 +1,7 @@
|
||||
pylib.geometry\_plot\_pylab module
|
||||
==================================
|
||||
|
||||
.. automodule:: pylib.geometry_plot_pylab
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
@@ -25,5 +25,7 @@ Submodules
|
||||
pylib.geometry
|
||||
pylib.geometry2d
|
||||
pylib.geometry2d_plot
|
||||
pylib.geometry_plot
|
||||
pylib.geometry_plot_pylab
|
||||
pylib.mathematics
|
||||
pylib.time_of_day
|
||||
|
||||
30
examples/geometry_hexahedra.py
Normal file
30
examples/geometry_hexahedra.py
Normal 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)
|
||||
41
examples/geometry_lines_circles.py
Normal file
41
examples/geometry_lines_circles.py
Normal 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)
|
||||
40
examples/geometry_pyramidal_frustum.py
Normal file
40
examples/geometry_pyramidal_frustum.py
Normal 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)
|
||||
@@ -12,6 +12,36 @@
|
||||
"""
|
||||
import math
|
||||
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):
|
||||
"""Read ascii data file.
|
||||
|
||||
@@ -200,7 +200,7 @@ def hypotrochoid(R, r, d):
|
||||
>>> x, y, theta_end = hyotrochoid(20, 6, 6)
|
||||
|
||||
.. seealso::
|
||||
:meth:`mathematics.lcm`
|
||||
:meth:`pylib.mathematics.lcm`
|
||||
"""
|
||||
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)
|
||||
@@ -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::
|
||||
: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]
|
||||
# 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()
|
||||
elif char_set in ["histogram", "block"]:
|
||||
import drawblock
|
||||
from .drawblock import histogram
|
||||
|
||||
pixels_horizontal = 1
|
||||
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!
|
||||
x = seq(x_0*window_factor, x_1*window_factor, 1/pixels_horizontal/density)
|
||||
f = [f(xi, t) for xi in x]
|
||||
frame = drawblock.histogram(f, x)
|
||||
frame = histogram(f, x)
|
||||
|
||||
return frame
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
"""2D geometry objects.
|
||||
"""Geometry objects.
|
||||
|
||||
:Date: 2019-12-21
|
||||
|
||||
@@ -9,26 +9,37 @@
|
||||
:synopsis: Geometry objects.
|
||||
|
||||
.. 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 copy
|
||||
from pylib.mathematics import vector, matrix
|
||||
from .mathematics import vector, matrix
|
||||
|
||||
class Direction(vector):
|
||||
"""Direction in local coordinate system"""
|
||||
def __init__(self, x=1, y=0, z=0):
|
||||
super().__init__([x, y, z, 0])
|
||||
|
||||
def __str__(self):
|
||||
return str(self.xyz())
|
||||
|
||||
class Point(vector):
|
||||
"""Point in local coordinate system"""
|
||||
def __init__(self, x=0, y=0, z=0):
|
||||
super().__init__([x, y, z, 1])
|
||||
|
||||
def __str__(self):
|
||||
return str(self.xyz())
|
||||
# TODO
|
||||
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):
|
||||
"""Coordinate system
|
||||
@@ -36,9 +47,6 @@ class CS(matrix):
|
||||
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]])
|
||||
|
||||
def __str__(self):
|
||||
return '[' + ', '.join([str(i) for i in self.get_coordinates()]) + ']'
|
||||
|
||||
@staticmethod
|
||||
def x90():
|
||||
return CS((1, 0, 0), (0, 0, -1), (0, 1, 0))
|
||||
@@ -59,7 +67,133 @@ class CS(matrix):
|
||||
"""Get coordinates in 3d space"""
|
||||
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
|
||||
"""
|
||||
def __init__(self):
|
||||
@@ -72,7 +206,8 @@ class World():
|
||||
return iter(self.objects())
|
||||
|
||||
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._sd = None
|
||||
@@ -106,6 +241,33 @@ class World():
|
||||
self._cs.scale(sx, sy, sz)
|
||||
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):
|
||||
return [copy.deepcopy(i).ch_cs(self._cs) for i in self._objects]
|
||||
|
||||
@@ -124,10 +286,9 @@ class World():
|
||||
xmax = -math.inf
|
||||
ymax = -math.inf
|
||||
zmax = -math.inf
|
||||
for i in self._objects:
|
||||
xi, yi, zi = map(min, i.xyz())
|
||||
xs, ys, zs = map(max, i.xyz())
|
||||
#xmax = x if x > xmax: xmax = x
|
||||
for i in self.wireframes_xyz():
|
||||
xi, yi, zi = map(min, i)
|
||||
xs, ys, zs = map(max, i)
|
||||
xmin = xi if xi < xmin else xmin
|
||||
ymin = yi if yi < ymin else ymin
|
||||
zmin = zi if zi < zmin else zmin
|
||||
@@ -148,78 +309,8 @@ class World():
|
||||
|
||||
def center(self):
|
||||
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
|
||||
|
||||
# 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)
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
.. moduleauthor:: Daniel Weschke <daniel.weschke@directbox.de>
|
||||
"""
|
||||
import pylab
|
||||
from geometry2d import (
|
||||
from .geometry2d import (
|
||||
distance, angle, line, interpolate_hermite, rotate_xy, translate_xy
|
||||
)
|
||||
|
||||
|
||||
17
pylib/geometry_plot.py
Normal file
17
pylib/geometry_plot.py
Normal 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
|
||||
243
pylib/geometry_plot_pylab.py
Normal file
243
pylib/geometry_plot_pylab.py
Normal 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()
|
||||
@@ -21,64 +21,63 @@ def lcm(a, b):
|
||||
class vector(list):
|
||||
"""Use/create vector like lists
|
||||
|
||||
* size -> len(a)
|
||||
* abs -> abs(a)
|
||||
* dot -> a * b
|
||||
* outer -> a @ b
|
||||
* size, length of a vector use len(a)
|
||||
* absolute, magntude, norm of a vector use abs(a), see
|
||||
:meth:`__abs__`
|
||||
* 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[3:5] = [1,2]
|
||||
>>> v = vector([1, 2, 3, 4, 5])
|
||||
>>> v[3:5] = [1, 2]
|
||||
>>> print(v)
|
||||
[1, 2, 3, 1, 2]
|
||||
>>> isinstance(v, vector)
|
||||
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])
|
||||
>>> v2 = vector([1,2,3,1,2])
|
||||
>>> v == v2
|
||||
>>> vector([1, 2, 3, 1, 2]) != vector([1, 2, 3, 1, 2])
|
||||
False
|
||||
>>> vector([1, 2, 3, 1, 2]) != vector([1, 2, 3, 2, 1])
|
||||
True
|
||||
|
||||
use super __ne__(a, b)
|
||||
:__contains__:
|
||||
|
||||
use super __ge__(a, b)
|
||||
|
||||
use super __gt__(a, b)
|
||||
|
||||
use super __contains__
|
||||
|
||||
>>> 2 in vector([1,2,3])
|
||||
>>> 2 in vector([1, 2, 3])
|
||||
True
|
||||
|
||||
__isub__
|
||||
:__isub__:
|
||||
|
||||
>>> v = vector([1,2,3])
|
||||
>>> v -= vector([3,3,3])
|
||||
>>> v = vector([1, 2, 3])
|
||||
>>> v -= vector([3, 3, 3])
|
||||
>>> print(v)
|
||||
[-2, -1, 0]
|
||||
|
||||
__imul__
|
||||
:__imul__:
|
||||
|
||||
>>> v = vector([1,2,3])
|
||||
>>> v *= vector([3,3,3])
|
||||
>>> v = vector([1, 2, 3])
|
||||
>>> v *= vector([3, 3, 3])
|
||||
>>> print(v)
|
||||
18
|
||||
|
||||
__imatmul__
|
||||
:__imatmul__:
|
||||
|
||||
>>> m = vector([1,2,3])
|
||||
>>> m *= vector([3,3,3])
|
||||
>>> m = vector([1, 2, 3])
|
||||
>>> m *= vector([3, 3, 3])
|
||||
>>> print(v)
|
||||
[[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
|
||||
|
||||
def __pos__(self):
|
||||
"""+ a (new object)
|
||||
"""\+ a (new object)
|
||||
|
||||
.. math::
|
||||
\mathbf{b} = +\mathbf{a}
|
||||
"""
|
||||
return vector([*self])
|
||||
|
||||
def __neg__(self):
|
||||
"""- a (new object)
|
||||
"""\- a (new object)
|
||||
|
||||
.. math::
|
||||
\mathbf{b} = -\mathbf{a}
|
||||
"""
|
||||
return vector([-i for i in self])
|
||||
|
||||
def __add__(self, other):
|
||||
"""a + b (new object)
|
||||
|
||||
.. math::
|
||||
\mathbf{c} = \mathbf{a} + \mathbf{b}
|
||||
|
||||
:Example:
|
||||
|
||||
>>> v = vector([1,2,3]) + vector([1,2,3])
|
||||
>>> v = vector([1, 2, 3]) + vector([1, 2, 3])
|
||||
>>> print(v)
|
||||
[2, 4, 6]
|
||||
"""
|
||||
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):
|
||||
"""a += b (new object)
|
||||
|
||||
:Example:
|
||||
|
||||
>>> v = vector([1,2,3])
|
||||
>>> v += vector([3,3,3])
|
||||
>>> v = vector([1, 2, 3])
|
||||
>>> v += vector([3, 3, 3])
|
||||
>>> print(v)
|
||||
[4, 5, 6]
|
||||
"""
|
||||
@@ -136,9 +145,12 @@ class vector(list):
|
||||
def __sub__(self, other):
|
||||
"""a - b (new object)
|
||||
|
||||
.. math::
|
||||
\mathbf{c} = \mathbf{a} - \mathbf{b}
|
||||
|
||||
:Example:
|
||||
|
||||
>>> v = vector([1,2,3]) - vector([1,2,3])
|
||||
>>> v = vector([1, 2, 3]) - vector([1, 2, 3])
|
||||
>>> print(v)
|
||||
[0, 0, 0]
|
||||
"""
|
||||
@@ -146,9 +158,7 @@ class vector(list):
|
||||
|
||||
def __mul__(self, other):
|
||||
r"""Scalar multiplication, dot product (inner product) or
|
||||
vector-matrix multiplication.
|
||||
|
||||
a * b (new object)
|
||||
vector-matrix multiplication. (new object)
|
||||
|
||||
: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}
|
||||
|
||||
.. note::
|
||||
No size checking will be conducted, therefore no exceptions for
|
||||
wrong usage (result will be nonsense).
|
||||
No size checking will be conducted, therefore no exceptions
|
||||
for wrong usage (result will be nonsense).
|
||||
|
||||
:Example:
|
||||
|
||||
>>> v = vector([1,2,3,4,5])*3
|
||||
>>> v = vector([1, 2, 3, 4, 5]) * 3
|
||||
>>> print(v)
|
||||
[3, 6, 9, 12, 15]
|
||||
>>> v = vector([1,2,3,4,5])*3.
|
||||
>>> v = vector([1, 2, 3, 4, 5]) * 3.
|
||||
>>> print(v)
|
||||
[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)
|
||||
14
|
||||
|
||||
@@ -180,15 +190,14 @@ class vector(list):
|
||||
return sum([i*j for i, j in zip(self, other)])
|
||||
except:
|
||||
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
|
||||
return vector([i*other for i in self])
|
||||
|
||||
def __rmul__(self, other):
|
||||
r"""Scalar multiplication, dot product (inner product) or
|
||||
matrix-vector multiplication.
|
||||
|
||||
a * b (new object)
|
||||
matrix-vector multiplication. (new object)
|
||||
|
||||
:type other: scalar (or 1d list and 2d list)
|
||||
|
||||
@@ -198,24 +207,24 @@ class vector(list):
|
||||
\mathbf{c} &= \mathbf{A} \cdot \mathbf{b}
|
||||
|
||||
.. note::
|
||||
No size checking will be conducted, therefore no exceptions for
|
||||
wrong usage (result will be nonsense).
|
||||
No size checking will be conducted, therefore no exceptions
|
||||
for wrong usage (result will be nonsense).
|
||||
|
||||
:Example:
|
||||
|
||||
>>> v = 3*vector([1,2,3,4,5])
|
||||
>>> v = 3 * vector([1, 2, 3, 4, 5])
|
||||
>>> print(v)
|
||||
[3, 6, 9, 12, 15]
|
||||
>>> v = 3.*vector([1,2,3,4,5])
|
||||
>>> v = 3. * vector([1, 2, 3, 4, 5])
|
||||
>>> print(v)
|
||||
[3.0, 6.0, 9.0, 12.0, 15.0]
|
||||
|
||||
.. seealso::
|
||||
:meth:`__mul__`
|
||||
:meth:`matrix.__mul__` for matrix * vector
|
||||
:meth:`__mul__` and :meth:`matrix.__mul__` for matrix * vector
|
||||
"""
|
||||
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
|
||||
return self*other
|
||||
|
||||
@@ -223,7 +232,7 @@ class vector(list):
|
||||
r"""Outer product a @ b (new object)
|
||||
|
||||
.. math::
|
||||
\vec{a} \otimes \vec{b}
|
||||
\mathbf{c} = \mathbf{a} \otimes \mathbf{b}
|
||||
=
|
||||
\begin{pmatrix}
|
||||
a_{1}\\
|
||||
@@ -246,7 +255,7 @@ class vector(list):
|
||||
|
||||
:Example:
|
||||
|
||||
>>> m = vector([1,2,3]) @ vector([1,2,4])
|
||||
>>> m = vector([1, 2, 3]) @ vector([1, 2, 4])
|
||||
>>> print(m)
|
||||
[[1, 2, 4], [2, 4, 8], [3, 6, 12]]
|
||||
"""
|
||||
@@ -259,17 +268,80 @@ class vector(list):
|
||||
r"""Magnitude / norm of a vector
|
||||
|
||||
.. math::
|
||||
b = \sqrt{\sum a_i^2}
|
||||
b = |\mathbf{a}| = \sqrt{\sum a_i^2} =
|
||||
\sqrt{\mathbf{a} \cdot \mathbf{a}}
|
||||
|
||||
:Example:
|
||||
|
||||
>>> norm([3, 4])
|
||||
5
|
||||
>>> norm(vector([3, 4]))
|
||||
5
|
||||
>>> v = vector([3, 4])
|
||||
>>> abs(v)
|
||||
5.0
|
||||
"""
|
||||
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):
|
||||
return str([*self])
|
||||
|
||||
@@ -328,8 +400,8 @@ class vector(list):
|
||||
|
||||
@staticmethod
|
||||
def random(shape, lmin=0.0, lmax=1.0):
|
||||
"""Returns a random vector of length n or matrix of size m rows, n
|
||||
columns filled with random numbers.
|
||||
"""Returns a random vector of length n or matrix of size m rows,
|
||||
n columns filled with random numbers.
|
||||
|
||||
:Example:
|
||||
|
||||
@@ -351,10 +423,10 @@ class vector(list):
|
||||
:type a: vector
|
||||
|
||||
.. math::
|
||||
\vec{e}_a = \frac{\vec{a}}{|\vec{a}|}
|
||||
\mathbf{\hat{a}} = \frac{\mathbf{a}}{|\mathbf{a}|}
|
||||
|
||||
.. seealso::
|
||||
:meth:`norm` for a norm (magnitude) of a vector
|
||||
:meth:`__abs__` for a norm (magnitude) of a vector
|
||||
"""
|
||||
a_mag = abs(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.
|
||||
|
||||
.. math::
|
||||
\vec{c} = \vec{a} \times \vec{b}
|
||||
\mathbf{c} = \mathbf{a} \times \mathbf{b}
|
||||
"""
|
||||
return [a[1]*b[2] - a[2]*b[1],
|
||||
a[2]*b[0] - a[0]*b[2],
|
||||
a[0]*b[1] - a[1]*b[0]]
|
||||
|
||||
def xyz(self):
|
||||
return self[:3]
|
||||
|
||||
def rotate_x(self, theta):
|
||||
r"""Rotation about the x dirction.
|
||||
|
||||
@@ -493,10 +562,10 @@ class vector(list):
|
||||
|
||||
uniform scaling if sx=sy=sz=s.
|
||||
Note that scaling happens around the origin, so objects not
|
||||
centered at the origin will have their centers move. To avoid this,
|
||||
either scale the object when it's located at the origin, or
|
||||
perform a translation afterwards to move the object back to where
|
||||
it should be.
|
||||
centered at the origin will have their centers move. To avoid
|
||||
this, either scale the object when it's located at the origin,
|
||||
or perform a translation afterwards to move the object back to
|
||||
where it should be.
|
||||
|
||||
.. math::
|
||||
\begin{bmatrix}x' \\ y' \\ z' \\ h'\end{bmatrix} =
|
||||
@@ -508,16 +577,17 @@ class vector(list):
|
||||
\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
|
||||
sz = sx
|
||||
self[:] = matrix.s(sx, sy, sz) * self
|
||||
return self
|
||||
|
||||
def ch_cs(self, cs):
|
||||
r"""Transform this vector from its defined coordinate system to a
|
||||
new coordinate system, defined by the given coordinate system (u,
|
||||
v and w direction vectors).
|
||||
r"""Transform this vector from its defined coordinate system to
|
||||
a new coordinate system, defined by the given coordinate system
|
||||
(u, v and w direction vectors).
|
||||
|
||||
.. math::
|
||||
\begin{bmatrix}x' \\ y' \\ z' \\ h'\end{bmatrix} =
|
||||
@@ -542,21 +612,23 @@ class matrix(list):
|
||||
|
||||
: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])
|
||||
[7, 8, 9, 0]
|
||||
>>> print(m[:,1:3])
|
||||
>>> print(m[:, 1:3])
|
||||
[[2, 3], [5, 6], [8, 9], [0, 0]]
|
||||
>>> print(m[0:2,1:3])
|
||||
>>> print(m[0:2, 1:3])
|
||||
[[2, 3], [5, 6]]
|
||||
>>> print(m[::2,::2])
|
||||
>>> print(m[::2, ::2])
|
||||
[[1, 3], [7, 9]]
|
||||
"""
|
||||
# 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
|
||||
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
|
||||
item = super().__getitem__(index)
|
||||
return matrix(item) if isinstance(item, list) else item
|
||||
@@ -568,7 +640,7 @@ class matrix(list):
|
||||
Rotates the coordinate system of vectors
|
||||
|
||||
.. math::
|
||||
R_{x}(\theta) =
|
||||
\mathbf{R}_{x}(\theta) =
|
||||
\begin{bmatrix}
|
||||
1 & 0 & 0 & 0 \\
|
||||
0 & \cos \theta & -\sin \theta & 0 \\
|
||||
@@ -591,7 +663,7 @@ class matrix(list):
|
||||
Rotates the coordinate system of vectors
|
||||
|
||||
.. math::
|
||||
R_{y}(\theta) =
|
||||
\mathbf{R}_{y}(\theta) =
|
||||
\begin{bmatrix}
|
||||
\cos \theta & 0 & \sin \theta & 0 \\
|
||||
0 & 1 & 0 & 0 \\
|
||||
@@ -614,7 +686,7 @@ class matrix(list):
|
||||
Rotates the coordinate system of vectors
|
||||
|
||||
.. math::
|
||||
R_{z}(\theta) =
|
||||
\mathbf{R}_{z}(\theta) =
|
||||
\begin{bmatrix}
|
||||
\cos \theta & -\sin \theta & 0 & 0 \\
|
||||
\sin \theta & \cos \theta & 0 & 0 \\
|
||||
@@ -625,14 +697,17 @@ class matrix(list):
|
||||
:Example:
|
||||
|
||||
.. 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}
|
||||
\cos 90° & -\sin 90° & 0 & 0 \\
|
||||
\sin 90° & \cos 90° & 0 & 0 \\
|
||||
0 & 0 & 1 & 0 \\
|
||||
0 & 0 & 0 & 1
|
||||
\end{bmatrix}
|
||||
\begin{bmatrix}1 \\ 0 \\ 0 \\ 1\end{bmatrix} =
|
||||
\begin{bmatrix}1 \\ 0 \\ 0 \\ 1\end{bmatrix} \\
|
||||
&=
|
||||
\begin{bmatrix}
|
||||
0 & -1 & 0 & 0 \\
|
||||
1 & 0 & 0 & 0 \\
|
||||
@@ -655,7 +730,7 @@ class matrix(list):
|
||||
r"""Translation matrix
|
||||
|
||||
.. math::
|
||||
T =
|
||||
\mathbf{T} =
|
||||
\begin{bmatrix}
|
||||
1 & 0 & 0 & t_x \\
|
||||
0 & 1 & 0 & t_y \\
|
||||
@@ -675,13 +750,13 @@ class matrix(list):
|
||||
|
||||
uniform scaling if sx=sy=sz=s.
|
||||
Note that scaling happens around the origin, so objects not
|
||||
centered at the origin will have their centers move. To avoid this,
|
||||
either scale the object when it's located at the origin, or
|
||||
perform a translation afterwards to move the object back to where
|
||||
it should be.
|
||||
centered at the origin will have their centers move. To avoid
|
||||
this, either scale the object when it's located at the origin,
|
||||
or perform a translation afterwards to move the object back to
|
||||
where it should be.
|
||||
|
||||
.. math::
|
||||
S =
|
||||
\mathbf{S} =
|
||||
\begin{bmatrix}
|
||||
s_x & 0 & 0 & 0 \\
|
||||
0 & s_y & 0 & 0 \\
|
||||
@@ -689,7 +764,8 @@ class matrix(list):
|
||||
0 & 0 & 0 & 1
|
||||
\end{bmatrix}
|
||||
"""
|
||||
if not sy:
|
||||
# if not sy is not suitable because 0 is also false
|
||||
if sy is None:
|
||||
sy = sx
|
||||
sz = sx
|
||||
T = matrix([[sx, 0, 0, 0],
|
||||
@@ -700,9 +776,7 @@ class matrix(list):
|
||||
|
||||
def __mul__(self, other):
|
||||
r"""Scalar multiplication, dot product (inner product) or
|
||||
matrix-vector multiplication.
|
||||
|
||||
a * b (new object)
|
||||
matrix-vector multiplication. (new object)
|
||||
|
||||
: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}
|
||||
|
||||
.. note::
|
||||
No size checking will be conducted, therefore no exceptions for
|
||||
wrong usage (result will be nonsense).
|
||||
No size checking will be conducted, therefore no exceptions
|
||||
for wrong usage (result will be nonsense).
|
||||
|
||||
: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)
|
||||
[[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)
|
||||
[[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)
|
||||
[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)
|
||||
[[91, 96, 102], [220, 231, 246], [349, 366, 390]]
|
||||
|
||||
@@ -734,18 +812,18 @@ class matrix(list):
|
||||
:meth:`__rmul__`
|
||||
"""
|
||||
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:
|
||||
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
|
||||
return matrix([[a*other for a in a_row] for a_row in self])
|
||||
|
||||
def __rmul__(self, other):
|
||||
r"""Scalar multiplication, dot product (inner product) or
|
||||
vector-matrix multiplication.
|
||||
|
||||
a * b (new object)
|
||||
vector-matrix multiplication. (new object)
|
||||
|
||||
:type other: scalar (or 1d list and 2d list)
|
||||
|
||||
@@ -755,27 +833,30 @@ class matrix(list):
|
||||
\mathbf{C} &= \mathbf{A} \cdot \mathbf{B}
|
||||
|
||||
.. note::
|
||||
No size checking will be conducted, therefore no exceptions for
|
||||
wrong usage (result will be nonsense).
|
||||
No size checking will be conducted, therefore no exceptions
|
||||
for wrong usage (result will be nonsense).
|
||||
|
||||
: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)
|
||||
[[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)
|
||||
[[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::
|
||||
:meth:`__mul__`
|
||||
:meth:`vector.__mul__` for vector * matrix
|
||||
:meth:`__mul__` and :meth:`vector.__mul__` for vector * matrix
|
||||
"""
|
||||
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:
|
||||
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
|
||||
return self*other
|
||||
|
||||
@@ -894,10 +975,10 @@ class matrix(list):
|
||||
|
||||
uniform scaling if sx=sy=sz=s.
|
||||
Note that scaling happens around the origin, so objects not
|
||||
centered at the origin will have their centers move. To avoid this,
|
||||
either scale the object when it's located at the origin, or
|
||||
perform a translation afterwards to move the object back to where
|
||||
it should be.
|
||||
centered at the origin will have their centers move. To avoid
|
||||
this, either scale the object when it's located at the origin,
|
||||
or perform a translation afterwards to move the object back to
|
||||
where it should be.
|
||||
|
||||
.. math::
|
||||
\begin{bmatrix}
|
||||
@@ -919,7 +1000,8 @@ class matrix(list):
|
||||
0 & 0 & 0 & h
|
||||
\end{bmatrix}
|
||||
"""
|
||||
if not sy:
|
||||
# if not sy is not suitable because 0 is also false
|
||||
if sy is None:
|
||||
sy = sx
|
||||
sz = sx
|
||||
self[:] = matrix.s(sx, sy, sz) * self
|
||||
|
||||
@@ -12,8 +12,8 @@ import unittest
|
||||
|
||||
import os
|
||||
import sys
|
||||
sys.path.insert(0, os.path.abspath('../pylib'))
|
||||
from data import read, unique_ending, get_id, seq
|
||||
sys.path.insert(0, os.path.abspath('..'))
|
||||
from pylib.data import read, unique_ending, get_id, seq
|
||||
|
||||
|
||||
class TestData(unittest.TestCase):
|
||||
|
||||
@@ -13,9 +13,9 @@ import unittest
|
||||
import os
|
||||
import sys
|
||||
from pylab import array, argmax, subplot, plot, title, xlim, show, gradient, linspace
|
||||
sys.path.insert(0, os.path.abspath('../pylib'))
|
||||
from data import data_read
|
||||
from numerical.fit import gauss_fit
|
||||
sys.path.insert(0, os.path.abspath('..'))
|
||||
from pylib.data import read
|
||||
from pylib.numerical.fit import gauss_fit
|
||||
|
||||
|
||||
class TestFit(unittest.TestCase):
|
||||
@@ -23,7 +23,7 @@ class TestFit(unittest.TestCase):
|
||||
def test_gauss(self):
|
||||
"""test function"""
|
||||
file_name = "test_fit.dat"
|
||||
x, y = data_read(file_name, 3, 2)
|
||||
x, y = read(file_name, 3, 2)
|
||||
|
||||
subplot(2, 2, 1)
|
||||
plot(x, y, '.-')
|
||||
|
||||
@@ -13,69 +13,85 @@ import unittest
|
||||
import os
|
||||
import sys
|
||||
import math
|
||||
sys.path.insert(0, os.path.abspath('../pylib'))
|
||||
from mathematics import vector
|
||||
from geometry import Direction, Point, CS, Wireframe, Polygon
|
||||
sys.path.insert(0, os.path.abspath('..'))
|
||||
from pylib.geometry import Direction, Point, CS, Wireframe, Line, Polygon, Circle
|
||||
|
||||
class TestGeometry(unittest.TestCase):
|
||||
|
||||
def test_Direction(self):
|
||||
p = Direction()
|
||||
self.assertIsInstance(
|
||||
p, list)
|
||||
p,
|
||||
list)
|
||||
self.assertEqual(
|
||||
p, [1, 0, 0, 0])
|
||||
p,
|
||||
[1, 0, 0, 0])
|
||||
self.assertEqual(
|
||||
Direction(2, 3, 4), [2, 3, 4, 0])
|
||||
Direction(2, 3, 4),
|
||||
[2, 3, 4, 0])
|
||||
|
||||
self.assertIsInstance(
|
||||
p, vector)
|
||||
def test_Direction_getitem(self):
|
||||
self.assertEqual(
|
||||
p, vector([1, 0, 0, 0]))
|
||||
Direction()[:3],
|
||||
[1, 0, 0])
|
||||
self.assertEqual(
|
||||
Direction(2, 3, 4), vector([2, 3, 4, 0]))
|
||||
|
||||
def test_Direction_xyz(self):
|
||||
self.assertEqual(
|
||||
Direction().xyz(), [1, 0, 0])
|
||||
self.assertEqual(
|
||||
Direction(1, -1, 1).xyz(), [1, -1, 1])
|
||||
Direction(1, -1, 1)[:3],
|
||||
[1, -1, 1])
|
||||
|
||||
def test_Point(self):
|
||||
p = Point()
|
||||
self.assertIsInstance(
|
||||
p, list)
|
||||
p,
|
||||
list)
|
||||
self.assertEqual(
|
||||
p, [0, 0, 0, 1])
|
||||
p,
|
||||
[0, 0, 0, 1])
|
||||
self.assertEqual(
|
||||
Point(2, 3, 4), [2, 3, 4, 1])
|
||||
Point(2, 3, 4),
|
||||
[2, 3, 4, 1])
|
||||
|
||||
self.assertIsInstance(
|
||||
p, vector)
|
||||
def test_Point_getitem(self):
|
||||
self.assertEqual(
|
||||
p, vector([0, 0, 0, 1]))
|
||||
Point()[:3],
|
||||
[0, 0, 0])
|
||||
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(
|
||||
Point().xyz(), [0, 0, 0])
|
||||
self.assertEqual(
|
||||
Point(1, -1, 1).xyz(), [1, -1, 1])
|
||||
CS(),
|
||||
[[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 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):
|
||||
self.assertEqual(
|
||||
Wireframe().points(), [])
|
||||
Wireframe().points(),
|
||||
[])
|
||||
|
||||
# it is possible to assign other objects then Points but/and the
|
||||
# class will not test if Points are used, this is just assumed
|
||||
self.assertEqual(
|
||||
Wireframe([]).points(), [[]])
|
||||
Wireframe([]).points(),
|
||||
[[]])
|
||||
|
||||
self.assertEqual(
|
||||
Wireframe(Point()).points(), [[0, 0, 0, 1]])
|
||||
Wireframe(Point()).points(),
|
||||
[[0, 0, 0, 1]])
|
||||
|
||||
def test_Line(self):
|
||||
self.assertEqual(
|
||||
Wireframe(Point()).points(), [vector([0, 0, 0, 1])])
|
||||
Line().points(),
|
||||
[[-1, 0, 0, 1], [1, 0, 0, 1]])
|
||||
|
||||
def test_Polygon(self):
|
||||
p0 = Point()
|
||||
@@ -87,6 +103,14 @@ class TestGeometry(unittest.TestCase):
|
||||
pg.points(),
|
||||
[[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):
|
||||
# example object to rotate
|
||||
p0 = Point()
|
||||
@@ -103,5 +127,23 @@ class TestGeometry(unittest.TestCase):
|
||||
pg.ch_cs(cs)
|
||||
[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__':
|
||||
unittest.main(verbosity=2)
|
||||
|
||||
@@ -14,10 +14,10 @@ import os
|
||||
import sys
|
||||
import math
|
||||
from numpy import allclose
|
||||
sys.path.insert(0, os.path.abspath('../pylib'))
|
||||
from data import fold_list
|
||||
from geometry2d import translate_xy, rotate_xy, interpolate_hermite, lines, cubics
|
||||
from geometry2d_plot import plot_lines, plot_cubic_lines
|
||||
sys.path.insert(0, os.path.abspath('..'))
|
||||
from pylib.data import fold_list
|
||||
from pylib.geometry2d import translate_xy, rotate_xy, interpolate_hermite, lines, cubics
|
||||
from pylib.geometry2d_plot import plot_lines, plot_cubic_lines
|
||||
|
||||
|
||||
class TestGeometry2d(unittest.TestCase):
|
||||
|
||||
@@ -12,10 +12,10 @@ import unittest
|
||||
|
||||
import os
|
||||
import sys
|
||||
sys.path.insert(0, os.path.abspath('../pylib'))
|
||||
sys.path.insert(0, os.path.abspath('..'))
|
||||
|
||||
import math
|
||||
from mathematics import vector, matrix
|
||||
from pylib.mathematics import vector, matrix
|
||||
|
||||
class TestGeometry(unittest.TestCase):
|
||||
|
||||
|
||||
@@ -19,10 +19,10 @@ from matplotlib.pyplot import figure, subplots, plot, show
|
||||
|
||||
import os
|
||||
import sys
|
||||
sys.path.insert(0, os.path.abspath('../pylib'))
|
||||
from numerical.ode import (e1, e2, e4, i1, newmark_newtonraphson,
|
||||
newmark_newtonraphson_rdk)
|
||||
from numerical.ode_model import disk, disk_nm, disk_nmmdk
|
||||
sys.path.insert(0, os.path.abspath('..'))
|
||||
from pylib.numerical.ode import (e1, e2, e4, i1,
|
||||
newmark_newtonraphson, newmark_newtonraphson_rdk)
|
||||
from pylib.numerical.ode_model import disk, disk_nm, disk_nmmdk
|
||||
|
||||
def plotx1rphi(x, t, title):
|
||||
"""Plot plane rotation (x, y, phi)
|
||||
|
||||
@@ -14,8 +14,8 @@ from time import mktime
|
||||
|
||||
import os
|
||||
import sys
|
||||
sys.path.insert(0, os.path.abspath('../pylib'))
|
||||
from time_of_day import (in_seconds, seconds, seconds_norm,
|
||||
sys.path.insert(0, os.path.abspath('..'))
|
||||
from pylib.time_of_day import (in_seconds, seconds, seconds_norm,
|
||||
minutes, minutes_norm, hours, hours_norm, days, days_norm,
|
||||
transform)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user