add issequence function to data and plot functions and examples for geometry
This commit is contained in:
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>
|
||||
|
||||
Reference in New Issue
Block a user