change data, mathematics, function, geometry and geometry_plot_pylab. add data_step, data_step_std and helper. add an example and more documentation.
inside the data module rename read to read_columns add add new read function to read the whole file as string. add print_list function to print one element per line. add unique_list and unique_list_hashable to reduce the list into a unique list with same order. add find_last, str_between, str_to_list functions. inside the mathematics module for vector add normalized creating a new object (normalize will change the object), isclose and iscloseto, change ang to round internal number. for matrix improve slicing and add transposed creating a new object (transpose will change object). inside the function module add b_spline_basis, b_spline_curve_with_knots and b_spline_knots functions. add sample_hal_open and sample_half_open_seq. add circle and ellipse. inside the geometry module change CS init from using lists to Directions and add new constructor CS.init_xzy using lists. rename Wireframe to Polyline. add classes B_spline_curve_with_knots, Ellipse, ArcCircle, ArcEllipse, ArcBSplineCurveWithKnots. add function sample_half_open to create a list of Points. inside the geometry_plot_pylab module change the help text. add step_and data data_step_std module to read a step file to list and draw the content. add helper module with context manager and decorator timeit to meassure the time for a section or function. add example for b_spline function.
This commit is contained in:
2
docs/build/html/.buildinfo
vendored
2
docs/build/html/.buildinfo
vendored
@@ -1,4 +1,4 @@
|
||||
# Sphinx build info version 1
|
||||
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
|
||||
config: caf5792fd17da2c604992977d35f1f60
|
||||
config: 2580fd671a06d4c76900a6be80ac7ca7
|
||||
tags: 645f666f9bcd5a90fca523b33c5a78b7
|
||||
|
||||
3
docs/build/html/_modules/index.html
vendored
3
docs/build/html/_modules/index.html
vendored
@@ -34,6 +34,8 @@
|
||||
|
||||
<h1>All modules for which code is available</h1>
|
||||
<ul><li><a href="pylib/data.html">pylib.data</a></li>
|
||||
<li><a href="pylib/data_step.html">pylib.data_step</a></li>
|
||||
<li><a href="pylib/data_step_std.html">pylib.data_step_std</a></li>
|
||||
<li><a href="pylib/date.html">pylib.date</a></li>
|
||||
<li><a href="pylib/drawblock.html">pylib.drawblock</a></li>
|
||||
<li><a href="pylib/function.html">pylib.function</a></li>
|
||||
@@ -41,6 +43,7 @@
|
||||
<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/helper.html">pylib.helper</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>
|
||||
|
||||
142
docs/build/html/_modules/pylib/data.html
vendored
142
docs/build/html/_modules/pylib/data.html
vendored
@@ -35,9 +35,10 @@
|
||||
<h1>Source code for pylib.data</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">"""Read and write data to or from file and manipulate data structures.</span>
|
||||
<span class="sd">"""Read and write data to or from file and manipulate data</span>
|
||||
<span class="sd">structures.</span>
|
||||
|
||||
<span class="sd">:Date: 2019-10-11</span>
|
||||
<span class="sd">:Date: 2019-12-28</span>
|
||||
|
||||
<span class="sd">.. module:: data</span>
|
||||
<span class="sd"> :platform: *nix, Windows</span>
|
||||
@@ -48,6 +49,7 @@
|
||||
<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>
|
||||
<span class="kn">import</span> <span class="nn">re</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>
|
||||
@@ -78,11 +80,25 @@
|
||||
<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>
|
||||
<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="sd">"""Read ascii data file.</span>
|
||||
|
||||
<span class="sd"> :param filename: file to read</span>
|
||||
<span class="sd"> :type filename: str</span>
|
||||
|
||||
<span class="sd"> :returns: file content</span>
|
||||
<span class="sd"> :rtype: str</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">file_str</span> <span class="o">=</span> <span class="s1">''</span>
|
||||
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">file_name</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
|
||||
<span class="n">file_str</span> <span class="o">=</span> <span class="n">file</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
|
||||
<span class="k">return</span> <span class="n">file_str</span></div>
|
||||
|
||||
<div class="viewcode-block" id="read_columns"><a class="viewcode-back" href="../../pylib.data.html#pylib.data.read_columns">[docs]</a><span class="k">def</span> <span class="nf">read_columns</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>
|
||||
|
||||
<span class="sd"> :param file_name: file to read</span>
|
||||
<span class="sd"> :type file_name: str</span>
|
||||
<span class="sd"> :param x_column: column index for the x data (first column is 0)</span>
|
||||
<span class="sd"> :type x_column: int</span>
|
||||
<span class="sd"> :param y_column: column index for the y data (first column is 0)</span>
|
||||
@@ -95,8 +111,6 @@
|
||||
<span class="sd"> :returns: x and y</span>
|
||||
<span class="sd"> :rtype: tuple(list, list)</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="kn">import</span> <span class="nn">re</span>
|
||||
|
||||
<span class="n">x</span> <span class="o">=</span> <span class="n">default</span>
|
||||
<span class="n">y</span> <span class="o">=</span> <span class="n">default</span>
|
||||
|
||||
@@ -167,6 +181,14 @@
|
||||
<span class="c1"># every dump needs a load</span>
|
||||
<span class="n">pickle</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">object_data</span><span class="p">,</span> <span class="n">output</span><span class="p">,</span> <span class="n">pickle</span><span class="o">.</span><span class="n">HIGHEST_PROTOCOL</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="print_list"><a class="viewcode-back" href="../../pylib.data.html#pylib.data.print_list">[docs]</a><span class="k">def</span> <span class="nf">print_list</span><span class="p">(</span><span class="n">lst</span><span class="p">):</span>
|
||||
<span class="sd">"""Print list, one list element per line.</span>
|
||||
|
||||
<span class="sd"> :param lst: list to print</span>
|
||||
<span class="sd"> :type lst: list</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="p">[</span><span class="nb">print</span><span class="p">(</span><span class="n">row</span><span class="p">)</span> <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">lst</span><span class="p">]</span></div>
|
||||
|
||||
<div class="viewcode-block" id="fold_list"><a class="viewcode-back" href="../../pylib.data.html#pylib.data.fold_list">[docs]</a><span class="k">def</span> <span class="nf">fold_list</span><span class="p">(</span><span class="n">lst</span><span class="p">,</span> <span class="n">n</span><span class="p">):</span>
|
||||
<span class="sd">"""Convert one-dimensional kx1 array (list) to two-dimensional mxn</span>
|
||||
<span class="sd"> array. m = k / n</span>
|
||||
@@ -238,6 +260,24 @@
|
||||
<span class="n">lst</span> <span class="o">=</span> <span class="p">[</span><span class="nb">round</span><span class="p">(</span><span class="n">start</span> <span class="o">+</span> <span class="n">step</span><span class="o">*</span><span class="n">i</span><span class="p">,</span> <span class="n">exponent</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="k">return</span> <span class="n">lst</span></div>
|
||||
|
||||
<div class="viewcode-block" id="unique_list_hashable"><a class="viewcode-back" href="../../pylib.data.html#pylib.data.unique_list_hashable">[docs]</a><span class="k">def</span> <span class="nf">unique_list_hashable</span><span class="p">(</span><span class="n">sequence</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> faster using set() but elements of the sequence must be hashable.</span>
|
||||
<span class="sd"> unhashable types: 'list'</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="c1"># https://stackoverflow.com/a/37163210</span>
|
||||
<span class="n">used</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
|
||||
<span class="c1"># .add(x) will always be falsy</span>
|
||||
<span class="k">return</span> <span class="p">[</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">sequence</span> <span class="k">if</span> <span class="n">x</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">used</span> <span class="ow">and</span> <span class="p">(</span><span class="n">used</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="ow">or</span> <span class="kc">True</span><span class="p">)]</span></div>
|
||||
|
||||
<div class="viewcode-block" id="unique_list"><a class="viewcode-back" href="../../pylib.data.html#pylib.data.unique_list">[docs]</a><span class="k">def</span> <span class="nf">unique_list</span><span class="p">(</span><span class="n">sequence</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="c1"># https://stackoverflow.com/a/37163210</span>
|
||||
<span class="n">used</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="c1"># .append(x) will always be falsy</span>
|
||||
<span class="k">return</span> <span class="p">[</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">sequence</span> <span class="k">if</span> <span class="n">x</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">used</span> <span class="ow">and</span> <span class="p">(</span><span class="n">used</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="ow">or</span> <span class="kc">True</span><span class="p">)]</span></div>
|
||||
|
||||
<div class="viewcode-block" id="unique_ending"><a class="viewcode-back" href="../../pylib.data.html#pylib.data.unique_ending">[docs]</a><span class="k">def</span> <span class="nf">unique_ending</span><span class="p">(</span><span class="n">ids</span><span class="p">,</span> <span class="n">n</span><span class="o">=</span><span class="mi">1</span><span class="p">):</span>
|
||||
<span class="sd">"""From id list get list with unique ending.</span>
|
||||
|
||||
@@ -249,12 +289,11 @@
|
||||
<span class="sd"> :returns: unique ending of ids</span>
|
||||
<span class="sd"> :rtype: list</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="n">ids</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="n">x</span> <span class="o">=</span> <span class="p">[</span><span class="n">idi</span><span class="p">[</span><span class="o">-</span><span class="n">n</span><span class="p">:]</span> <span class="k">for</span> <span class="n">idi</span> <span class="ow">in</span> <span class="n">ids</span><span class="p">]</span>
|
||||
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="o">></span> <span class="nb">len</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">x</span><span class="p">)):</span>
|
||||
<span class="k">return</span> <span class="n">unique_ending</span><span class="p">(</span><span class="n">ids</span><span class="p">,</span> <span class="n">n</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">x</span></div>
|
||||
<span class="n">x</span> <span class="o">=</span> <span class="p">[</span><span class="n">idi</span><span class="p">[</span><span class="o">-</span><span class="n">n</span><span class="p">:]</span> <span class="k">for</span> <span class="n">idi</span> <span class="ow">in</span> <span class="n">ids</span><span class="p">]</span>
|
||||
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="o">></span> <span class="nb">len</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">x</span><span class="p">)):</span>
|
||||
<span class="k">return</span> <span class="n">unique_ending</span><span class="p">(</span><span class="n">ids</span><span class="p">,</span> <span class="n">n</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">x</span></div>
|
||||
|
||||
<div class="viewcode-block" id="get_id"><a class="viewcode-back" href="../../pylib.data.html#pylib.data.get_id">[docs]</a><span class="k">def</span> <span class="nf">get_id</span><span class="p">(</span><span class="n">ids</span><span class="p">,</span> <span class="n">uide</span><span class="p">):</span>
|
||||
<span class="sd">"""Get full id from unique id ending.</span>
|
||||
@@ -269,6 +308,87 @@
|
||||
<span class="sd"> """</span>
|
||||
<span class="c1"># take first element, because we know it is a unique ending</span>
|
||||
<span class="k">return</span> <span class="p">[</span><span class="n">idi</span> <span class="k">for</span> <span class="n">idi</span> <span class="ow">in</span> <span class="n">ids</span> <span class="k">if</span> <span class="n">idi</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="n">uide</span><span class="p">)][</span><span class="mi">0</span><span class="p">]</span></div>
|
||||
|
||||
<div class="viewcode-block" id="find_last"><a class="viewcode-back" href="../../pylib.data.html#pylib.data.find_last">[docs]</a><span class="k">def</span> <span class="nf">find_last</span><span class="p">(</span><span class="n">sequence</span><span class="p">,</span> <span class="n">pattern</span><span class="p">):</span>
|
||||
<span class="sd">"""Find last last occurance in sequence (text)</span>
|
||||
|
||||
<span class="sd"> :param sequence: text to search in</span>
|
||||
<span class="sd"> :type sequence: str</span>
|
||||
<span class="sd"> :param pattern: search pattern</span>
|
||||
<span class="sd"> :type pattern: str</span>
|
||||
|
||||
<span class="sd"> :returns: index (-1 if pattern not in sequence)</span>
|
||||
<span class="sd"> :rtype: int</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="n">pattern</span> <span class="ow">in</span> <span class="n">sequence</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="n">sequence</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span> <span class="o">-</span> <span class="n">sequence</span><span class="p">[::</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">pattern</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="o">-</span><span class="mi">1</span></div>
|
||||
|
||||
<div class="viewcode-block" id="str_between"><a class="viewcode-back" href="../../pylib.data.html#pylib.data.str_between">[docs]</a><span class="k">def</span> <span class="nf">str_between</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">left</span><span class="p">,</span> <span class="n">right</span><span class="p">):</span>
|
||||
<span class="sd">"""Get text between two pattern.</span>
|
||||
|
||||
<span class="sd"> Text can be multi-line.</span>
|
||||
|
||||
<span class="sd"> :param text: text to search in</span>
|
||||
<span class="sd"> :type text: str</span>
|
||||
<span class="sd"> :param left: left pattern</span>
|
||||
<span class="sd"> :type left: str</span>
|
||||
<span class="sd"> :param right: right pattern</span>
|
||||
<span class="sd"> :type right: str</span>
|
||||
|
||||
<span class="sd"> :returns: text between the left and right pattern</span>
|
||||
<span class="sd"> :rtype: str</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">re</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">left</span><span class="o">+</span><span class="s1">'(.+?)'</span><span class="o">+</span><span class="n">right</span><span class="p">,</span> <span class="n">text</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">DOTALL</span><span class="p">)</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
|
||||
<span class="k">except</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="s1">''</span></div>
|
||||
|
||||
<div class="viewcode-block" id="str_to_list"><a class="viewcode-back" href="../../pylib.data.html#pylib.data.str_to_list">[docs]</a><span class="k">def</span> <span class="nf">str_to_list</span><span class="p">(</span><span class="n">string</span><span class="p">,</span> <span class="n">delimiter</span><span class="o">=</span><span class="s1">';</span><span class="se">\n</span><span class="s1">'</span><span class="p">,</span> <span class="n">newline_replacement</span><span class="o">=</span><span class="s1">''</span><span class="p">):</span>
|
||||
<span class="sa">r</span><span class="sd">"""Converts a string with block information into a list.</span>
|
||||
|
||||
<span class="sd"> This function un-wraps multi-line block information into one line.</span>
|
||||
|
||||
<span class="sd"> :param string: string with block information</span>
|
||||
<span class="sd"> :type string: str</span>
|
||||
<span class="sd"> :param delimiter: block delimiter (default = ';\n'). This will be</span>
|
||||
<span class="sd"> removed from the resulting list.</span>
|
||||
<span class="sd"> :type delimiter: str</span>
|
||||
<span class="sd"> :param newline_replacement: block lines replacement (default = '')</span>
|
||||
<span class="sd"> :type newline_replacement: str</span>
|
||||
|
||||
<span class="sd"> :returns: list of block information</span>
|
||||
<span class="sd"> :rtype: list</span>
|
||||
|
||||
<span class="sd"> .. note:: Every line is left striped. Empty line are ignored.</span>
|
||||
|
||||
<span class="sd"> :Example:</span>
|
||||
|
||||
<span class="sd"> ::</span>
|
||||
|
||||
<span class="sd"> before (string):</span>
|
||||
<span class="sd"> FILE_DESCRIPTION(('Open CASCADE Model'),'2;1');</span>
|
||||
<span class="sd"> FILE_NAME('Open CASCADE Shape Model','2019-10-14T14:32:20',('Author'),(</span>
|
||||
<span class="sd"> 'Open CASCADE'),'Open CASCADE STEP processor 7.1','Open CASCADE 7.1'</span>
|
||||
<span class="sd"> ,'Unknown');</span>
|
||||
<span class="sd"> FILE_SCHEMA(('AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }'));</span>
|
||||
|
||||
<span class="sd"> after (list elements one per line):</span>
|
||||
<span class="sd"> FILE_DESCRIPTION(('Open CASCADE Model'),'2;1')</span>
|
||||
<span class="sd"> FILE_NAME('Open CASCADE Shape Model','2019-10-14T14:32:20',('Author'),('Open CASCADE'),'Open CASCADE STEP processor 7.1','Open CASCADE 7.1','Unknown')</span>
|
||||
<span class="sd"> FILE_SCHEMA(('AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }'))</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="c1"># for example blocks are seperated by ;\n</span>
|
||||
<span class="n">blocks</span> <span class="o">=</span> <span class="n">string</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">delimiter</span><span class="p">)</span>
|
||||
<span class="n">lines</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="k">for</span> <span class="n">block</span> <span class="ow">in</span> <span class="n">blocks</span><span class="p">:</span>
|
||||
<span class="c1"># un-wrap block to single line</span>
|
||||
<span class="c1"># remove \n and replace with newline_replacement</span>
|
||||
<span class="n">line</span> <span class="o">=</span> <span class="n">newline_replacement</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="n">row</span><span class="o">.</span><span class="n">lstrip</span><span class="p">()</span> <span class="k">for</span>
|
||||
<span class="n">row</span> <span class="ow">in</span> <span class="n">block</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">'</span><span class="p">)])</span>
|
||||
<span class="c1"># append line if True (if it has some content)</span>
|
||||
<span class="n">lines</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> <span class="k">if</span> <span class="nb">bool</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> <span class="k">else</span> <span class="kc">False</span>
|
||||
<span class="k">return</span> <span class="n">lines</span></div>
|
||||
</pre></div>
|
||||
|
||||
</div>
|
||||
|
||||
785
docs/build/html/_modules/pylib/data_step.html
vendored
Normal file
785
docs/build/html/_modules/pylib/data_step.html
vendored
Normal file
@@ -0,0 +1,785 @@
|
||||
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>pylib.data_step — 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.data_step</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">"""STEP reader.</span>
|
||||
|
||||
<span class="sd">:Date: 2020-01-03</span>
|
||||
|
||||
<span class="sd">.. module:: data_step</span>
|
||||
<span class="sd"> :platform: *nix, Windows</span>
|
||||
<span class="sd"> :synopsis: STEP reader.</span>
|
||||
|
||||
<span class="sd">.. moduleauthor:: Daniel Weschke <daniel.weschke@directbox.de></span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="kn">from</span> <span class="nn">.data</span> <span class="kn">import</span> <span class="n">read</span><span class="p">,</span> <span class="n">find_last</span><span class="p">,</span> <span class="n">str_between</span><span class="p">,</span> <span class="n">str_to_list</span>
|
||||
<span class="kn">from</span> <span class="nn">.data_step_std</span> <span class="kn">import</span> <span class="p">(</span>
|
||||
<span class="n">CARTESIAN_POINT</span><span class="p">,</span> <span class="n">VERTEX_POINT</span><span class="p">,</span> <span class="n">DIRECTION</span><span class="p">,</span> <span class="n">VECTOR</span><span class="p">,</span> <span class="n">LINE</span><span class="p">,</span>
|
||||
<span class="n">AXIS2_PLACEMENT_2D</span><span class="p">,</span> <span class="n">AXIS2_PLACEMENT_3D</span><span class="p">,</span> <span class="n">CIRCLE</span><span class="p">,</span> <span class="n">SURFACE_CURVE</span><span class="p">,</span>
|
||||
<span class="n">SEAM_CURVE</span><span class="p">,</span> <span class="n">EDGE_CURVE</span><span class="p">,</span> <span class="n">B_SPLINE_CURVE_WITH_KNOTS</span><span class="p">,</span>
|
||||
<span class="n">ORIENTED_EDGE</span><span class="p">,</span> <span class="n">EDGE_LOOP</span><span class="p">,</span> <span class="n">ELLIPSE</span>
|
||||
<span class="p">)</span>
|
||||
<span class="kn">from</span> <span class="nn">.mathematics</span> <span class="kn">import</span> <span class="n">vector</span>
|
||||
<span class="kn">from</span> <span class="nn">.geometry</span> <span class="kn">import</span> <span class="p">(</span>
|
||||
<span class="n">World</span><span class="p">,</span> <span class="n">Line</span><span class="p">,</span> <span class="n">Point</span><span class="p">,</span> <span class="n">Circle</span><span class="p">,</span> <span class="n">CS</span><span class="p">,</span> <span class="n">ArcCircle</span><span class="p">,</span> <span class="n">ArcEllipse</span><span class="p">,</span> <span class="n">Direction</span><span class="p">,</span>
|
||||
<span class="n">Polyline</span><span class="p">,</span> <span class="n">Ellipse</span><span class="p">,</span> <span class="n">B_spline_curve_with_knots</span><span class="p">,</span> <span class="n">ArcBSplineCurveWithKnots</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<div class="viewcode-block" id="step"><a class="viewcode-back" href="../../pylib.data_step.html#pylib.data_step.step">[docs]</a><span class="k">class</span> <span class="nc">step</span><span class="p">:</span>
|
||||
<span class="sa">r</span><span class="sd">"""STEP reader class.</span>
|
||||
|
||||
<span class="sd"> 1st read a STEP file.</span>
|
||||
<span class="sd"> 2nd convert header and data section string to list of commands.</span>
|
||||
|
||||
<span class="sd"> The STEP file string can have commands distributed over several</span>
|
||||
<span class="sd"> lines, the commands are seperated by ``;\n``. This class un-wraps</span>
|
||||
<span class="sd"> each command into one line (remove ``\n``) and removes empty lines.</span>
|
||||
|
||||
<span class="sd"> :Example:</span>
|
||||
|
||||
<span class="sd"> ::</span>
|
||||
|
||||
<span class="sd"> header part of a step file (between HEADER; and ENDSEC;):</span>
|
||||
<span class="sd"> FILE_DESCRIPTION(('Open CASCADE Model'),'2;1');</span>
|
||||
<span class="sd"> FILE_NAME('Open CASCADE Shape Model','2019-10-14T14:32:20',('Author'),(</span>
|
||||
<span class="sd"> 'Open CASCADE'),'Open CASCADE STEP processor 7.1','Open CASCADE 7.1'</span>
|
||||
<span class="sd"> ,'Unknown');</span>
|
||||
<span class="sd"> FILE_SCHEMA(('AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }'));</span>
|
||||
|
||||
<span class="sd"> will result in (but as a list):</span>
|
||||
<span class="sd"> FILE_DESCRIPTION(('Open CASCADE Model'),'2;1')</span>
|
||||
<span class="sd"> FILE_NAME('Open CASCADE Shape Model','2019-10-14T14:32:20',('Author'),('Open CASCADE'),'Open CASCADE STEP processor 7.1','Open CASCADE 7.1','Unknown')</span>
|
||||
<span class="sd"> FILE_SCHEMA(('AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }'))</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="n">file_name</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">file_str</span> <span class="o">=</span> <span class="n">read</span><span class="p">(</span><span class="n">file_name</span><span class="p">)</span>
|
||||
|
||||
<span class="n">step_str</span> <span class="o">=</span> <span class="n">str_between</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">file_str</span><span class="p">,</span> <span class="s1">'ISO-10303-21;'</span><span class="p">,</span>
|
||||
<span class="s1">'END-ISO-10303-21;'</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">step_str</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">'File is not a step file'</span><span class="p">)</span>
|
||||
|
||||
<span class="n">header_str</span> <span class="o">=</span> <span class="n">str_between</span><span class="p">(</span><span class="n">step_str</span><span class="p">,</span> <span class="s1">'HEADER;'</span><span class="p">,</span> <span class="s1">'ENDSEC;'</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">header</span> <span class="o">=</span> <span class="n">str_to_list</span><span class="p">(</span><span class="n">string</span><span class="o">=</span><span class="n">header_str</span><span class="p">,</span> <span class="n">delimiter</span><span class="o">=</span><span class="s1">';</span><span class="se">\n</span><span class="s1">'</span><span class="p">,</span>
|
||||
<span class="n">newline_replacement</span><span class="o">=</span><span class="s1">''</span><span class="p">)</span>
|
||||
<span class="n">data_str</span> <span class="o">=</span> <span class="n">str_between</span><span class="p">(</span><span class="n">step_str</span><span class="p">,</span> <span class="s1">'DATA;'</span><span class="p">,</span> <span class="s1">'ENDSEC;'</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="n">str_to_list</span><span class="p">(</span><span class="n">string</span><span class="o">=</span><span class="n">data_str</span><span class="p">,</span> <span class="n">delimiter</span><span class="o">=</span><span class="s1">';</span><span class="se">\n</span><span class="s1">'</span><span class="p">,</span>
|
||||
<span class="n">newline_replacement</span><span class="o">=</span><span class="s1">''</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="str_to_cmd_args"><a class="viewcode-back" href="../../pylib.data_step.html#pylib.data_step.str_to_cmd_args">[docs]</a><span class="k">def</span> <span class="nf">str_to_cmd_args</span><span class="p">(</span><span class="n">cmd_str</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Using negative lookahead to match all the commas which are not</span>
|
||||
<span class="sd"> inside a parenthesis and then split the string at the commas.</span>
|
||||
|
||||
<span class="sd"> :Example:</span>
|
||||
|
||||
<span class="sd"> ::</span>
|
||||
|
||||
<span class="sd"> CARTESIAN_POINT('',(0.E+000,0.E+000,0.E+000))</span>
|
||||
<span class="sd"> will become</span>
|
||||
<span class="sd"> command = 'CARTESIAN_POINT'</span>
|
||||
<span class="sd"> arguments = ['', '(0.E+000,0.E+000,0.E+000)']</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="kn">import</span> <span class="nn">re</span>
|
||||
|
||||
<span class="n">command</span> <span class="o">=</span> <span class="n">cmd_str</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="n">cmd_str</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s1">'('</span><span class="p">)]</span>
|
||||
<span class="n">inside_parenthesis</span> <span class="o">=</span> <span class="n">cmd_str</span><span class="p">[(</span><span class="n">cmd_str</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s1">'('</span><span class="p">)</span><span class="o">+</span><span class="mi">1</span><span class="p">):</span><span class="n">find_last</span><span class="p">(</span><span class="n">cmd_str</span><span class="p">,</span> <span class="s1">')'</span><span class="p">)]</span>
|
||||
<span class="n">arguments</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="sa">r</span><span class="s1">',\s*(?![^()]*\))'</span><span class="p">,</span> <span class="n">inside_parenthesis</span><span class="p">)</span>
|
||||
<span class="c1"># arguments = [i.strip() for i in inside_parenthesis.split(',')] # does not work for arguments with commas inside the parenthsis</span>
|
||||
<span class="k">return</span> <span class="n">command</span><span class="p">,</span> <span class="n">arguments</span></div>
|
||||
|
||||
<div class="viewcode-block" id="data_cmds_to_data_dict"><a class="viewcode-back" href="../../pylib.data_step.html#pylib.data_step.data_cmds_to_data_dict">[docs]</a><span class="k">def</span> <span class="nf">data_cmds_to_data_dict</span><span class="p">(</span><span class="n">data_cmds</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">"""Create dict with step objects</span>
|
||||
|
||||
<span class="sd"> 1st it creats keys equal to the number id string and values with</span>
|
||||
<span class="sd"> the command string.</span>
|
||||
|
||||
<span class="sd"> 2nd it creats keys for different step object types to dict all</span>
|
||||
<span class="sd"> commands as new created objects of that type.</span>
|
||||
|
||||
<span class="sd"> :Example:</span>
|
||||
|
||||
<span class="sd"> ::</span>
|
||||
|
||||
<span class="sd"> from:</span>
|
||||
<span class="sd"> ["#12 = CARTESIAN_POINT('',(0.E+000,0.E+000,0.E+000))",</span>
|
||||
<span class="sd"> "#22 = VERTEX_POINT('',#23)"]</span>
|
||||
<span class="sd"> to:</span>
|
||||
<span class="sd"> {'#12': 'CARTESIAN_POINT('',(0.E+000,0.E+000,0.E+000))',</span>
|
||||
<span class="sd"> '#22': 'VERTEX_POINT('',#23)'}</span>
|
||||
|
||||
<span class="sd"> additional</span>
|
||||
<span class="sd"> {</span>
|
||||
<span class="sd"> 'cartesian_points': {</span>
|
||||
<span class="sd"> '#12': pointer_to_new_created_point_object,</span>
|
||||
<span class="sd"> ...</span>
|
||||
<span class="sd"> },</span>
|
||||
<span class="sd"> 'vertex_points': {</span>
|
||||
<span class="sd"> '#22': pointer_to_new_created_vertex_object,</span>
|
||||
<span class="sd"> ...</span>
|
||||
<span class="sd"> },</span>
|
||||
<span class="sd"> ...</span>
|
||||
<span class="sd"> }</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">data_dict</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
<span class="n">data_dict</span><span class="p">[</span><span class="s1">'cmds'</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
<span class="n">data_dict</span><span class="p">[</span><span class="s1">'cartesian_point'</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
<span class="n">data_dict</span><span class="p">[</span><span class="s1">'vertex_point'</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
<span class="n">data_dict</span><span class="p">[</span><span class="s1">'direction'</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
<span class="n">data_dict</span><span class="p">[</span><span class="s1">'vector'</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
<span class="n">data_dict</span><span class="p">[</span><span class="s1">'line'</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
<span class="n">data_dict</span><span class="p">[</span><span class="s1">'circle'</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
<span class="n">data_dict</span><span class="p">[</span><span class="s1">'ellipse'</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
<span class="n">data_dict</span><span class="p">[</span><span class="s1">'axis2_placement_2d'</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
<span class="n">data_dict</span><span class="p">[</span><span class="s1">'axis2_placement_3d'</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
<span class="n">data_dict</span><span class="p">[</span><span class="s1">'surface_curve'</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
<span class="n">data_dict</span><span class="p">[</span><span class="s1">'seam_curve'</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
<span class="n">data_dict</span><span class="p">[</span><span class="s1">'b_spline_curve_with_knots'</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
<span class="n">data_dict</span><span class="p">[</span><span class="s1">'edge_curve'</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
<span class="n">data_dict</span><span class="p">[</span><span class="s1">'oriented_edge'</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
<span class="n">data_dict</span><span class="p">[</span><span class="s1">'edge_loop'</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
<span class="n">processed_cmds</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="n">ignored_cmds</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="k">for</span> <span class="n">data_cmd</span> <span class="ow">in</span> <span class="n">data_cmds</span><span class="p">:</span>
|
||||
<span class="c1">#print(data_cmd)</span>
|
||||
<span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="o">=</span> <span class="n">data_cmd</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'='</span><span class="p">)</span>
|
||||
<span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="o">=</span> <span class="n">key</span><span class="o">.</span><span class="n">strip</span><span class="p">(),</span> <span class="n">value</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
||||
<span class="n">command</span><span class="p">,</span> <span class="n">arguments</span> <span class="o">=</span> <span class="n">str_to_cmd_args</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
||||
<span class="n">data_dict</span><span class="p">[</span><span class="s1">'cmds'</span><span class="p">][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="n">arguments</span><span class="p">)</span>
|
||||
<span class="c1"># command can be empty (empty string: '')</span>
|
||||
<span class="c1"># #2052 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','') )</span>
|
||||
<span class="k">try</span><span class="p">:</span> <span class="c1"># do if command.lower() is in data_dict else do nothing</span>
|
||||
<span class="n">data_dict</span><span class="p">[</span><span class="n">command</span><span class="o">.</span><span class="n">lower</span><span class="p">()][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="n">processed_cmds</span> <span class="o">+=</span> <span class="mi">1</span>
|
||||
<span class="k">except</span><span class="p">:</span>
|
||||
<span class="n">ignored_cmds</span> <span class="o">+=</span> <span class="mi">1</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s1">'processed_cmds'</span><span class="p">,</span> <span class="n">processed_cmds</span><span class="p">)</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s1">'ignored_cmds'</span><span class="p">,</span> <span class="n">ignored_cmds</span><span class="p">)</span>
|
||||
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># Order is important!</span>
|
||||
<span class="c1">#</span>
|
||||
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># POINT objects</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># create point objects, these will be referenced by vertex_points</span>
|
||||
<span class="c1"># #12 = CARTESIAN_POINT('',(0.E+000,0.E+000,0.E+000));</span>
|
||||
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'cartesian_point'</span><span class="p">]:</span>
|
||||
<span class="n">command</span><span class="p">,</span> <span class="n">arguments</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'cmds'</span><span class="p">][</span><span class="n">key</span><span class="p">]</span>
|
||||
<span class="n">data_dict</span><span class="p">[</span><span class="s1">'cartesian_point'</span><span class="p">][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">CARTESIAN_POINT</span><span class="p">(</span>
|
||||
<span class="n">arguments</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
|
||||
<span class="nb">eval</span><span class="p">(</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]))</span> <span class="c1"># tuple of floats # TODO: not use eval!</span>
|
||||
<span class="c1"># vertex_points references to cartesian_points</span>
|
||||
<span class="c1"># #22 = VERTEX_POINT('',#23);</span>
|
||||
<span class="c1"># #23 = CARTESIAN_POINT('',(0.E+000,0.E+000,0.E+000));</span>
|
||||
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'vertex_point'</span><span class="p">]:</span>
|
||||
<span class="n">command</span><span class="p">,</span> <span class="n">arguments</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'cmds'</span><span class="p">][</span><span class="n">key</span><span class="p">]</span>
|
||||
<span class="n">data_dict</span><span class="p">[</span><span class="s1">'vertex_point'</span><span class="p">][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">VERTEX_POINT</span><span class="p">(</span>
|
||||
<span class="n">arguments</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
|
||||
<span class="n">data_dict</span><span class="p">[</span><span class="s1">'cartesian_point'</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]])</span>
|
||||
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># EDGE objects</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># DIRECTIONs</span>
|
||||
<span class="c1"># #30 = DIRECTION('',(0.E+000,0.E+000,1.));</span>
|
||||
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'direction'</span><span class="p">]:</span>
|
||||
<span class="n">command</span><span class="p">,</span> <span class="n">arguments</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'cmds'</span><span class="p">][</span><span class="n">key</span><span class="p">]</span>
|
||||
<span class="n">data_dict</span><span class="p">[</span><span class="s1">'direction'</span><span class="p">][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">DIRECTION</span><span class="p">(</span>
|
||||
<span class="n">arguments</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
|
||||
<span class="nb">eval</span><span class="p">(</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]))</span> <span class="c1"># tuple of floats # TODO: not use eval!</span>
|
||||
<span class="c1"># VECTORs references to DIRECTIONs</span>
|
||||
<span class="c1"># #29 = VECTOR('',#30,1.);</span>
|
||||
<span class="c1"># #30 = DIRECTION('',(0.E+000,0.E+000,1.));</span>
|
||||
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'vector'</span><span class="p">]:</span>
|
||||
<span class="n">command</span><span class="p">,</span> <span class="n">arguments</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'cmds'</span><span class="p">][</span><span class="n">key</span><span class="p">]</span>
|
||||
<span class="n">data_dict</span><span class="p">[</span><span class="s1">'vector'</span><span class="p">][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">VECTOR</span><span class="p">(</span>
|
||||
<span class="n">arguments</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
|
||||
<span class="n">data_dict</span><span class="p">[</span><span class="s1">'direction'</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]],</span>
|
||||
<span class="nb">eval</span><span class="p">(</span><span class="n">arguments</span><span class="p">[</span><span class="mi">2</span><span class="p">]))</span> <span class="c1"># TODO: not use eval!</span>
|
||||
<span class="c1"># LINEs references to cartesian_point and vector</span>
|
||||
<span class="c1"># #27 = LINE('',#28,#29);</span>
|
||||
<span class="c1"># #28 = CARTESIAN_POINT('',(0.E+000,0.E+000,0.E+000));</span>
|
||||
<span class="c1"># #29 = VECTOR('',#30,1.);</span>
|
||||
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'line'</span><span class="p">]:</span>
|
||||
<span class="n">command</span><span class="p">,</span> <span class="n">arguments</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'cmds'</span><span class="p">][</span><span class="n">key</span><span class="p">]</span>
|
||||
<span class="n">data_dict</span><span class="p">[</span><span class="s1">'line'</span><span class="p">][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">LINE</span><span class="p">(</span>
|
||||
<span class="n">arguments</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
|
||||
<span class="n">data_dict</span><span class="p">[</span><span class="s1">'cartesian_point'</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]],</span>
|
||||
<span class="n">data_dict</span><span class="p">[</span><span class="s1">'vector'</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">2</span><span class="p">]])</span>
|
||||
<span class="c1"># AXIS2_PLACEMENT_2Ds references to location (CARTESIAN_POINT) and ref_direction (DIRECTION)</span>
|
||||
<span class="c1"># #50 = AXIS2_PLACEMENT_2D('',#51,#52);</span>
|
||||
<span class="c1"># #51 = CARTESIAN_POINT('',(0.,0.));</span>
|
||||
<span class="c1"># #52 = DIRECTION('',(1.,0.));</span>
|
||||
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'axis2_placement_2d'</span><span class="p">]:</span>
|
||||
<span class="n">command</span><span class="p">,</span> <span class="n">arguments</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'cmds'</span><span class="p">][</span><span class="n">key</span><span class="p">]</span>
|
||||
<span class="n">data_dict</span><span class="p">[</span><span class="s1">'axis2_placement_2d'</span><span class="p">][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">AXIS2_PLACEMENT_2D</span><span class="p">(</span>
|
||||
<span class="n">arguments</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
|
||||
<span class="n">data_dict</span><span class="p">[</span><span class="s1">'cartesian_point'</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]],</span>
|
||||
<span class="n">data_dict</span><span class="p">[</span><span class="s1">'direction'</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">2</span><span class="p">]])</span>
|
||||
<span class="c1"># AXIS2_PLACEMENT_3Ds references to location (CARTESIAN_POINT), axis (DIRECTION) and ref_direction (DIRECTION)</span>
|
||||
<span class="c1"># #26 = AXIS2_PLACEMENT_3D('',#27,#28,#29);</span>
|
||||
<span class="c1"># #27 = CARTESIAN_POINT('',(0.,0.,10.));</span>
|
||||
<span class="c1"># #28 = DIRECTION('',(0.,0.,1.));</span>
|
||||
<span class="c1"># #29 = DIRECTION('',(1.,0.,-0.));</span>
|
||||
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'axis2_placement_3d'</span><span class="p">]:</span>
|
||||
<span class="n">command</span><span class="p">,</span> <span class="n">arguments</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'cmds'</span><span class="p">][</span><span class="n">key</span><span class="p">]</span>
|
||||
<span class="n">data_dict</span><span class="p">[</span><span class="s1">'axis2_placement_3d'</span><span class="p">][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">AXIS2_PLACEMENT_3D</span><span class="p">(</span>
|
||||
<span class="n">arguments</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
|
||||
<span class="n">data_dict</span><span class="p">[</span><span class="s1">'cartesian_point'</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]],</span>
|
||||
<span class="n">data_dict</span><span class="p">[</span><span class="s1">'direction'</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">2</span><span class="p">]],</span>
|
||||
<span class="n">data_dict</span><span class="p">[</span><span class="s1">'direction'</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">3</span><span class="p">]])</span>
|
||||
<span class="c1"># CIRCLE references to AXIS2_PLACEMENT_3D and radius</span>
|
||||
<span class="c1"># #25 = CIRCLE('',#26,5.);</span>
|
||||
<span class="c1"># #26 = AXIS2_PLACEMENT_3D('',#27,#28,#29);</span>
|
||||
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'circle'</span><span class="p">]:</span>
|
||||
<span class="n">command</span><span class="p">,</span> <span class="n">arguments</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'cmds'</span><span class="p">][</span><span class="n">key</span><span class="p">]</span>
|
||||
<span class="n">axis2_placement_cmd</span><span class="p">,</span> <span class="n">axis2_placement_args</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'cmds'</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
|
||||
<span class="k">if</span> <span class="n">axis2_placement_cmd</span> <span class="o">==</span> <span class="s1">'AXIS2_PLACEMENT_3D'</span><span class="p">:</span>
|
||||
<span class="n">axis2_placement</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'axis2_placement_3d'</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
|
||||
<span class="k">elif</span> <span class="n">axis2_placement_cmd</span> <span class="o">==</span> <span class="s1">'AXIS2_PLACEMENT_2D'</span><span class="p">:</span>
|
||||
<span class="n">axis2_placement</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'axis2_placement_2d'</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
|
||||
<span class="n">data_dict</span><span class="p">[</span><span class="s1">'circle'</span><span class="p">][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">CIRCLE</span><span class="p">(</span>
|
||||
<span class="n">arguments</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
|
||||
<span class="n">axis2_placement</span><span class="p">,</span>
|
||||
<span class="nb">eval</span><span class="p">(</span><span class="n">arguments</span><span class="p">[</span><span class="mi">2</span><span class="p">]))</span> <span class="c1"># TODO: not use eval!</span>
|
||||
<span class="c1"># ELLIPSE references to AXIS2_PLACEMENT_3D and both semi axes</span>
|
||||
<span class="c1"># #1049 = ELLIPSE('',#1050,176.13914953808,100.);</span>
|
||||
<span class="c1"># #1050 = AXIS2_PLACEMENT_3D('',#1051,#1052,#1053);</span>
|
||||
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'ellipse'</span><span class="p">]:</span>
|
||||
<span class="n">command</span><span class="p">,</span> <span class="n">arguments</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'cmds'</span><span class="p">][</span><span class="n">key</span><span class="p">]</span>
|
||||
<span class="n">axis2_placement_cmd</span><span class="p">,</span> <span class="n">axis2_placement_args</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'cmds'</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
|
||||
<span class="k">if</span> <span class="n">axis2_placement_cmd</span> <span class="o">==</span> <span class="s1">'AXIS2_PLACEMENT_3D'</span><span class="p">:</span>
|
||||
<span class="n">axis2_placement</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'axis2_placement_3d'</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
|
||||
<span class="k">elif</span> <span class="n">axis2_placement_cmd</span> <span class="o">==</span> <span class="s1">'AXIS2_PLACEMENT_2D'</span><span class="p">:</span>
|
||||
<span class="n">axis2_placement</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'axis2_placement_2d'</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
|
||||
<span class="n">data_dict</span><span class="p">[</span><span class="s1">'ellipse'</span><span class="p">][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">ELLIPSE</span><span class="p">(</span>
|
||||
<span class="n">arguments</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
|
||||
<span class="n">axis2_placement</span><span class="p">,</span>
|
||||
<span class="nb">eval</span><span class="p">(</span><span class="n">arguments</span><span class="p">[</span><span class="mi">2</span><span class="p">]),</span> <span class="c1"># TODO: not use eval!</span>
|
||||
<span class="nb">eval</span><span class="p">(</span><span class="n">arguments</span><span class="p">[</span><span class="mi">3</span><span class="p">]))</span> <span class="c1"># TODO: not use eval!</span>
|
||||
<span class="c1"># B_SPLINE_CURVE_WITH_KNOTS references to list of CARTESIAN_POINTs</span>
|
||||
<span class="c1"># #2195=B_SPLINE_CURVE_WITH_KNOTS('',3,(#43614,#43615,#43616,#43617,#43618,</span>
|
||||
<span class="c1"># #43619,#43620,#43621,#43622,#43623,#43624,#43625,#43626,#43627,#43628,#43629,</span>
|
||||
<span class="c1"># #43630,#43631,#43632,#43633),.UNSPECIFIED.,.F.,.F.,(4,2,2,2,2,2,2,2,2,4),</span>
|
||||
<span class="c1"># (-0.540362356556626,-0.521155983847334,-0.45632355837375,-0.391167894616668,</span>
|
||||
<span class="c1"># -0.32606569132423,-0.260898117378603,-0.19567917747905,-0.130414239126491,</span>
|
||||
<span class="c1"># -0.0649893846296135,-0.0228378692889149),.UNSPECIFIED.);</span>
|
||||
<span class="c1"># #43614=CARTESIAN_POINT('Ctrl Pts',(-0.852590969048745,68.3094592905054,1.00613961606655E-15));</span>
|
||||
<span class="c1"># #43615=CARTESIAN_POINT('Ctrl Pts',(-0.879956199816603,68.2515804555212,8.67420237522527E-16));</span>
|
||||
<span class="c1"># ...</span>
|
||||
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'b_spline_curve_with_knots'</span><span class="p">]:</span>
|
||||
<span class="n">command</span><span class="p">,</span> <span class="n">arguments</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'cmds'</span><span class="p">][</span><span class="n">key</span><span class="p">]</span>
|
||||
<span class="n">data_dict</span><span class="p">[</span><span class="s1">'b_spline_curve_with_knots'</span><span class="p">][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">B_SPLINE_CURVE_WITH_KNOTS</span><span class="p">(</span>
|
||||
<span class="n">arguments</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
|
||||
<span class="nb">int</span><span class="p">(</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]),</span>
|
||||
<span class="nb">tuple</span><span class="p">(</span><span class="n">data_dict</span><span class="p">[</span><span class="s1">'cartesian_point'</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">str_to_cmd_args</span><span class="p">(</span><span class="n">arguments</span><span class="p">[</span><span class="mi">2</span><span class="p">])[</span><span class="mi">1</span><span class="p">]),</span>
|
||||
<span class="n">arguments</span><span class="p">[</span><span class="mi">3</span><span class="p">],</span>
|
||||
<span class="n">arguments</span><span class="p">[</span><span class="mi">4</span><span class="p">],</span>
|
||||
<span class="n">arguments</span><span class="p">[</span><span class="mi">5</span><span class="p">],</span>
|
||||
<span class="nb">eval</span><span class="p">(</span><span class="n">arguments</span><span class="p">[</span><span class="mi">6</span><span class="p">]),</span> <span class="c1"># TODO: not use eval!</span>
|
||||
<span class="nb">eval</span><span class="p">(</span><span class="n">arguments</span><span class="p">[</span><span class="mi">7</span><span class="p">]),</span> <span class="c1"># TODO: not use eval!</span>
|
||||
<span class="n">arguments</span><span class="p">[</span><span class="mi">8</span><span class="p">]</span>
|
||||
<span class="p">)</span>
|
||||
<span class="c1"># SURFACE_CURVE references to a LINE and a list of (two) PCURVEs and a ?</span>
|
||||
<span class="c1"># #26 = SURFACE_CURVE('',#27,(#31,#43),.PCURVE_S1.);</span>
|
||||
<span class="c1"># #27 = LINE('',#28,#29);</span>
|
||||
<span class="c1"># #31 = PCURVE('',#32,#37);</span>
|
||||
<span class="c1"># #32 = PLANE('',#33);</span>
|
||||
<span class="c1"># #33 = AXIS2_PLACEMENT_3D('',#34,#35,#36);</span>
|
||||
<span class="c1"># #37 = DEFINITIONAL_REPRESENTATION('',(#38),#42);</span>
|
||||
<span class="c1"># #38 = LINE('',#39,#40);</span>
|
||||
<span class="c1"># #42 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','') );</span>
|
||||
<span class="c1"># #43 = PCURVE('',#44,#49);</span>
|
||||
<span class="c1"># #44 = PLANE('',#45);</span>
|
||||
<span class="c1"># #45 = AXIS2_PLACEMENT_3D('',#46,#47,#48);</span>
|
||||
<span class="c1"># #49 = DEFINITIONAL_REPRESENTATION('',(#50),#54);</span>
|
||||
<span class="c1"># #50 = LINE('',#51,#52);</span>
|
||||
<span class="c1"># #54 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','') );</span>
|
||||
<span class="c1"># #24 = SURFACE_CURVE('',#25,(#30,#42),.PCURVE_S1.);</span>
|
||||
<span class="c1"># #25 = CIRCLE('',#26,5.);</span>
|
||||
<span class="c1"># #30 = PCURVE('',#31,#36);</span>
|
||||
<span class="c1"># #31 = CONICAL_SURFACE('',#32,10.,0.463647609001);</span>
|
||||
<span class="c1"># #32 = AXIS2_PLACEMENT_3D('',#33,#34,#35);</span>
|
||||
<span class="c1"># #36 = DEFINITIONAL_REPRESENTATION('',(#37),#41);</span>
|
||||
<span class="c1"># #37 = LINE('',#38,#39);</span>
|
||||
<span class="c1"># #41 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','') );</span>
|
||||
<span class="c1"># #42 = PCURVE('',#43,#48);</span>
|
||||
<span class="c1"># #43 = PLANE('',#44);</span>
|
||||
<span class="c1"># #44 = AXIS2_PLACEMENT_3D('',#45,#46,#47);</span>
|
||||
<span class="c1"># #48 = DEFINITIONAL_REPRESENTATION('',(#49),#53);</span>
|
||||
<span class="c1"># #49 = CIRCLE('',#50,5.);</span>
|
||||
<span class="c1"># #50 = AXIS2_PLACEMENT_2D('',#51,#52);</span>
|
||||
<span class="c1"># #51 = CARTESIAN_POINT('',(0.,0.));</span>
|
||||
<span class="c1"># #52 = DIRECTION('',(1.,0.));</span>
|
||||
<span class="c1"># #53 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','') );</span>
|
||||
<span class="c1"># #243 = SURFACE_CURVE('',#244,(#319,#415),.PCURVE_S1.);</span>
|
||||
<span class="c1"># #244 = B_SPLINE_CURVE_WITH_KNOTS();</span>
|
||||
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'surface_curve'</span><span class="p">]:</span>
|
||||
<span class="n">command</span><span class="p">,</span> <span class="n">arguments</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'cmds'</span><span class="p">][</span><span class="n">key</span><span class="p">]</span>
|
||||
<span class="n">curve_3d_cmd</span><span class="p">,</span> <span class="n">curve3d_args</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'cmds'</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
|
||||
<span class="k">if</span> <span class="n">curve_3d_cmd</span> <span class="o">==</span> <span class="s1">'LINE'</span><span class="p">:</span>
|
||||
<span class="n">curve_3d</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'line'</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
|
||||
<span class="k">elif</span> <span class="n">curve_3d_cmd</span> <span class="o">==</span> <span class="s1">'CIRCLE'</span><span class="p">:</span>
|
||||
<span class="n">curve_3d</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'circle'</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
|
||||
<span class="k">elif</span> <span class="n">curve_3d_cmd</span> <span class="o">==</span> <span class="s1">'ELLIPSE'</span><span class="p">:</span>
|
||||
<span class="n">curve_3d</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'ellipse'</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
|
||||
<span class="k">elif</span> <span class="n">curve_3d_cmd</span> <span class="o">==</span> <span class="s1">'B_SPLINE_CURVE_WITH_KNOTS'</span><span class="p">:</span>
|
||||
<span class="n">curve_3d</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'b_spline_curve_with_knots'</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">curve_3d</span> <span class="o">=</span> <span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
|
||||
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s1">'surface_curve'</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="s1">'unknown curve_3d'</span><span class="p">,</span> <span class="n">curve_3d</span><span class="p">)</span>
|
||||
<span class="n">data_dict</span><span class="p">[</span><span class="s1">'surface_curve'</span><span class="p">][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">SURFACE_CURVE</span><span class="p">(</span>
|
||||
<span class="n">arguments</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
|
||||
<span class="n">curve_3d</span><span class="p">,</span>
|
||||
<span class="n">arguments</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span>
|
||||
<span class="n">arguments</span><span class="p">[</span><span class="mi">3</span><span class="p">])</span>
|
||||
<span class="c1"># SEAM_CURVE references to a Line and a list of (two) PCURVEs and a ?</span>
|
||||
<span class="c1"># #58 = SEAM_CURVE('',#59,(#63,#70),.PCURVE_S1.);</span>
|
||||
<span class="c1"># #59 = LINE('',#60,#61);</span>
|
||||
<span class="c1"># #63 = PCURVE('',#31,#64);</span>
|
||||
<span class="c1"># #31 = CONICAL_SURFACE('',#32,10.,0.463647609001);</span>
|
||||
<span class="c1"># #32 = AXIS2_PLACEMENT_3D('',#33,#34,#35);</span>
|
||||
<span class="c1"># #33 = CARTESIAN_POINT('',(0.,0.,0.));</span>
|
||||
<span class="c1"># #34 = DIRECTION('',(-0.,-0.,-1.));</span>
|
||||
<span class="c1"># #35 = DIRECTION('',(1.,0.,-0.));</span>
|
||||
<span class="c1"># #64 = DEFINITIONAL_REPRESENTATION('',(#65),#69);</span>
|
||||
<span class="c1"># #65 = LINE('',#66,#67);</span>
|
||||
<span class="c1"># #69 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','') );</span>
|
||||
<span class="c1"># #70 = PCURVE('',#31,#71);</span>
|
||||
<span class="c1"># #31 = CONICAL_SURFACE('',#32,10.,0.463647609001);</span>
|
||||
<span class="c1"># #32 = AXIS2_PLACEMENT_3D('',#33,#34,#35);</span>
|
||||
<span class="c1"># #33 = CARTESIAN_POINT('',(0.,0.,0.));</span>
|
||||
<span class="c1"># #34 = DIRECTION('',(-0.,-0.,-1.));</span>
|
||||
<span class="c1"># #35 = DIRECTION('',(1.,0.,-0.));</span>
|
||||
<span class="c1"># #71 = DEFINITIONAL_REPRESENTATION('',(#72),#76);</span>
|
||||
<span class="c1"># #72 = LINE('',#73,#74);</span>
|
||||
<span class="c1"># #76 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','') );</span>
|
||||
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'seam_curve'</span><span class="p">]:</span>
|
||||
<span class="n">command</span><span class="p">,</span> <span class="n">arguments</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'cmds'</span><span class="p">][</span><span class="n">key</span><span class="p">]</span>
|
||||
<span class="n">curve_3d_cmd</span><span class="p">,</span> <span class="n">curve3d_args</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'cmds'</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
|
||||
<span class="k">if</span> <span class="n">curve_3d_cmd</span> <span class="o">==</span> <span class="s1">'LINE'</span><span class="p">:</span>
|
||||
<span class="n">curve_3d</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'line'</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
|
||||
<span class="k">elif</span> <span class="n">curve_3d_cmd</span> <span class="o">==</span> <span class="s1">'CIRCLE'</span><span class="p">:</span>
|
||||
<span class="n">curve_3d</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'circle'</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">curve_3d</span> <span class="o">=</span> <span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
|
||||
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s1">'seam_curve'</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="s1">'unknown curve_3d'</span><span class="p">,</span> <span class="n">curve_3d</span><span class="p">)</span>
|
||||
<span class="n">data_dict</span><span class="p">[</span><span class="s1">'seam_curve'</span><span class="p">][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">SEAM_CURVE</span><span class="p">(</span>
|
||||
<span class="n">arguments</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
|
||||
<span class="n">curve_3d</span><span class="p">,</span>
|
||||
<span class="n">arguments</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span>
|
||||
<span class="n">arguments</span><span class="p">[</span><span class="mi">3</span><span class="p">])</span>
|
||||
<span class="c1"># EDGE_CURVE references to two VERTEX_POINTs, a CURVE and a BOOLEAN</span>
|
||||
<span class="c1"># #21 = EDGE_CURVE('',#22,#24,#26,.T.);</span>
|
||||
<span class="c1"># #22 = VERTEX_POINT('',#23);</span>
|
||||
<span class="c1"># #24 = VERTEX_POINT('',#25);</span>
|
||||
<span class="c1"># #26 = SURFACE_CURVE('',#27,(#31,#43),.PCURVE_S1.);</span>
|
||||
<span class="c1"># #55 = EDGE_CURVE('',#56,#22,#58,.T.);</span>
|
||||
<span class="c1"># #56 = VERTEX_POINT('',#57);</span>
|
||||
<span class="c1"># #22 = VERTEX_POINT('',#23);</span>
|
||||
<span class="c1"># #58 = SEAM_CURVE('',#59,(#63,#70),.PCURVE_S1.);</span>
|
||||
<span class="c1"># #21187=EDGE_CURVE('',#15685,#15685,#12509,.T.);</span>
|
||||
<span class="c1"># #15685=VERTEX_POINT('',#230114);</span>
|
||||
<span class="c1"># #15685=VERTEX_POINT('',#230114);</span>
|
||||
<span class="c1"># #12509=CIRCLE('',#37712,11.1464466094067);</span>
|
||||
<span class="c1"># #15689=EDGE_CURVE('',#12514,#12512,#2195,.T.);</span>
|
||||
<span class="c1"># #12514=VERTEX_POINT('',#43613);</span>
|
||||
<span class="c1"># #12512=VERTEX_POINT('',#43610);</span>
|
||||
<span class="c1"># #2195=B_SPLINE_CURVE_WITH_KNOTS(...)</span>
|
||||
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'edge_curve'</span><span class="p">]:</span>
|
||||
<span class="n">command</span><span class="p">,</span> <span class="n">arguments</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'cmds'</span><span class="p">][</span><span class="n">key</span><span class="p">]</span>
|
||||
<span class="n">geometry_cmd</span><span class="p">,</span> <span class="n">geometry_args</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'cmds'</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">3</span><span class="p">]]</span>
|
||||
<span class="k">if</span> <span class="n">geometry_cmd</span> <span class="o">==</span> <span class="s1">'SURFACE_CURVE'</span><span class="p">:</span>
|
||||
<span class="n">edge_geometry</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'surface_curve'</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">3</span><span class="p">]]</span>
|
||||
<span class="k">elif</span> <span class="n">geometry_cmd</span> <span class="o">==</span> <span class="s1">'SEAM_CURVE'</span><span class="p">:</span>
|
||||
<span class="n">edge_geometry</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'seam_curve'</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">3</span><span class="p">]]</span>
|
||||
<span class="k">elif</span> <span class="n">geometry_cmd</span> <span class="o">==</span> <span class="s1">'LINE'</span><span class="p">:</span>
|
||||
<span class="n">edge_geometry</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'line'</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">3</span><span class="p">]]</span>
|
||||
<span class="k">elif</span> <span class="n">geometry_cmd</span> <span class="o">==</span> <span class="s1">'CIRCLE'</span><span class="p">:</span>
|
||||
<span class="n">edge_geometry</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'circle'</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">3</span><span class="p">]]</span>
|
||||
<span class="k">elif</span> <span class="n">geometry_cmd</span> <span class="o">==</span> <span class="s1">'B_SPLINE_CURVE_WITH_KNOTS'</span><span class="p">:</span>
|
||||
<span class="n">edge_geometry</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'b_spline_curve_with_knots'</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">3</span><span class="p">]]</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">edge_geometry</span> <span class="o">=</span> <span class="n">arguments</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span>
|
||||
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s1">'edge_curve'</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="s1">'unknown edge_geometry'</span><span class="p">,</span> <span class="n">geometry_cmd</span><span class="p">)</span>
|
||||
<span class="n">data_dict</span><span class="p">[</span><span class="s1">'edge_curve'</span><span class="p">][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">EDGE_CURVE</span><span class="p">(</span>
|
||||
<span class="n">arguments</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
|
||||
<span class="n">data_dict</span><span class="p">[</span><span class="s1">'vertex_point'</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">]],</span>
|
||||
<span class="n">data_dict</span><span class="p">[</span><span class="s1">'vertex_point'</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">2</span><span class="p">]],</span>
|
||||
<span class="n">edge_geometry</span><span class="p">,</span>
|
||||
<span class="n">arguments</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># poly-curve objects</span>
|
||||
<span class="c1"># to speed things up use EDGE_LOOP to create wireframes instead</span>
|
||||
<span class="c1"># of plotting every single EDGE_CURVE in it's own plot cmd</span>
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># ORIENTED_EDGE references to two re-declared attributes from a CURVE, a CURVE and a BOOLEAN</span>
|
||||
<span class="c1"># 83 = ORIENTED_EDGE('',*,*,#84,.F.);</span>
|
||||
<span class="c1"># #84 = EDGE_CURVE('',#85,#87,#89,.T.);</span>
|
||||
<span class="c1"># ORIENTED_EDGE will have multiple same edges, because connected faces</span>
|
||||
<span class="c1"># use the same curve (about double as EDGE_CURVE)</span>
|
||||
<span class="c1"># BUT combined with EDGE_LOOP the number of concatenated curves decrease.</span>
|
||||
<span class="c1"># (about half to 2/3 of EDGE_CURVE)</span>
|
||||
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'oriented_edge'</span><span class="p">]:</span>
|
||||
<span class="n">command</span><span class="p">,</span> <span class="n">arguments</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'cmds'</span><span class="p">][</span><span class="n">key</span><span class="p">]</span>
|
||||
<span class="n">edge_element_cmd</span><span class="p">,</span> <span class="n">edge_element_args</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'cmds'</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">3</span><span class="p">]]</span>
|
||||
<span class="k">if</span> <span class="n">edge_element_cmd</span> <span class="o">==</span> <span class="s1">'EDGE_CURVE'</span><span class="p">:</span>
|
||||
<span class="n">edge_element</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'edge_curve'</span><span class="p">][</span><span class="n">arguments</span><span class="p">[</span><span class="mi">3</span><span class="p">]]</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">edge_element</span> <span class="o">=</span> <span class="n">arguments</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span>
|
||||
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s1">'oriented_edge'</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="s1">'unknown edge_element'</span><span class="p">,</span> <span class="n">edge_element_cmd</span><span class="p">)</span>
|
||||
<span class="n">data_dict</span><span class="p">[</span><span class="s1">'oriented_edge'</span><span class="p">][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">ORIENTED_EDGE</span><span class="p">(</span>
|
||||
<span class="n">arguments</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
|
||||
<span class="n">arguments</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span>
|
||||
<span class="n">arguments</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span>
|
||||
<span class="n">edge_element</span><span class="p">,</span>
|
||||
<span class="n">arguments</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span>
|
||||
<span class="p">)</span>
|
||||
<span class="c1"># EDGE_LOOP</span>
|
||||
<span class="c1"># #82 = EDGE_LOOP('',(#83,#118,#146,#174));</span>
|
||||
<span class="c1"># #83 = ORIENTED_EDGE('',*,*,#84,.F.);</span>
|
||||
<span class="c1"># #118 = ORIENTED_EDGE('',*,*,#119,.T.);</span>
|
||||
<span class="c1"># #146 = ORIENTED_EDGE('',*,*,#147,.T.);</span>
|
||||
<span class="c1"># #174 = ORIENTED_EDGE('',*,*,#175,.F.);</span>
|
||||
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'edge_loop'</span><span class="p">]:</span>
|
||||
<span class="n">command</span><span class="p">,</span> <span class="n">arguments</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'cmds'</span><span class="p">][</span><span class="n">key</span><span class="p">]</span>
|
||||
<span class="n">data_dict</span><span class="p">[</span><span class="s1">'edge_loop'</span><span class="p">][</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">EDGE_LOOP</span><span class="p">(</span>
|
||||
<span class="n">arguments</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
|
||||
<span class="nb">tuple</span><span class="p">(</span><span class="n">data_dict</span><span class="p">[</span><span class="s1">'oriented_edge'</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">str_to_cmd_args</span><span class="p">(</span><span class="n">arguments</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="p">)</span>
|
||||
|
||||
<span class="k">return</span> <span class="n">data_dict</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="data_section_dict"><a class="viewcode-back" href="../../pylib.data_step.html#pylib.data_step.data_section_dict">[docs]</a><span class="k">def</span> <span class="nf">data_section_dict</span><span class="p">(</span><span class="n">step</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="k">return</span> <span class="n">data_cmds_to_data_dict</span><span class="p">(</span><span class="n">step</span><span class="o">.</span><span class="n">data</span><span class="p">,</span> <span class="n">verbose</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="line_geometry"><a class="viewcode-back" href="../../pylib.data_step.html#pylib.data_step.line_geometry">[docs]</a><span class="k">def</span> <span class="nf">line_geometry</span><span class="p">(</span><span class="n">p1</span><span class="p">,</span> <span class="n">p2</span><span class="p">):</span>
|
||||
<span class="c1"># (normally)</span>
|
||||
<span class="c1"># edge_curve.edge_geometry.curve_3d.pnt.coordinates is</span>
|
||||
<span class="c1"># equal to p1 (see above) this is</span>
|
||||
<span class="c1"># edge_curve.edge_start.vertex_geometry.coordinates</span>
|
||||
<span class="c1"># p2 could be calculated from</span>
|
||||
<span class="c1"># edge_curve.edge_geometry.curve_3d.dir.orientation.direction_ratios</span>
|
||||
<span class="c1"># and edge_curve.edge_geometry.curve_3d.dir.magnitude</span>
|
||||
<span class="c1"># vector = [i*edge_curve.edge_geometry.curve_3d.dir.magnitude for</span>
|
||||
<span class="c1"># i in edge_curve.edge_geometry.curve_3d.dir.orientation.direction_ratios]</span>
|
||||
<span class="k">return</span> <span class="n">Line</span><span class="p">(</span><span class="n">point1</span><span class="o">=</span><span class="n">p1</span><span class="p">,</span> <span class="n">point2</span><span class="o">=</span><span class="n">p2</span><span class="p">)</span></div>
|
||||
|
||||
<span class="kn">import</span> <span class="nn">math</span>
|
||||
<div class="viewcode-block" id="arc_circle_geometry"><a class="viewcode-back" href="../../pylib.data_step.html#pylib.data_step.arc_circle_geometry">[docs]</a><span class="k">def</span> <span class="nf">arc_circle_geometry</span><span class="p">(</span><span class="n">conic</span><span class="p">,</span> <span class="n">p1</span><span class="p">,</span> <span class="n">p2</span><span class="p">,</span> <span class="n">ellipse</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||
|
||||
<span class="n">z</span> <span class="o">=</span> <span class="n">Direction</span><span class="p">(</span><span class="o">*</span><span class="n">conic</span><span class="o">.</span><span class="n">position</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">direction_ratios</span><span class="p">)</span>
|
||||
<span class="n">x</span> <span class="o">=</span> <span class="n">Direction</span><span class="p">(</span><span class="o">*</span><span class="n">conic</span><span class="o">.</span><span class="n">position</span><span class="o">.</span><span class="n">ref_direction</span><span class="o">.</span><span class="n">direction_ratios</span><span class="p">)</span>
|
||||
<span class="n">y</span> <span class="o">=</span> <span class="n">Direction</span><span class="o">.</span><span class="n">cross</span><span class="p">(</span><span class="n">z</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span>
|
||||
<span class="n">cs_gl</span> <span class="o">=</span> <span class="n">CS</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="c1"># transform from global to local</span>
|
||||
<span class="n">cs_lg</span> <span class="o">=</span> <span class="n">CS</span><span class="o">.</span><span class="n">transposed</span><span class="p">(</span><span class="n">cs_gl</span><span class="p">)</span> <span class="c1"># transform from local to global</span>
|
||||
|
||||
<span class="n">location</span> <span class="o">=</span> <span class="n">vector</span><span class="p">(</span><span class="n">conic</span><span class="o">.</span><span class="n">position</span><span class="o">.</span><span class="n">location</span><span class="o">.</span><span class="n">coordinates</span><span class="p">)</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">p1</span> <span class="o">==</span> <span class="n">p2</span><span class="p">:</span> <span class="c1"># Full Circle or Ellipse</span>
|
||||
<span class="k">if</span> <span class="n">ellipse</span><span class="p">:</span>
|
||||
<span class="n">a</span> <span class="o">=</span> <span class="n">conic</span><span class="o">.</span><span class="n">semi_axis_1</span>
|
||||
<span class="n">b</span> <span class="o">=</span> <span class="n">conic</span><span class="o">.</span><span class="n">semi_axis_2</span>
|
||||
<span class="k">return</span> <span class="n">Ellipse</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span><span class="o">.</span><span class="n">ch_cs</span><span class="p">(</span><span class="n">cs_lg</span><span class="p">)</span><span class="o">.</span><span class="n">translate</span><span class="p">(</span><span class="o">*</span><span class="n">location</span><span class="p">)</span>
|
||||
<span class="c1"># else Circle</span>
|
||||
<span class="n">radius</span> <span class="o">=</span> <span class="n">conic</span><span class="o">.</span><span class="n">radius</span>
|
||||
<span class="k">return</span> <span class="n">Circle</span><span class="p">(</span><span class="n">radius</span><span class="p">)</span><span class="o">.</span><span class="n">ch_cs</span><span class="p">(</span><span class="n">cs_lg</span><span class="p">)</span><span class="o">.</span><span class="n">translate</span><span class="p">(</span><span class="o">*</span><span class="n">location</span><span class="p">)</span>
|
||||
<span class="c1"># else Arc</span>
|
||||
<span class="c1"># points relative to the location</span>
|
||||
<span class="n">v1</span><span class="p">,</span> <span class="n">v2</span> <span class="o">=</span> <span class="n">p1</span> <span class="o">-</span> <span class="n">location</span><span class="p">,</span> <span class="n">p2</span> <span class="o">-</span> <span class="n">location</span>
|
||||
<span class="c1">#ang1, ang2 = vector.ang(x, v1), vector.ang(x, v2)</span>
|
||||
<span class="c1"># relative points transformed into circle coordinate system</span>
|
||||
<span class="c1"># relative point lay in local xy-plane</span>
|
||||
<span class="n">vl1</span><span class="p">,</span> <span class="n">vl2</span> <span class="o">=</span> <span class="n">vector</span><span class="p">(</span><span class="n">v1</span><span class="p">)</span><span class="o">.</span><span class="n">ch_cs</span><span class="p">(</span><span class="n">cs_gl</span><span class="p">),</span> <span class="n">vector</span><span class="p">(</span><span class="n">v2</span><span class="p">)</span><span class="o">.</span><span class="n">ch_cs</span><span class="p">(</span><span class="n">cs_gl</span><span class="p">)</span>
|
||||
<span class="n">ang1</span><span class="p">,</span> <span class="n">ang2</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">atan2</span><span class="p">(</span><span class="o">*</span><span class="n">vl1</span><span class="p">[:</span><span class="mi">2</span><span class="p">][::</span><span class="o">-</span><span class="mi">1</span><span class="p">]),</span> <span class="n">math</span><span class="o">.</span><span class="n">atan2</span><span class="p">(</span><span class="o">*</span><span class="n">vl2</span><span class="p">[:</span><span class="mi">2</span><span class="p">][::</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">ellipse</span><span class="p">:</span>
|
||||
<span class="n">a</span> <span class="o">=</span> <span class="n">conic</span><span class="o">.</span><span class="n">semi_axis_1</span>
|
||||
<span class="n">b</span> <span class="o">=</span> <span class="n">conic</span><span class="o">.</span><span class="n">semi_axis_2</span>
|
||||
<span class="k">return</span> <span class="n">ArcEllipse</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">ang1</span><span class="p">,</span> <span class="n">ang2</span><span class="p">)</span><span class="o">.</span><span class="n">ch_cs</span><span class="p">(</span><span class="n">cs_lg</span><span class="p">)</span><span class="o">.</span><span class="n">translate</span><span class="p">(</span><span class="o">*</span><span class="n">location</span><span class="p">)</span>
|
||||
<span class="n">radius</span> <span class="o">=</span> <span class="n">conic</span><span class="o">.</span><span class="n">radius</span>
|
||||
<span class="k">return</span> <span class="n">ArcCircle</span><span class="p">(</span><span class="n">radius</span><span class="p">,</span> <span class="n">ang1</span><span class="p">,</span> <span class="n">ang2</span><span class="p">)</span><span class="o">.</span><span class="n">ch_cs</span><span class="p">(</span><span class="n">cs_lg</span><span class="p">)</span><span class="o">.</span><span class="n">translate</span><span class="p">(</span><span class="o">*</span><span class="n">location</span><span class="p">)</span></div>
|
||||
|
||||
<span class="kn">import</span> <span class="nn">copy</span>
|
||||
<div class="viewcode-block" id="b_spline_curve_with_knots_geometry"><a class="viewcode-back" href="../../pylib.data_step.html#pylib.data_step.b_spline_curve_with_knots_geometry">[docs]</a><span class="k">def</span> <span class="nf">b_spline_curve_with_knots_geometry</span><span class="p">(</span><span class="n">b_spline</span><span class="p">,</span> <span class="n">p1</span><span class="p">,</span> <span class="n">p2</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
|
||||
<span class="sd"> Currently only clamped b_spline curves and assumed, i. e. closed</span>
|
||||
<span class="sd"> = False.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">control_points</span> <span class="o">=</span> <span class="p">[</span><span class="n">i</span><span class="o">.</span><span class="n">coordinates</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">b_spline</span><span class="o">.</span><span class="n">control_points</span><span class="p">]</span>
|
||||
<span class="c1"># es_near = [vector.isclose(p1, i.coordinates, abs_tol=2.1) for i in b_spline.control_points].index(True)</span>
|
||||
<span class="n">es_near</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">b_spline</span><span class="o">.</span><span class="n">control_points</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span> <span class="o">-</span> <span class="p">[</span><span class="n">vector</span><span class="o">.</span><span class="n">isclose</span><span class="p">(</span><span class="n">p1</span><span class="p">,</span> <span class="n">i</span><span class="o">.</span><span class="n">coordinates</span><span class="p">,</span> <span class="n">abs_tol</span><span class="o">=</span><span class="mf">2.1</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">b_spline</span><span class="o">.</span><span class="n">control_points</span><span class="p">[::</span><span class="o">-</span><span class="mi">1</span><span class="p">]]</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="c1"># ee_near = len(b_spline.control_points) - 1 - [vector.isclose(p2, i.coordinates, abs_tol=2.1) for i in b_spline.control_points[::-1]].index(True)</span>
|
||||
<span class="n">ee_near</span> <span class="o">=</span> <span class="p">[</span><span class="n">vector</span><span class="o">.</span><span class="n">isclose</span><span class="p">(</span><span class="n">p2</span><span class="p">,</span> <span class="n">i</span><span class="o">.</span><span class="n">coordinates</span><span class="p">,</span> <span class="n">abs_tol</span><span class="o">=</span><span class="mf">2.1</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">b_spline</span><span class="o">.</span><span class="n">control_points</span><span class="p">]</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="kc">True</span><span class="p">)</span>
|
||||
|
||||
<span class="n">knots</span> <span class="o">=</span> <span class="p">[</span><span class="n">b_spline</span><span class="o">.</span><span class="n">knots</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="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">b_spline</span><span class="o">.</span><span class="n">knots</span><span class="p">))</span> <span class="k">for</span>
|
||||
<span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">b_spline</span><span class="o">.</span><span class="n">knot_multiplicities</span><span class="p">[</span><span class="n">i</span><span class="p">])]</span>
|
||||
<span class="c1"># print('bs es, ee in:', es_near, ee_near,</span>
|
||||
<span class="c1"># knots[es_near], knots[ee_near+b_spline.degree])</span>
|
||||
<span class="c1"># print(' knots, knote:', knots[0], knots[-1], len(knots))</span>
|
||||
<span class="k">if</span> <span class="n">es_near</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">ee_near</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="c1">#print('yes')</span>
|
||||
<span class="n">bs</span> <span class="o">=</span> <span class="n">ArcBSplineCurveWithKnots</span><span class="p">(</span>
|
||||
<span class="n">b_spline</span><span class="o">.</span><span class="n">degree</span><span class="p">,</span> <span class="n">control_points</span><span class="p">,</span> <span class="n">b_spline</span><span class="o">.</span><span class="n">knot_multiplicities</span><span class="p">,</span>
|
||||
<span class="n">b_spline</span><span class="o">.</span><span class="n">knots</span><span class="p">,</span> <span class="n">knots</span><span class="p">[</span><span class="n">es_near</span><span class="o">+</span><span class="mi">1</span><span class="p">],</span> <span class="n">knots</span><span class="p">[</span><span class="n">ee_near</span><span class="o">+</span><span class="n">b_spline</span><span class="o">.</span><span class="n">degree</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span>
|
||||
<span class="n">bs</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">p1</span><span class="p">)]</span> <span class="o">+</span> <span class="n">bs</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">p2</span><span class="p">)]</span>
|
||||
<span class="k">return</span> <span class="n">bs</span>
|
||||
<span class="c1"># +1 so not the last near point but the following, also -1</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s1">'error'</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">B_spline_curve_with_knots</span><span class="p">(</span>
|
||||
<span class="n">b_spline</span><span class="o">.</span><span class="n">degree</span><span class="p">,</span> <span class="n">control_points</span><span class="p">,</span> <span class="n">b_spline</span><span class="o">.</span><span class="n">knot_multiplicities</span><span class="p">,</span>
|
||||
<span class="n">b_spline</span><span class="o">.</span><span class="n">knots</span><span class="p">)</span></div>
|
||||
|
||||
<span class="c1"># TODO: backup solution to draw each edge_curve,</span>
|
||||
<span class="c1"># new is to put edge_curves to edge_loops and draw these loops</span>
|
||||
<span class="c1"># see data_dict_to_geometry_world</span>
|
||||
<div class="viewcode-block" id="data_dict_to_geometry_world_edge_curve"><a class="viewcode-back" href="../../pylib.data_step.html#pylib.data_step.data_dict_to_geometry_world_edge_curve">[docs]</a><span class="k">def</span> <span class="nf">data_dict_to_geometry_world_edge_curve</span><span class="p">(</span><span class="n">data_dict</span><span class="p">):</span>
|
||||
<span class="n">w</span> <span class="o">=</span> <span class="n">World</span><span class="p">()</span>
|
||||
<span class="n">data_dict_edge_curve_to_geometry</span><span class="p">(</span><span class="n">data_dict</span><span class="p">)</span>
|
||||
<span class="n">edges</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'geometry_edge_curves'</span><span class="p">]</span>
|
||||
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">edges</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
|
||||
<span class="n">w</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">w</span></div>
|
||||
|
||||
<div class="viewcode-block" id="data_dict_edge_curve_to_geometry"><a class="viewcode-back" href="../../pylib.data_step.html#pylib.data_step.data_dict_edge_curve_to_geometry">[docs]</a><span class="k">def</span> <span class="nf">data_dict_edge_curve_to_geometry</span><span class="p">(</span><span class="n">data_dict</span><span class="p">):</span>
|
||||
<span class="n">edges</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
<span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">edge_curve</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'edge_curve'</span><span class="p">]</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
|
||||
<span class="n">p1</span> <span class="o">=</span> <span class="n">Point</span><span class="p">(</span><span class="o">*</span><span class="n">edge_curve</span><span class="o">.</span><span class="n">edge_start</span><span class="o">.</span><span class="n">vertex_geometry</span><span class="o">.</span><span class="n">coordinates</span><span class="p">)</span>
|
||||
<span class="n">p2</span> <span class="o">=</span> <span class="n">Point</span><span class="p">(</span><span class="o">*</span><span class="n">edge_curve</span><span class="o">.</span><span class="n">edge_end</span><span class="o">.</span><span class="n">vertex_geometry</span><span class="o">.</span><span class="n">coordinates</span><span class="p">)</span>
|
||||
<span class="n">idn</span> <span class="o">=</span> <span class="n">edge_curve</span><span class="o">.</span><span class="n">idn</span>
|
||||
|
||||
<span class="c1"># if SURFACE_CURVE or SEAM_CURVE, b/c SEAM_CURVE(SURFACE_CURVE)</span>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">edge_curve</span><span class="o">.</span><span class="n">edge_geometry</span><span class="p">,</span> <span class="n">SURFACE_CURVE</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">edge_curve</span><span class="o">.</span><span class="n">edge_geometry</span><span class="o">.</span><span class="n">curve_3d</span><span class="p">,</span> <span class="n">LINE</span><span class="p">):</span>
|
||||
<span class="n">edges</span><span class="p">[</span><span class="n">idn</span><span class="p">]</span> <span class="o">=</span> <span class="n">line_geometry</span><span class="p">(</span><span class="n">p1</span><span class="p">,</span> <span class="n">p2</span><span class="p">)</span>
|
||||
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">edge_curve</span><span class="o">.</span><span class="n">edge_geometry</span><span class="o">.</span><span class="n">curve_3d</span><span class="p">,</span> <span class="n">CIRCLE</span><span class="p">):</span>
|
||||
<span class="n">circle</span> <span class="o">=</span> <span class="n">edge_curve</span><span class="o">.</span><span class="n">edge_geometry</span><span class="o">.</span><span class="n">curve_3d</span>
|
||||
<span class="n">edges</span><span class="p">[</span><span class="n">idn</span><span class="p">]</span> <span class="o">=</span> <span class="n">arc_circle_geometry</span><span class="p">(</span><span class="n">circle</span><span class="p">,</span> <span class="n">p1</span><span class="p">,</span> <span class="n">p2</span><span class="p">)</span>
|
||||
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">edge_curve</span><span class="o">.</span><span class="n">edge_geometry</span><span class="o">.</span><span class="n">curve_3d</span><span class="p">,</span> <span class="n">ELLIPSE</span><span class="p">):</span>
|
||||
<span class="n">ellipse</span> <span class="o">=</span> <span class="n">edge_curve</span><span class="o">.</span><span class="n">edge_geometry</span><span class="o">.</span><span class="n">curve_3d</span>
|
||||
<span class="n">edges</span><span class="p">[</span><span class="n">idn</span><span class="p">]</span> <span class="o">=</span> <span class="n">arc_circle_geometry</span><span class="p">(</span><span class="n">ellipse</span><span class="p">,</span> <span class="n">p1</span><span class="p">,</span> <span class="n">p2</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
|
||||
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">edge_curve</span><span class="o">.</span><span class="n">edge_geometry</span><span class="o">.</span><span class="n">curve_3d</span><span class="p">,</span> <span class="n">B_SPLINE_CURVE_WITH_KNOTS</span><span class="p">):</span>
|
||||
<span class="n">b_spline</span> <span class="o">=</span> <span class="n">edge_curve</span><span class="o">.</span><span class="n">edge_geometry</span><span class="o">.</span><span class="n">curve_3d</span>
|
||||
<span class="n">edges</span><span class="p">[</span><span class="n">idn</span><span class="p">]</span> <span class="o">=</span> <span class="n">b_spline_curve_with_knots_geometry</span><span class="p">(</span><span class="n">b_spline</span><span class="p">,</span> <span class="n">p1</span><span class="p">,</span> <span class="n">p2</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s1">'edge_curve'</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="s1">'unknown SURFACE_CURVE'</span><span class="p">,</span>
|
||||
<span class="nb">type</span><span class="p">(</span><span class="n">edge_curve</span><span class="o">.</span><span class="n">edge_geometry</span><span class="o">.</span><span class="n">curve_3d</span><span class="p">))</span>
|
||||
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">edge_curve</span><span class="o">.</span><span class="n">edge_geometry</span><span class="p">,</span> <span class="n">LINE</span><span class="p">):</span>
|
||||
<span class="n">edges</span><span class="p">[</span><span class="n">idn</span><span class="p">]</span> <span class="o">=</span> <span class="n">line_geometry</span><span class="p">(</span><span class="n">p1</span><span class="p">,</span> <span class="n">p2</span><span class="p">)</span>
|
||||
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">edge_curve</span><span class="o">.</span><span class="n">edge_geometry</span><span class="p">,</span> <span class="n">CIRCLE</span><span class="p">):</span>
|
||||
<span class="n">circle</span> <span class="o">=</span> <span class="n">edge_curve</span><span class="o">.</span><span class="n">edge_geometry</span>
|
||||
<span class="n">edges</span><span class="p">[</span><span class="n">idn</span><span class="p">]</span> <span class="o">=</span> <span class="n">arc_circle_geometry</span><span class="p">(</span><span class="n">circle</span><span class="p">,</span> <span class="n">p1</span><span class="p">,</span> <span class="n">p2</span><span class="p">)</span>
|
||||
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">edge_curve</span><span class="o">.</span><span class="n">edge_geometry</span><span class="p">,</span> <span class="n">B_SPLINE_CURVE_WITH_KNOTS</span><span class="p">):</span>
|
||||
<span class="n">b_spline</span> <span class="o">=</span> <span class="n">edge_curve</span><span class="o">.</span><span class="n">edge_geometry</span>
|
||||
<span class="n">edges</span><span class="p">[</span><span class="n">idn</span><span class="p">]</span> <span class="o">=</span> <span class="n">b_spline_curve_with_knots_geometry</span><span class="p">(</span><span class="n">b_spline</span><span class="p">,</span> <span class="n">p1</span><span class="p">,</span> <span class="n">p2</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span> <span class="c1"># fallback to straight line</span>
|
||||
<span class="n">edges</span><span class="p">[</span><span class="n">idn</span><span class="p">]</span> <span class="o">=</span> <span class="n">line_geometry</span><span class="p">(</span><span class="n">p1</span><span class="p">,</span> <span class="n">p2</span><span class="p">)</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s1">'edge_curve'</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="s1">'unknown type'</span><span class="p">,</span> <span class="nb">type</span><span class="p">(</span><span class="n">edge_curve</span><span class="p">))</span>
|
||||
<span class="n">data_dict</span><span class="p">[</span><span class="s1">'geometry_edge_curves'</span><span class="p">]</span> <span class="o">=</span> <span class="n">edges</span></div>
|
||||
|
||||
<div class="viewcode-block" id="data_dict_to_geometry_world"><a class="viewcode-back" href="../../pylib.data_step.html#pylib.data_step.data_dict_to_geometry_world">[docs]</a><span class="k">def</span> <span class="nf">data_dict_to_geometry_world</span><span class="p">(</span><span class="n">data_dict</span><span class="p">):</span>
|
||||
<span class="n">w</span> <span class="o">=</span> <span class="n">World</span><span class="p">()</span>
|
||||
|
||||
<span class="n">data_dict_edge_curve_to_geometry</span><span class="p">(</span><span class="n">data_dict</span><span class="p">)</span>
|
||||
<span class="n">edges</span> <span class="o">=</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'geometry_edge_curves'</span><span class="p">]</span>
|
||||
|
||||
<span class="c1"># add all but the last point, it is a path.</span>
|
||||
<span class="kn">import</span> <span class="nn">math</span>
|
||||
<span class="nb">iter</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">edge_loop</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'edge_loop'</span><span class="p">]</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
|
||||
<span class="n">points</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="n">last_end_point</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="k">for</span> <span class="n">oriented_edge</span> <span class="ow">in</span> <span class="n">edge_loop</span><span class="o">.</span><span class="n">edge_list</span><span class="p">:</span>
|
||||
<span class="n">edge_curve</span> <span class="o">=</span> <span class="n">oriented_edge</span><span class="o">.</span><span class="n">edge_element</span>
|
||||
<span class="n">idn</span> <span class="o">=</span> <span class="n">edge_curve</span><span class="o">.</span><span class="n">idn</span>
|
||||
<span class="k">if</span> <span class="n">idn</span> <span class="ow">in</span> <span class="n">edges</span><span class="p">:</span>
|
||||
<span class="n">pts</span> <span class="o">=</span> <span class="n">edges</span><span class="p">[</span><span class="n">idn</span><span class="p">]</span><span class="o">.</span><span class="n">points</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="n">oriented_edge</span><span class="o">.</span><span class="n">orientation</span><span class="p">:</span>
|
||||
<span class="c1">#[points.append(i) for i in pts[:-1]]</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">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">pts</span><span class="p">]</span>
|
||||
<span class="n">start_point</span> <span class="o">=</span> <span class="n">pts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="n">end_point</span> <span class="o">=</span> <span class="n">pts</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="c1">#[points.append(i) for i in pts[:0:-1]]</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">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">pts</span><span class="p">[::</span><span class="o">-</span><span class="mi">1</span><span class="p">]]</span>
|
||||
<span class="n">start_point</span> <span class="o">=</span> <span class="n">pts</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
|
||||
<span class="n">end_point</span> <span class="o">=</span> <span class="n">pts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
<span class="k">if</span> <span class="n">last_end_point</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="c1"># TODO: some points are only near because of the current</span>
|
||||
<span class="c1"># b-spline cut in b_spline_curve_with_knots_geometry</span>
|
||||
<span class="n">isclose</span> <span class="o">=</span> <span class="nb">all</span><span class="p">([</span><span class="n">math</span><span class="o">.</span><span class="n">isclose</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">,</span> <span class="n">abs_tol</span><span class="o">=</span><span class="mf">1e-3</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">start_point</span><span class="p">,</span> <span class="n">last_end_point</span><span class="p">)])</span>
|
||||
<span class="k">if</span> <span class="n">isclose</span><span class="p">:</span>
|
||||
<span class="k">pass</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">pass</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="n">isclose</span><span class="p">,</span> <span class="n">start_point</span><span class="p">,</span> <span class="n">last_end_point</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">pass</span>
|
||||
<span class="c1">#print('start of loop')</span>
|
||||
<span class="n">last_end_point</span> <span class="o">=</span> <span class="n">end_point</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">pass</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s1">'error'</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">points</span><span class="p">:</span>
|
||||
<span class="c1"># add last end point of path</span>
|
||||
<span class="c1"># if oriented_edge.orientation:</span>
|
||||
<span class="c1"># points.append(Point(*edge_curve.edge_end.vertex_geometry.coordinates))</span>
|
||||
<span class="c1"># else:</span>
|
||||
<span class="c1"># points.append(Point(*edge_curve.edge_start.vertex_geometry.coordinates))</span>
|
||||
<span class="c1">#points.append(Point(*oriented_edge.edge_end.vertex_geometry.coordinates))</span>
|
||||
<span class="n">w</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">Polyline</span><span class="p">(</span><span class="o">*</span><span class="n">points</span><span class="p">))</span>
|
||||
<span class="c1"># if iter == 4:</span>
|
||||
<span class="c1"># print()</span>
|
||||
<span class="c1"># print(key)</span>
|
||||
<span class="c1"># break</span>
|
||||
<span class="c1"># iter += 1</span>
|
||||
<span class="k">return</span> <span class="n">w</span></div>
|
||||
|
||||
<span class="c1"># TODO: delete this testing def</span>
|
||||
<div class="viewcode-block" id="print_edge_loop"><a class="viewcode-back" href="../../pylib.data_step.html#pylib.data_step.print_edge_loop">[docs]</a><span class="k">def</span> <span class="nf">print_edge_loop</span><span class="p">(</span><span class="n">data_dict</span><span class="p">,</span> <span class="n">instance_name</span><span class="p">):</span>
|
||||
<span class="kn">from</span> <span class="nn">pylib.mathematics</span> <span class="kn">import</span> <span class="n">vector</span>
|
||||
<span class="kn">from</span> <span class="nn">pylib.data_step_std</span> <span class="kn">import</span> <span class="n">LINE</span><span class="p">,</span> <span class="n">B_SPLINE_CURVE_WITH_KNOTS</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s1">'edge_loop:'</span><span class="p">,</span> <span class="n">instance_name</span><span class="p">,</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'edge_loop'</span><span class="p">][</span><span class="n">instance_name</span><span class="p">]</span><span class="o">.</span><span class="n">idn</span><span class="p">)</span>
|
||||
<span class="k">for</span> <span class="n">oriented_edge</span> <span class="ow">in</span> <span class="n">data_dict</span><span class="p">[</span><span class="s1">'edge_loop'</span><span class="p">][</span><span class="n">instance_name</span><span class="p">]</span><span class="o">.</span><span class="n">edge_list</span><span class="p">:</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s1">' orientation: '</span><span class="p">,</span> <span class="n">oriented_edge</span><span class="o">.</span><span class="n">orientation</span><span class="p">)</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s1">' edge_start: '</span><span class="p">,</span> <span class="n">oriented_edge</span><span class="o">.</span><span class="n">edge_start</span><span class="o">.</span><span class="n">vertex_geometry</span><span class="o">.</span><span class="n">coordinates</span><span class="p">)</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s1">' edge_end: '</span><span class="p">,</span> <span class="n">oriented_edge</span><span class="o">.</span><span class="n">edge_end</span><span class="o">.</span><span class="n">vertex_geometry</span><span class="o">.</span><span class="n">coordinates</span><span class="p">)</span>
|
||||
<span class="n">edge_element</span> <span class="o">=</span> <span class="n">oriented_edge</span><span class="o">.</span><span class="n">edge_element</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s1">' edge_element'</span><span class="p">)</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s1">' same_sense: '</span><span class="p">,</span> <span class="n">edge_element</span><span class="o">.</span><span class="n">same_sense</span><span class="p">)</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s1">' edge_start: '</span><span class="p">,</span> <span class="n">edge_element</span><span class="o">.</span><span class="n">edge_start</span><span class="o">.</span><span class="n">vertex_geometry</span><span class="o">.</span><span class="n">coordinates</span><span class="p">)</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s1">' edge_end: '</span><span class="p">,</span> <span class="n">edge_element</span><span class="o">.</span><span class="n">edge_end</span><span class="o">.</span><span class="n">vertex_geometry</span><span class="o">.</span><span class="n">coordinates</span><span class="p">)</span>
|
||||
<span class="n">curve_3d</span> <span class="o">=</span> <span class="n">edge_element</span><span class="o">.</span><span class="n">edge_geometry</span><span class="o">.</span><span class="n">curve_3d</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s1">' edge_geometry.curve_3d'</span><span class="p">)</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s1">' type: '</span><span class="p">,</span> <span class="nb">type</span><span class="p">(</span><span class="n">curve_3d</span><span class="p">))</span>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">curve_3d</span><span class="p">,</span> <span class="n">LINE</span><span class="p">):</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s1">' es in: '</span><span class="p">,</span>
|
||||
<span class="n">vector</span><span class="o">.</span><span class="n">isclose</span><span class="p">(</span><span class="n">edge_element</span><span class="o">.</span><span class="n">edge_start</span><span class="o">.</span><span class="n">vertex_geometry</span><span class="o">.</span><span class="n">coordinates</span><span class="p">,</span> <span class="n">curve_3d</span><span class="o">.</span><span class="n">pnt</span><span class="o">.</span><span class="n">coordinates</span><span class="p">))</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s1">' ee in: '</span><span class="p">,</span>
|
||||
<span class="n">vector</span><span class="o">.</span><span class="n">isclose</span><span class="p">(</span><span class="n">edge_element</span><span class="o">.</span><span class="n">edge_end</span><span class="o">.</span><span class="n">vertex_geometry</span><span class="o">.</span><span class="n">coordinates</span><span class="p">,</span> <span class="n">curve_3d</span><span class="o">.</span><span class="n">pnt</span><span class="o">.</span><span class="n">coordinates</span><span class="p">))</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s1">' pnt: '</span><span class="p">,</span> <span class="n">curve_3d</span><span class="o">.</span><span class="n">pnt</span><span class="o">.</span><span class="n">coordinates</span><span class="p">)</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s1">' pnt2: '</span><span class="p">,</span> <span class="p">[</span><span class="n">curve_3d</span><span class="o">.</span><span class="n">dir</span><span class="o">.</span><span class="n">magnitude</span><span class="o">*</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="n">curve_3d</span><span class="o">.</span><span class="n">dir</span><span class="o">.</span><span class="n">orientation</span><span class="o">.</span><span class="n">direction_ratios</span><span class="p">,</span> <span class="n">curve_3d</span><span class="o">.</span><span class="n">pnt</span><span class="o">.</span><span class="n">coordinates</span><span class="p">)])</span>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">curve_3d</span><span class="p">,</span> <span class="n">B_SPLINE_CURVE_WITH_KNOTS</span><span class="p">):</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s1">' es in: '</span><span class="p">,</span>
|
||||
<span class="nb">any</span><span class="p">([</span><span class="n">vector</span><span class="o">.</span><span class="n">isclose</span><span class="p">(</span><span class="n">edge_element</span><span class="o">.</span><span class="n">edge_start</span><span class="o">.</span><span class="n">vertex_geometry</span><span class="o">.</span><span class="n">coordinates</span><span class="p">,</span> <span class="n">i</span><span class="o">.</span><span class="n">coordinates</span><span class="p">,</span> <span class="n">abs_tol</span><span class="o">=</span><span class="mf">2.1</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">curve_3d</span><span class="o">.</span><span class="n">control_points</span><span class="p">]))</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s1">' ee in: '</span><span class="p">,</span>
|
||||
<span class="nb">any</span><span class="p">([</span><span class="n">vector</span><span class="o">.</span><span class="n">isclose</span><span class="p">(</span><span class="n">edge_element</span><span class="o">.</span><span class="n">edge_end</span><span class="o">.</span><span class="n">vertex_geometry</span><span class="o">.</span><span class="n">coordinates</span><span class="p">,</span> <span class="n">i</span><span class="o">.</span><span class="n">coordinates</span><span class="p">,</span> <span class="n">abs_tol</span><span class="o">=</span><span class="mf">2.1</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">curve_3d</span><span class="o">.</span><span class="n">control_points</span><span class="p">]))</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s1">' control_points'</span><span class="p">)</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s1">' '</span><span class="p">,</span> <span class="n">curve_3d</span><span class="o">.</span><span class="n">control_points</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">coordinates</span><span class="p">,</span> <span class="s1">'...'</span><span class="p">)</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s1">' '</span><span class="p">,</span> <span class="n">curve_3d</span><span class="o">.</span><span class="n">control_points</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">coordinates</span><span class="p">)</span></div>
|
||||
<span class="c1"># print()</span>
|
||||
<span class="c1"># print_edge_loop(data_dict, '#1306')</span>
|
||||
|
||||
</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>
|
||||
1102
docs/build/html/_modules/pylib/data_step_std.html
vendored
Normal file
1102
docs/build/html/_modules/pylib/data_step_std.html
vendored
Normal file
File diff suppressed because it is too large
Load Diff
255
docs/build/html/_modules/pylib/function.html
vendored
255
docs/build/html/_modules/pylib/function.html
vendored
@@ -44,10 +44,12 @@
|
||||
<span class="sd"> :synopsis: Mathematical equations.</span>
|
||||
|
||||
<span class="sd">.. moduleauthor:: Daniel Weschke <daniel.weschke@directbox.de></span>
|
||||
|
||||
<span class="sd">Functions returns function to apply conditions.</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="kn">import</span> <span class="nn">math</span>
|
||||
<span class="kn">from</span> <span class="nn">pylib.data</span> <span class="kn">import</span> <span class="n">seq</span>
|
||||
<span class="kn">from</span> <span class="nn">pylib.mathematics</span> <span class="kn">import</span> <span class="n">lcm</span>
|
||||
<span class="kn">from</span> <span class="nn">.data</span> <span class="kn">import</span> <span class="n">seq</span>
|
||||
<span class="kn">from</span> <span class="nn">.mathematics</span> <span class="kn">import</span> <span class="n">lcm</span>
|
||||
|
||||
<div class="viewcode-block" id="transformation"><a class="viewcode-back" href="../../pylib.function.html#pylib.function.transformation">[docs]</a><span class="k">def</span> <span class="nf">transformation</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">scale_vertical</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">scale_horizontal</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
|
||||
<span class="n">shift_horizontal</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">shift_vertical</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
|
||||
@@ -114,12 +116,13 @@
|
||||
|
||||
<span class="sd"> :results: sine wave function of spatial variable x and optional</span>
|
||||
<span class="sd"> time t</span>
|
||||
<span class="sd"> :rtype: function</span>
|
||||
|
||||
<span class="sd"> In general, the function is:</span>
|
||||
|
||||
<span class="sd"> .. math::</span>
|
||||
<span class="sd"> y(x,t) = A\sin(kx + 2\pi f t + \varphi) + D \\</span>
|
||||
<span class="sd"> y(x,t) = A\sin(kx + \omega t + \varphi) + D</span>
|
||||
<span class="sd"> y(x,t) = A\sin(kx + \omega t + \varphi) + D \\</span>
|
||||
<span class="sd"> y(x,t) = A\sin(kx + 2\pi f t + \varphi) + D</span>
|
||||
|
||||
<span class="sd"> where:</span>
|
||||
|
||||
@@ -178,6 +181,7 @@
|
||||
|
||||
<span class="sd"> :results: sine wave function of spatial variable x and optional</span>
|
||||
<span class="sd"> time t</span>
|
||||
<span class="sd"> :rtype: function</span>
|
||||
|
||||
<span class="sd"> .. seealso::</span>
|
||||
<span class="sd"> :meth:`sine_wave`</span>
|
||||
@@ -188,12 +192,225 @@
|
||||
<span class="n">phi</span> <span class="o">=</span> <span class="n">phi</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="k">return</span> <span class="n">sine_wave</span><span class="p">(</span><span class="n">A</span><span class="o">=</span><span class="n">A</span><span class="p">,</span> <span class="n">k</span><span class="o">=</span><span class="n">k</span><span class="p">,</span> <span class="n">f</span><span class="o">=</span><span class="n">f</span><span class="p">,</span> <span class="n">phi</span><span class="o">=</span><span class="n">phi</span><span class="p">,</span> <span class="n">D</span><span class="o">=</span><span class="n">D</span><span class="p">,</span> <span class="n">degree</span><span class="o">=</span><span class="n">degree</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="b_spline_basis"><a class="viewcode-back" href="../../pylib.function.html#pylib.function.b_spline_basis">[docs]</a><span class="k">def</span> <span class="nf">b_spline_basis</span><span class="p">(</span><span class="n">knots</span><span class="p">,</span> <span class="n">knot_span</span><span class="p">,</span> <span class="n">degree</span><span class="p">):</span>
|
||||
<span class="sa">r</span><span class="sd">"""Cox-de Boor algorithm / recursion formula.</span>
|
||||
|
||||
<span class="sd"> Calculate the i-th B-spline basis function of degree p: N_{i,p}(u)</span>
|
||||
|
||||
<span class="sd"> :param knots: Knot vector U. m + 1 non-decreasing numbers / knots,</span>
|
||||
<span class="sd"> :math:`u_0 <= u_1 <= u_2 <= ... <= u_m`</span>
|
||||
<span class="sd"> :type knots: list</span>
|
||||
<span class="sd"> :param knot_span: i-th knot span</span>
|
||||
<span class="sd"> :type knot_span: int</span>
|
||||
<span class="sd"> :param degree: degree of B-spline basis function</span>
|
||||
<span class="sd"> :type degree: int</span>
|
||||
|
||||
<span class="sd"> :returns: B-spline basis function using variable, u \in [u_0, u_m]</span>
|
||||
<span class="sd"> :rtype: function</span>
|
||||
|
||||
<span class="sd"> .. math::</span>
|
||||
<span class="sd"> N_{i,0}(u) &= \begin{cases} 1 & \text{if } u_i \le u \lt u_{i+1} \\</span>
|
||||
<span class="sd"> 0 & \text{otherwise}\end{cases} \\</span>
|
||||
<span class="sd"> N_{i,p}(u) &= \frac{u - u_i}{u_{i+p} - u_i} N_{i,p-1}(u) +</span>
|
||||
<span class="sd"> \frac{u_{i+p+1} - u}{u_{i+p+1} - u_{i+1}} N_{i+1,p-1}(u)</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">U</span> <span class="o">=</span> <span class="n">knots</span>
|
||||
<span class="n">N</span> <span class="o">=</span> <span class="n">b_spline_basis</span>
|
||||
<span class="n">i</span> <span class="o">=</span> <span class="n">knot_span</span>
|
||||
<span class="n">p</span> <span class="o">=</span> <span class="n">degree</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">p</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="k">def</span> <span class="nf">Np</span><span class="p">(</span><span class="n">u</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="mi">1</span> <span class="k">if</span> <span class="n">U</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o"><=</span> <span class="n">u</span> <span class="o"><</span> <span class="n">U</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="k">else</span> <span class="mi">0</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">def</span> <span class="nf">Np</span><span class="p">(</span><span class="n">u</span><span class="p">):</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">term1</span> <span class="o">=</span> <span class="p">(</span><span class="n">u</span> <span class="o">-</span> <span class="n">U</span><span class="p">[</span><span class="n">i</span><span class="p">])</span><span class="o">/</span><span class="p">(</span><span class="n">U</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="n">p</span><span class="p">]</span> <span class="o">-</span> <span class="n">U</span><span class="p">[</span><span class="n">i</span><span class="p">])</span><span class="o">*</span><span class="n">N</span><span class="p">(</span><span class="n">U</span><span class="p">,</span> <span class="n">i</span><span class="p">,</span> <span class="n">p</span><span class="o">-</span><span class="mi">1</span><span class="p">)(</span><span class="n">u</span><span class="p">)</span>
|
||||
<span class="k">except</span><span class="p">:</span>
|
||||
<span class="n">term1</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">term2</span> <span class="o">=</span> <span class="p">(</span><span class="n">U</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="n">p</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">u</span><span class="p">)</span><span class="o">/</span><span class="p">(</span><span class="n">U</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="n">p</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">U</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">])</span><span class="o">*</span><span class="n">N</span><span class="p">(</span><span class="n">U</span><span class="p">,</span> <span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span> <span class="n">p</span><span class="o">-</span><span class="mi">1</span><span class="p">)(</span><span class="n">u</span><span class="p">)</span>
|
||||
<span class="k">except</span><span class="p">:</span>
|
||||
<span class="n">term2</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="k">return</span> <span class="n">term1</span> <span class="o">+</span> <span class="n">term2</span>
|
||||
<span class="k">return</span> <span class="n">Np</span></div>
|
||||
|
||||
<span class="c1"># TODO: other types than clamped?</span>
|
||||
<div class="viewcode-block" id="b_spline_knots"><a class="viewcode-back" href="../../pylib.function.html#pylib.function.b_spline_knots">[docs]</a><span class="k">def</span> <span class="nf">b_spline_knots</span><span class="p">(</span><span class="n">control_point_spans</span><span class="p">,</span> <span class="n">degree</span><span class="o">=</span><span class="mi">3</span><span class="p">):</span>
|
||||
<span class="sd">"""B-spline knots to generate a clamped uniform B-spline curve</span>
|
||||
<span class="sd"> of degree p (order + 1).</span>
|
||||
|
||||
<span class="sd"> The internal knots are equally spaced (uniform B-spline curve)</span>
|
||||
|
||||
<span class="sd"> :param control_point_spans: number of control points + 1</span>
|
||||
<span class="sd"> :type control_point_spans: int</span>
|
||||
<span class="sd"> :param degree: degree of B-spline basis functions (default = 3)</span>
|
||||
<span class="sd"> :type degree: int</span>
|
||||
|
||||
<span class="sd"> :returns: knot vector</span>
|
||||
<span class="sd"> :rtype: tuple</span>
|
||||
|
||||
<span class="sd"> .. seealso::</span>
|
||||
<span class="sd"> :meth:`b_spline_curve_with_knots`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">p</span> <span class="o">=</span> <span class="n">degree</span>
|
||||
<span class="n">n</span> <span class="o">=</span> <span class="n">control_point_spans</span>
|
||||
<span class="n">m</span> <span class="o">=</span> <span class="n">n</span> <span class="o">+</span> <span class="n">p</span> <span class="o">+</span> <span class="mi">1</span> <span class="c1"># number of knot spans</span>
|
||||
|
||||
<span class="c1"># number of</span>
|
||||
<span class="n">U_outer</span> <span class="o">=</span> <span class="n">p</span> <span class="o">+</span> <span class="mi">1</span> <span class="c1"># at each of the vector</span>
|
||||
<span class="n">U_inner</span> <span class="o">=</span> <span class="n">m</span> <span class="o">+</span> <span class="mi">1</span> <span class="o">-</span> <span class="mi">2</span><span class="o">*</span><span class="p">(</span><span class="n">U_outer</span><span class="p">)</span>
|
||||
|
||||
<span class="n">U</span> <span class="o">=</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">U_outer</span><span class="p">)</span>
|
||||
<span class="n">U</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="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">U_inner</span><span class="p">)]</span>
|
||||
<span class="n">U</span> <span class="o">+=</span> <span class="p">[</span><span class="n">U_inner</span><span class="p">]</span><span class="o">*</span><span class="p">(</span><span class="n">U_outer</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">U</span><span class="p">)</span> <span class="c1"># tuples are hashable</span></div>
|
||||
|
||||
<div class="viewcode-block" id="b_spline_curve_with_knots"><a class="viewcode-back" href="../../pylib.function.html#pylib.function.b_spline_curve_with_knots">[docs]</a><span class="k">def</span> <span class="nf">b_spline_curve_with_knots</span><span class="p">(</span><span class="n">degree</span><span class="p">,</span> <span class="n">control_points</span><span class="p">,</span> <span class="n">knots</span><span class="p">):</span>
|
||||
<span class="sd">"""B-spline curve of degree p (order + 1) on a given set of knots.</span>
|
||||
|
||||
<span class="sd"> n, m and p must satisfy m = n + p + 1.</span>
|
||||
|
||||
<span class="sd"> :param degree: degree of B-spline basis functions</span>
|
||||
<span class="sd"> :type degree: int</span>
|
||||
<span class="sd"> :param control_points: control points P, n + 1 control points</span>
|
||||
<span class="sd"> :type control_points: list</span>
|
||||
<span class="sd"> :param knots: Knot vector U. m + 1 non-decreasing numbers / knots,</span>
|
||||
<span class="sd"> :math:`u_0 <= u_1 <= u_2 <= ... <= u_m`</span>
|
||||
<span class="sd"> :type knots: list</span>
|
||||
|
||||
<span class="sd"> :returns: B-spline curve using variable, u \in [u_0, u_m]</span>
|
||||
<span class="sd"> :rtype: function</span>
|
||||
|
||||
<span class="sd"> .. math::</span>
|
||||
<span class="sd"> \mathbf{C}_p(u) = \sum\limits_{i=0}^{n} N_{i,p}(u) \mathbf{P}_i</span>
|
||||
|
||||
<span class="sd"> * open B-spline curves</span>
|
||||
|
||||
<span class="sd"> * the curve will not touch the first and last legs of the</span>
|
||||
<span class="sd"> control polyline</span>
|
||||
<span class="sd"> * the knot vector does not have any particular structure</span>
|
||||
<span class="sd"> * for degree p, intervals [u_0, u_p) and [u_{n-p}, u_n) will not</span>
|
||||
<span class="sd"> have "full support" of basis functions and are ignored when a</span>
|
||||
<span class="sd"> B-spline curve is open. For open B-spline curves, the domain</span>
|
||||
<span class="sd"> is inteval [u_p, u_{n-p}]</span>
|
||||
|
||||
<span class="sd"> * clamped B-spline curves, nonperiodic B-spline curves</span>
|
||||
|
||||
<span class="sd"> * the curve is tangent to the first and the last legs just like</span>
|
||||
<span class="sd"> a Bézier curve</span>
|
||||
<span class="sd"> * the first knot and the last knot must be repeated p+1 times</span>
|
||||
<span class="sd"> (i. e., of multiplicity p+1)</span>
|
||||
|
||||
<span class="sd"> * closed B-spline curves</span>
|
||||
|
||||
<span class="sd"> * the start and the end of the generated curve join together</span>
|
||||
<span class="sd"> forming a closed loop</span>
|
||||
<span class="sd"> * repeating some knots and control points # TODO: which?</span>
|
||||
|
||||
<span class="sd"> * uniform B-spline curves</span>
|
||||
|
||||
<span class="sd"> * internal knots are equally spaced</span>
|
||||
|
||||
<span class="sd"> * Bézier curves</span>
|
||||
|
||||
<span class="sd"> * a B-spline with no internal knots.</span>
|
||||
|
||||
<span class="sd"> .. seealso::</span>
|
||||
<span class="sd"> :meth:`b_spline_knots`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">dim</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">control_points</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||||
<span class="k">def</span> <span class="nf">C</span><span class="p">(</span><span class="n">u</span><span class="p">):</span>
|
||||
<span class="n">NiPi</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">*</span> <span class="n">dim</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="nb">len</span><span class="p">(</span><span class="n">control_points</span><span class="p">)):</span>
|
||||
<span class="n">Ni</span> <span class="o">=</span> <span class="n">b_spline_basis</span><span class="p">(</span><span class="n">knots</span><span class="p">,</span> <span class="n">i</span><span class="p">,</span> <span class="n">degree</span><span class="p">)</span>
|
||||
<span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">dim</span><span class="p">):</span>
|
||||
<span class="n">NiPi</span><span class="p">[</span><span class="n">j</span><span class="p">]</span> <span class="o">+=</span> <span class="n">Ni</span><span class="p">(</span><span class="n">u</span><span class="p">)</span><span class="o">*</span><span class="n">control_points</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="n">j</span><span class="p">]</span>
|
||||
<span class="k">return</span> <span class="n">NiPi</span>
|
||||
<span class="k">return</span> <span class="n">C</span></div>
|
||||
|
||||
<div class="viewcode-block" id="sample_half_open"><a class="viewcode-back" href="../../pylib.function.html#pylib.function.sample_half_open">[docs]</a><span class="k">def</span> <span class="nf">sample_half_open</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">n</span><span class="o">=</span><span class="mi">50</span><span class="p">,</span> <span class="n">endpoint_epsilon</span><span class="o">=</span><span class="mf">1e-7</span><span class="p">):</span>
|
||||
<span class="c1"># hack to sample close to the endpoint</span>
|
||||
<span class="n">x</span> <span class="o">=</span> <span class="n">seq</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="p">(</span><span class="n">b</span><span class="o">-</span><span class="n">a</span><span class="p">)</span><span class="o">/</span><span class="n">n</span><span class="p">)</span> <span class="o">+</span> <span class="p">[</span><span class="n">b</span><span class="o">-</span><span class="n">endpoint_epsilon</span><span class="p">]</span>
|
||||
<span class="c1"># Sample the function</span>
|
||||
<span class="k">return</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="k">for</span> <span class="n">xi</span> <span class="ow">in</span> <span class="n">x</span><span class="p">]</span></div>
|
||||
|
||||
<div class="viewcode-block" id="sample_half_open_seq"><a class="viewcode-back" href="../../pylib.function.html#pylib.function.sample_half_open_seq">[docs]</a><span class="k">def</span> <span class="nf">sample_half_open_seq</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">endpoint_epsilon</span><span class="o">=</span><span class="mf">1e-7</span><span class="p">):</span>
|
||||
<span class="c1"># hack to sample close to the endpoint, x[-1] can be present</span>
|
||||
<span class="c1"># multiple times.</span>
|
||||
<span class="n">xend</span> <span class="o">=</span> <span class="n">x</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
|
||||
<span class="n">x</span> <span class="o">=</span> <span class="p">[</span><span class="n">xi</span> <span class="k">for</span> <span class="n">xi</span> <span class="ow">in</span> <span class="n">x</span> <span class="k">if</span> <span class="n">xi</span> <span class="o">!=</span> <span class="n">xend</span><span class="p">]</span> <span class="o">+</span> <span class="p">[</span><span class="n">xend</span><span class="o">-</span><span class="n">endpoint_epsilon</span><span class="p">]</span>
|
||||
<span class="c1"># Sample the function</span>
|
||||
<span class="k">return</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="k">for</span> <span class="n">xi</span> <span class="ow">in</span> <span class="n">x</span><span class="p">]</span></div>
|
||||
|
||||
<span class="c1">#</span>
|
||||
<span class="c1"># Parametric equations</span>
|
||||
<span class="c1"># roulette</span>
|
||||
<span class="c1">#</span>
|
||||
|
||||
<div class="viewcode-block" id="circle"><a class="viewcode-back" href="../../pylib.function.html#pylib.function.circle">[docs]</a><span class="k">def</span> <span class="nf">circle</span><span class="p">(</span><span class="n">r</span><span class="p">):</span>
|
||||
<span class="sa">r</span><span class="sd">"""Circle</span>
|
||||
|
||||
<span class="sd"> :param r: radius of the circle</span>
|
||||
<span class="sd"> :type r: float</span>
|
||||
|
||||
<span class="sd"> :results: functions for x of theta and y of theta and the interval</span>
|
||||
<span class="sd"> :rtype: tuple</span>
|
||||
|
||||
<span class="sd"> .. math::</span>
|
||||
<span class="sd"> x(\theta) = r\cos\theta \\</span>
|
||||
<span class="sd"> y(\theta) = r\sin\theta \\</span>
|
||||
<span class="sd"> \theta = \left[0, 2\pi\right]</span>
|
||||
|
||||
<span class="sd"> ::</span>
|
||||
|
||||
<span class="sd"> * *</span>
|
||||
<span class="sd"> * r *</span>
|
||||
<span class="sd"> * *</span>
|
||||
<span class="sd"> * *</span>
|
||||
<span class="sd"> * *</span>
|
||||
<span class="sd"> * *</span>
|
||||
|
||||
<span class="sd"> >>> x, y = circle(20)[:2]</span>
|
||||
<span class="sd"> >>> x, y, _ = circle(20)</span>
|
||||
<span class="sd"> >>> x, y, interval = circle(20)</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="n">ellipse</span><span class="p">(</span><span class="n">r</span><span class="p">,</span> <span class="n">r</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="ellipse"><a class="viewcode-back" href="../../pylib.function.html#pylib.function.ellipse">[docs]</a><span class="k">def</span> <span class="nf">ellipse</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
|
||||
<span class="sa">r</span><span class="sd">"""Ellipse</span>
|
||||
|
||||
<span class="sd"> :param a: semi-major axis</span>
|
||||
<span class="sd"> :type a: float</span>
|
||||
<span class="sd"> :param b: semi-minor axis</span>
|
||||
<span class="sd"> :type b: float</span>
|
||||
|
||||
<span class="sd"> :results: functions for x of theta and y of theta and the interval</span>
|
||||
<span class="sd"> :rtype: tuple</span>
|
||||
|
||||
<span class="sd"> .. math::</span>
|
||||
<span class="sd"> x(\theta) = a\cos\theta \\</span>
|
||||
<span class="sd"> y(\theta) = b\sin\theta \\</span>
|
||||
<span class="sd"> \theta = \left[0, 2\pi\right]</span>
|
||||
|
||||
<span class="sd"> ::</span>
|
||||
|
||||
<span class="sd"> * .*</span>
|
||||
<span class="sd"> * b : *</span>
|
||||
<span class="sd"> * :......*</span>
|
||||
<span class="sd"> * a *</span>
|
||||
<span class="sd"> * *</span>
|
||||
<span class="sd"> * *</span>
|
||||
|
||||
<span class="sd"> >>> x, y = ellipse(10, 5)[:2]</span>
|
||||
<span class="sd"> >>> x, y, _ = ellipse(10, 5)</span>
|
||||
<span class="sd"> >>> x, y, interval = ellipse(10, 5)</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="n">a</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="n">y</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">theta</span><span class="p">:</span> <span class="n">b</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="k">return</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</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="p">]</span></div>
|
||||
|
||||
<div class="viewcode-block" id="hypotrochoid"><a class="viewcode-back" href="../../pylib.function.html#pylib.function.hypotrochoid">[docs]</a><span class="k">def</span> <span class="nf">hypotrochoid</span><span class="p">(</span><span class="n">R</span><span class="p">,</span> <span class="n">r</span><span class="p">,</span> <span class="n">d</span><span class="p">):</span>
|
||||
<span class="sa">r</span><span class="sd">"""Hypotrochoid</span>
|
||||
|
||||
@@ -208,7 +425,7 @@
|
||||
<span class="sd"> :param d: distance from the center of the interior circle</span>
|
||||
<span class="sd"> :type d: float</span>
|
||||
|
||||
<span class="sd"> :results: functions for x of theta and y of theta</span>
|
||||
<span class="sd"> :results: functions for x of theta and y of theta and the interval</span>
|
||||
<span class="sd"> :rtype: tuple</span>
|
||||
|
||||
<span class="sd"> .. math::</span>
|
||||
@@ -223,7 +440,7 @@
|
||||
<span class="sd"> * *</span>
|
||||
<span class="sd"> * * * *</span>
|
||||
<span class="sd"> * * r **</span>
|
||||
<span class="sd"> * * .... *</span>
|
||||
<span class="sd"> * * ,.. *</span>
|
||||
<span class="sd"> * * d *</span>
|
||||
<span class="sd"> * * **</span>
|
||||
<span class="sd"> * * * *</span>
|
||||
@@ -231,16 +448,16 @@
|
||||
<span class="sd"> * *</span>
|
||||
<span class="sd"> * * *</span>
|
||||
|
||||
<span class="sd"> >>> x, y = hyotrochoid(20, 6, 6)[:1]</span>
|
||||
<span class="sd"> >>> x, y, theta_end = hyotrochoid(20, 6, 6)</span>
|
||||
<span class="sd"> >>> x, y = hyotrochoid(20, 6, 6)[:2]</span>
|
||||
<span class="sd"> >>> x, y, _ = hyotrochoid(20, 6, 6)</span>
|
||||
<span class="sd"> >>> x, y, interval = hyotrochoid(20, 6, 6)</span>
|
||||
|
||||
<span class="sd"> .. seealso::</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>
|
||||
<span class="n">theta_end</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">lcm</span><span class="p">(</span><span class="n">r</span><span class="p">,</span> <span class="n">R</span><span class="p">)</span><span class="o">/</span><span class="n">R</span>
|
||||
<span class="k">return</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">theta_end</span></div>
|
||||
<span class="k">return</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</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">lcm</span><span class="p">(</span><span class="n">r</span><span class="p">,</span> <span class="n">R</span><span class="p">)</span><span class="o">/</span><span class="n">R</span><span class="p">]</span></div>
|
||||
|
||||
<div class="viewcode-block" id="epitrochoid"><a class="viewcode-back" href="../../pylib.function.html#pylib.function.epitrochoid">[docs]</a><span class="k">def</span> <span class="nf">epitrochoid</span><span class="p">(</span><span class="n">R</span><span class="p">,</span> <span class="n">r</span><span class="p">,</span> <span class="n">d</span><span class="p">):</span>
|
||||
<span class="sa">r</span><span class="sd">"""Epitrochoid</span>
|
||||
@@ -256,7 +473,7 @@
|
||||
<span class="sd"> :param d: distance from the center of the exterior circle</span>
|
||||
<span class="sd"> :type d: float</span>
|
||||
|
||||
<span class="sd"> :results: functions for x of theta and y of theta</span>
|
||||
<span class="sd"> :results: functions for x of theta and y of theta and the interval</span>
|
||||
<span class="sd"> :rtype: tuple</span>
|
||||
|
||||
<span class="sd"> .. math::</span>
|
||||
@@ -271,7 +488,7 @@
|
||||
<span class="sd"> * *</span>
|
||||
<span class="sd"> * * * *</span>
|
||||
<span class="sd"> * * * r *</span>
|
||||
<span class="sd"> * ** .... *</span>
|
||||
<span class="sd"> * ** .., *</span>
|
||||
<span class="sd"> * ** d *</span>
|
||||
<span class="sd"> * * * *</span>
|
||||
<span class="sd"> * * * *</span>
|
||||
@@ -279,13 +496,13 @@
|
||||
<span class="sd"> * *</span>
|
||||
<span class="sd"> * * *</span>
|
||||
|
||||
<span class="sd"> >>> x, y = epitrochoid(3, 1, 0.5)[:1]</span>
|
||||
<span class="sd"> >>> x, y, theta_end = epitrochoid(3, 1, 0.5)</span>
|
||||
<span class="sd"> >>> x, y = epitrochoid(3, 1, 0.5)[:2]</span>
|
||||
<span class="sd"> >>> x, y, _ = epitrochoid(3, 1, 0.5)</span>
|
||||
<span class="sd"> >>> x, y, interval = epitrochoid(3, 1, 0.5)</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>
|
||||
<span class="n">theta_end</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="k">return</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">theta_end</span></div>
|
||||
<span class="k">return</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</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="p">]</span></div>
|
||||
|
||||
<div class="viewcode-block" id="to_str"><a class="viewcode-back" href="../../pylib.function.html#pylib.function.to_str">[docs]</a><span class="k">def</span> <span class="nf">to_str</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">x</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">x_0</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">x_1</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">t</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">h</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">w</span><span class="o">=</span><span class="mi">80</span><span class="p">,</span> <span class="n">density</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">char_set</span><span class="o">=</span><span class="s2">"line"</span><span class="p">):</span>
|
||||
<span class="sd">"""Represent functions as string frame with a specific character set.</span>
|
||||
@@ -299,7 +516,7 @@
|
||||
<span class="sd"> :type w: int</span>
|
||||
|
||||
<span class="sd"> :param char_set: either "braille" or "block". "braille" uses Unicode</span>
|
||||
<span class="sd"> Characters in the Braille Patterns Block (fisrt index U+2800, last</span>
|
||||
<span class="sd"> Characters in the Braille Patterns Block (first index U+2800, last</span>
|
||||
<span class="sd"> index U+28FF [CUDB]_) and the "block" uses part of the Unicode</span>
|
||||
<span class="sd"> Characters in the Block Elements Block (fisrt index U+2580, last</span>
|
||||
<span class="sd"> index U+259F [CUDB]_). Alias for braille is line and alias for</span>
|
||||
@@ -433,7 +650,9 @@
|
||||
<span class="c1"># divide step width of the sequence by 2 (double density, 2 dots/pixel per char)</span>
|
||||
<span class="c1"># multiplicate x by 2 (2 dots/pixel per char)</span>
|
||||
<span class="k">for</span> <span class="n">x_i</span> <span class="ow">in</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="o">*</span><span class="n">pixels_horizontal</span><span class="p">,</span> <span class="n">x_1</span><span class="o">*</span><span class="n">window_factor</span><span class="o">*</span><span class="n">pixels_horizontal</span><span class="p">,</span> <span class="mi">1</span><span class="o">/</span><span class="n">density</span><span class="p">):</span>
|
||||
<span class="n">canvas</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">x_i</span><span class="p">,</span> <span class="n">f</span><span class="p">(</span><span class="n">x_i</span><span class="p">,</span> <span class="n">t</span><span class="p">))</span>
|
||||
<span class="n">y_i</span> <span class="o">=</span> <span class="n">f</span><span class="p">(</span><span class="n">x_i</span><span class="p">,</span> <span class="n">t</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="mi">0</span> <span class="o">>=</span> <span class="n">y_i</span> <span class="o">>=</span> <span class="o">-</span><span class="n">h</span><span class="o">*</span><span class="n">pixels_vertical</span><span class="p">:</span>
|
||||
<span class="n">canvas</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">x_i</span><span class="p">,</span> <span class="n">y_i</span><span class="p">)</span>
|
||||
<span class="c1">#frame = canvas.frame(min_x=a*pixel_per_char, min_y=1, max_x=b*pixel_per_char, max_y=21)</span>
|
||||
<span class="n">frame</span> <span class="o">=</span> <span class="n">canvas</span><span class="o">.</span><span class="n">frame</span><span class="p">()</span>
|
||||
<span class="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>
|
||||
|
||||
201
docs/build/html/_modules/pylib/geometry.html
vendored
201
docs/build/html/_modules/pylib/geometry.html
vendored
@@ -45,8 +45,8 @@
|
||||
|
||||
<span class="sd">.. moduleauthor:: Daniel Weschke <daniel.weschke@directbox.de></span>
|
||||
|
||||
<span class="sd">Affine transforms</span>
|
||||
<span class="sd">-----------------</span>
|
||||
|
||||
<span class="sd">.. rubric:: Affine transforms</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>
|
||||
@@ -56,12 +56,21 @@
|
||||
<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">.data</span> <span class="kn">import</span> <span class="n">seq</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">.function</span> <span class="kn">import</span> <span class="n">circle</span><span class="p">,</span> <span class="n">ellipse</span><span class="p">,</span> <span class="n">b_spline_curve_with_knots</span>
|
||||
|
||||
<div class="viewcode-block" id="Properties"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Properties">[docs]</a><span class="k">class</span> <span class="nc">Properties</span><span class="p">():</span>
|
||||
<span class="n">circle_sectors</span> <span class="o">=</span> <span class="mi">12</span> <span class="c1"># 12 = 30°</span></div>
|
||||
|
||||
<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></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 class="viewcode-block" id="Direction.cross"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Direction.cross">[docs]</a> <span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">cross</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="o">*</span><span class="n">vector</span><span class="o">.</span><span class="n">cross</span><span class="p">(</span><span class="n">a</span><span class="p">[:</span><span class="mi">3</span><span class="p">],</span> <span class="n">b</span><span class="p">[:</span><span class="mi">3</span><span class="p">]))</span></div></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>
|
||||
@@ -79,32 +88,41 @@
|
||||
<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>
|
||||
<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="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">__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="n">Direction</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="n">Direction</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="n">Direction</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="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="n">vector</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>
|
||||
|
||||
<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>
|
||||
<div class="viewcode-block" id="CS.init_xyz"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.CS.init_xyz">[docs]</a> <span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">init_xyz</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">x</span><span class="o">=</span><span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="n">y</span><span class="o">=</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="n">z</span><span class="o">=</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">]):</span>
|
||||
<span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="n">Direction</span><span class="p">(</span><span class="o">*</span><span class="n">x</span><span class="p">),</span> <span class="n">Direction</span><span class="p">(</span><span class="o">*</span><span class="n">y</span><span class="p">),</span> <span class="n">Direction</span><span class="p">(</span><span class="o">*</span><span class="n">z</span><span class="p">))</span></div>
|
||||
|
||||
<div class="viewcode-block" id="CS.xm90"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.CS.xm90">[docs]</a> <span class="nd">@staticmethod</span>
|
||||
<span class="k">def</span> <span class="nf">xm90</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="mi">1</span><span class="p">),</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="mi">0</span><span class="p">))</span></div>
|
||||
<div class="viewcode-block" id="CS.x90"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.CS.x90">[docs]</a> <span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">x90</span><span class="p">(</span><span class="bp">cls</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="n">Direction</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">Direction</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="n">Direction</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>
|
||||
|
||||
<div class="viewcode-block" id="CS.y90"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.CS.y90">[docs]</a> <span class="nd">@staticmethod</span>
|
||||
<span class="k">def</span> <span class="nf">y90</span><span class="p">():</span>
|
||||
<span class="k">return</span> <span class="n">CS</span><span class="p">((</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</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></div>
|
||||
<div class="viewcode-block" id="CS.xm90"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.CS.xm90">[docs]</a> <span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">xm90</span><span class="p">(</span><span class="bp">cls</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="n">Direction</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">Direction</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="n">Direction</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="mi">0</span><span class="p">))</span></div>
|
||||
|
||||
<div class="viewcode-block" id="CS.ym90"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.CS.ym90">[docs]</a> <span class="nd">@staticmethod</span>
|
||||
<span class="k">def</span> <span class="nf">ym90</span><span class="p">():</span>
|
||||
<span class="k">return</span> <span class="n">CS</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> <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></div>
|
||||
<div class="viewcode-block" id="CS.y90"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.CS.y90">[docs]</a> <span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">y90</span><span class="p">(</span><span class="bp">cls</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="n">Direction</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="n">Direction</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">Direction</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></div>
|
||||
|
||||
<div class="viewcode-block" id="CS.ym90"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.CS.ym90">[docs]</a> <span class="nd">@classmethod</span>
|
||||
<span class="k">def</span> <span class="nf">ym90</span><span class="p">(</span><span class="bp">cls</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="bp">cls</span><span class="p">(</span><span class="n">Direction</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="n">Direction</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">Direction</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></div>
|
||||
|
||||
<div class="viewcode-block" id="CS.get_coordinates"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.CS.get_coordinates">[docs]</a> <span class="k">def</span> <span class="nf">get_coordinates</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="bp">self</span><span class="p">[:</span><span class="mi">3</span><span class="p">,:</span><span class="mi">3</span><span class="p">]</span></div></div>
|
||||
|
||||
<span class="c1"># TODO: Wireframe(list) or Wireframe(matrix) ?</span>
|
||||
<span class="c1"># TODO: Polyline(list) or Polyline(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>
|
||||
<div class="viewcode-block" id="Polyline"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Polyline">[docs]</a><span class="k">class</span> <span class="nc">Polyline</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>
|
||||
@@ -113,44 +131,48 @@
|
||||
<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>
|
||||
<div class="viewcode-block" id="Polyline.__str__"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Polyline.__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>
|
||||
<div class="viewcode-block" id="Polyline.__repr__"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Polyline.__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="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span> <span class="o">+</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="Polyline.__iter__"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Polyline.__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>
|
||||
<div class="viewcode-block" id="Polyline.points"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Polyline.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>
|
||||
<div class="viewcode-block" id="Polyline.xy"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Polyline.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>
|
||||
<div class="viewcode-block" id="Polyline.xyz"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Polyline.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>
|
||||
<div class="viewcode-block" id="Polyline.rotate_x"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Polyline.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>
|
||||
<div class="viewcode-block" id="Polyline.rotate_y"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Polyline.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>
|
||||
<div class="viewcode-block" id="Polyline.rotate_z"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Polyline.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>
|
||||
<div class="viewcode-block" id="Polyline.translate"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Polyline.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>
|
||||
<div class="viewcode-block" id="Polyline.scale"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Polyline.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>
|
||||
@@ -159,28 +181,113 @@
|
||||
<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>
|
||||
<div class="viewcode-block" id="Polyline.ch_cs"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Polyline.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>
|
||||
<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">Polyline</span><span class="p">):</span>
|
||||
<span class="sd">"""Line, an 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="c1"># TODO: combining wit non Arc version?</span>
|
||||
<div class="viewcode-block" id="ArcCircle"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.ArcCircle">[docs]</a><span class="k">class</span> <span class="nc">ArcCircle</span><span class="p">(</span><span class="n">Polyline</span><span class="p">):</span>
|
||||
<span class="sd">"""Arc of a circle, an open wireframe object in local coordinate</span>
|
||||
<span class="sd"> system</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="n">radius</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">ang1</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">ang2</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="p">,</span> <span class="n">n</span><span class="o">=</span><span class="kc">None</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">interval</span> <span class="o">=</span> <span class="n">circle</span><span class="p">(</span><span class="n">radius</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">n</span><span class="p">:</span>
|
||||
<span class="n">n</span> <span class="o">=</span> <span class="n">Properties</span><span class="o">.</span><span class="n">circle_sectors</span>
|
||||
<span class="n">delta</span> <span class="o">=</span> <span class="n">interval</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">/</span><span class="n">n</span>
|
||||
<span class="n">points</span> <span class="o">=</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">ang1</span><span class="p">),</span> <span class="n">y</span><span class="p">(</span><span class="n">ang1</span><span class="p">),</span> <span class="mi">0</span><span class="p">))</span>
|
||||
<span class="k">if</span> <span class="n">ang1</span> <span class="o">></span> <span class="n">ang2</span> <span class="p">:</span>
|
||||
<span class="n">ang1</span> <span class="o">=</span> <span class="n">ang1</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="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">ang1</span> <span class="o">//</span> <span class="n">delta</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">ang2</span> <span class="o">//</span> <span class="n">delta</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</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">a</span><span class="p">,</span> <span class="n">b</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">i</span><span class="o">*</span><span class="n">delta</span><span class="p">),</span> <span class="n">y</span><span class="p">(</span><span class="n">i</span><span class="o">*</span><span class="n">delta</span><span class="p">),</span> <span class="mi">0</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">ang2</span><span class="p">),</span> <span class="n">y</span><span class="p">(</span><span class="n">ang2</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>
|
||||
|
||||
<span class="c1"># TODO: combining wit non Arc version?</span>
|
||||
<div class="viewcode-block" id="ArcEllipse"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.ArcEllipse">[docs]</a><span class="k">class</span> <span class="nc">ArcEllipse</span><span class="p">(</span><span class="n">Polyline</span><span class="p">):</span>
|
||||
<span class="sd">"""Arc of an ellipse, an open wireframe object in local</span>
|
||||
<span class="sd"> coordinate system</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="n">a</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">b</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">ang1</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">ang2</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="p">,</span> <span class="n">n</span><span class="o">=</span><span class="kc">None</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">interval</span> <span class="o">=</span> <span class="n">ellipse</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">n</span><span class="p">:</span>
|
||||
<span class="n">n</span> <span class="o">=</span> <span class="n">Properties</span><span class="o">.</span><span class="n">circle_sectors</span>
|
||||
<span class="n">delta</span> <span class="o">=</span> <span class="n">interval</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">/</span><span class="n">n</span>
|
||||
<span class="n">points</span> <span class="o">=</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">ang1</span><span class="p">),</span> <span class="n">y</span><span class="p">(</span><span class="n">ang1</span><span class="p">),</span> <span class="mi">0</span><span class="p">))</span>
|
||||
<span class="k">if</span> <span class="n">ang1</span> <span class="o">></span> <span class="n">ang2</span> <span class="p">:</span>
|
||||
<span class="n">ang1</span> <span class="o">=</span> <span class="n">ang1</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="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">ang1</span> <span class="o">//</span> <span class="n">delta</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">ang2</span> <span class="o">//</span> <span class="n">delta</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</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">a</span><span class="p">,</span> <span class="n">b</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">i</span><span class="o">*</span><span class="n">delta</span><span class="p">),</span> <span class="n">y</span><span class="p">(</span><span class="n">i</span><span class="o">*</span><span class="n">delta</span><span class="p">),</span> <span class="mi">0</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">ang2</span><span class="p">),</span> <span class="n">y</span><span class="p">(</span><span class="n">ang2</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>
|
||||
|
||||
<span class="c1"># redefining the .function.sample_half_open(f, a, b, n=50, endpoint_epsilon=1e-7)</span>
|
||||
<span class="c1"># to create a list of Points</span>
|
||||
<div class="viewcode-block" id="sample_half_open"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.sample_half_open">[docs]</a><span class="k">def</span> <span class="nf">sample_half_open</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">n</span><span class="o">=</span><span class="mi">50</span><span class="p">,</span> <span class="n">endpoint_epsilon</span><span class="o">=</span><span class="mf">1e-7</span><span class="p">):</span>
|
||||
<span class="c1"># hack to sample close to the endpoint</span>
|
||||
<span class="n">x</span> <span class="o">=</span> <span class="n">seq</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="p">(</span><span class="n">b</span><span class="o">-</span><span class="n">a</span><span class="p">)</span><span class="o">/</span><span class="n">n</span><span class="p">)</span> <span class="o">+</span> <span class="p">[</span><span class="n">b</span><span class="o">-</span><span class="n">endpoint_epsilon</span><span class="p">]</span>
|
||||
<span class="c1"># Sample the function</span>
|
||||
<span class="k">return</span> <span class="p">[</span><span class="n">Point</span><span class="p">(</span><span class="o">*</span><span class="n">f</span><span class="p">(</span><span class="n">xi</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></div>
|
||||
|
||||
<span class="c1"># TODO: naming? combining wit non Arc version?</span>
|
||||
<div class="viewcode-block" id="ArcBSplineCurveWithKnots"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.ArcBSplineCurveWithKnots">[docs]</a><span class="k">class</span> <span class="nc">ArcBSplineCurveWithKnots</span><span class="p">(</span><span class="n">Polyline</span><span class="p">):</span>
|
||||
<span class="sd">"""B-spline curve with knots, an open wireframe object in local</span>
|
||||
<span class="sd"> 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">degree</span><span class="p">,</span> <span class="n">control_points</span><span class="p">,</span> <span class="n">knot_multiplicities</span><span class="p">,</span>
|
||||
<span class="n">knots</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">n</span><span class="o">=</span><span class="mi">5</span><span class="p">):</span>
|
||||
<span class="n">knots</span> <span class="o">=</span> <span class="p">[</span><span class="n">knots</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="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">knots</span><span class="p">))</span> <span class="k">for</span>
|
||||
<span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">knot_multiplicities</span><span class="p">[</span><span class="n">i</span><span class="p">])]</span>
|
||||
<span class="c1">#u = seq(knots[0], knots[-1], (knots[-1]-knots[0])/n) + [knots[-1]-1e-7]</span>
|
||||
<span class="n">C</span> <span class="o">=</span> <span class="n">b_spline_curve_with_knots</span><span class="p">(</span><span class="n">degree</span><span class="p">,</span> <span class="n">control_points</span><span class="p">,</span> <span class="n">knots</span><span class="p">)</span>
|
||||
<span class="c1">#points = [Point(*C(ui)) for ui in u]</span>
|
||||
<span class="n">points</span> <span class="o">=</span> <span class="n">sample_half_open</span><span class="p">(</span><span class="n">C</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">n</span><span class="o">=</span><span class="n">n</span><span class="p">,</span> <span class="n">endpoint_epsilon</span><span class="o">=</span><span class="mf">1e-7</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="B_spline_curve_with_knots"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.B_spline_curve_with_knots">[docs]</a><span class="k">class</span> <span class="nc">B_spline_curve_with_knots</span><span class="p">(</span><span class="n">Polyline</span><span class="p">):</span>
|
||||
<span class="sd">"""B-spline curve with knots, an open wireframe object in local</span>
|
||||
<span class="sd"> 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">degree</span><span class="p">,</span> <span class="n">control_points</span><span class="p">,</span> <span class="n">knot_multiplicities</span><span class="p">,</span>
|
||||
<span class="n">knots</span><span class="p">,</span> <span class="n">n</span><span class="o">=</span><span class="mi">5</span><span class="p">):</span>
|
||||
<span class="n">knots</span> <span class="o">=</span> <span class="p">[</span><span class="n">knots</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="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">knots</span><span class="p">))</span> <span class="k">for</span>
|
||||
<span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">knot_multiplicities</span><span class="p">[</span><span class="n">i</span><span class="p">])]</span>
|
||||
<span class="c1">#u = seq(knots[0], knots[-1], (knots[-1]-knots[0])/n) + [knots[-1]-1e-7]</span>
|
||||
<span class="n">C</span> <span class="o">=</span> <span class="n">b_spline_curve_with_knots</span><span class="p">(</span><span class="n">degree</span><span class="p">,</span> <span class="n">control_points</span><span class="p">,</span> <span class="n">knots</span><span class="p">)</span>
|
||||
<span class="c1">#points = [Point(*C(ui)) for ui in u]</span>
|
||||
<span class="n">points</span> <span class="o">=</span> <span class="n">sample_half_open</span><span class="p">(</span><span class="n">C</span><span class="p">,</span> <span class="n">knots</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">knots</span><span class="p">[</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="n">n</span><span class="p">,</span> <span class="n">endpoint_epsilon</span><span class="o">=</span><span class="mf">1e-7</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="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">Polyline</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="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="kc">None</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">interval</span> <span class="o">=</span> <span class="n">circle</span><span class="p">(</span><span class="n">radius</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">n</span><span class="p">:</span>
|
||||
<span class="n">n</span> <span class="o">=</span> <span class="n">Properties</span><span class="o">.</span><span class="n">circle_sectors</span>
|
||||
<span class="n">delta</span> <span class="o">=</span> <span class="n">interval</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">/</span><span class="n">n</span>
|
||||
<span class="n">points</span> <span class="o">=</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">i</span><span class="o">*</span><span class="n">delta</span><span class="p">),</span> <span class="n">y</span><span class="p">(</span><span class="n">i</span><span class="o">*</span><span class="n">delta</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="nb">range</span><span class="p">(</span><span class="n">n</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="Ellipse"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.Ellipse">[docs]</a><span class="k">class</span> <span class="nc">Ellipse</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">a</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">b</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="kc">None</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">interval</span> <span class="o">=</span> <span class="n">ellipse</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">n</span><span class="p">:</span>
|
||||
<span class="n">n</span> <span class="o">=</span> <span class="n">Properties</span><span class="o">.</span><span class="n">circle_sectors</span>
|
||||
<span class="n">delta</span> <span class="o">=</span> <span class="n">interval</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">/</span><span class="n">n</span>
|
||||
<span class="n">points</span> <span class="o">=</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">i</span><span class="o">*</span><span class="n">delta</span><span class="p">),</span> <span class="n">y</span><span class="p">(</span><span class="n">i</span><span class="o">*</span><span class="n">delta</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="nb">range</span><span class="p">(</span><span class="n">n</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>
|
||||
@@ -240,6 +347,13 @@
|
||||
<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></div>
|
||||
|
||||
<div class="viewcode-block" id="World.__str__"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.World.__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="n">result</span> <span class="o">=</span> <span class="s1">'World(</span><span class="se">\n</span><span class="s1">'</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">result</span> <span class="o">+=</span> <span class="s1">' '</span> <span class="o">+</span> <span class="nb">repr</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="o">+</span> <span class="s1">',</span><span class="se">\n</span><span class="s1">'</span>
|
||||
<span class="n">result</span> <span class="o">+=</span> <span class="s1">')'</span>
|
||||
<span class="k">return</span> <span class="n">result</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</span>
|
||||
<span class="sd"> was added.</span>
|
||||
@@ -279,7 +393,7 @@
|
||||
<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="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">Polyline</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>
|
||||
@@ -288,7 +402,7 @@
|
||||
<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="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">Polyline</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>
|
||||
@@ -297,7 +411,7 @@
|
||||
<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="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">Polyline</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>
|
||||
@@ -308,6 +422,7 @@
|
||||
|
||||
<div class="viewcode-block" id="World.add"><a class="viewcode-back" href="../../pylib.geometry.html#pylib.geometry.World.add">[docs]</a> <span class="k">def</span> <span class="nf">add</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">objects</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="c1"># calculated values are not correct anymore</span>
|
||||
<span class="c1"># [] + [] not possible bc objects are vectors</span>
|
||||
<span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_objects</span><span class="o">.</span><span class="n">append</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">objects</span><span class="p">]</span>
|
||||
<span class="k">return</span> <span class="bp">self</span></div>
|
||||
|
||||
|
||||
@@ -262,13 +262,18 @@
|
||||
<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="c1"># 'rotate: ←left, right, up, down, ctrl+left, ctrl+right\n' +</span>
|
||||
<span class="c1"># 'pan: shift+left, shift+right, shift+up, shift+down\n' +</span>
|
||||
<span class="c1"># 'zoom: ctrl+up, ctrl+down\n' +</span>
|
||||
<span class="c1"># 'view: f (front), l (left), r (right), t (top), b (bottom)\n' +</span>
|
||||
<span class="c1"># ' i (isometric), d (dimetric)',</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="s1">'rotate: [←], [→], [↑], [↓], [Ctrl][←], [Ctrl][→]</span><span class="se">\n</span><span class="s1">'</span> <span class="o">+</span>
|
||||
<span class="s1">'pan: [Shift][←], [Shift][→], [Shift][↑], [Shift][↓]</span><span class="se">\n</span><span class="s1">'</span> <span class="o">+</span>
|
||||
<span class="s1">'zoom: [Ctrl][↑], [Ctrl][↓]</span><span class="se">\n</span><span class="s1">'</span> <span class="o">+</span>
|
||||
<span class="s1">'view: [f]ront, [l]eft, [r]ight, [t]op, [b]ottom</span><span class="se">\n</span><span class="s1">'</span> <span class="o">+</span>
|
||||
<span class="s1">' [i]sometric, [d]imetric'</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>
|
||||
|
||||
151
docs/build/html/_modules/pylib/helper.html
vendored
Normal file
151
docs/build/html/_modules/pylib/helper.html
vendored
Normal file
@@ -0,0 +1,151 @@
|
||||
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>pylib.helper — 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.helper</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">"""Helper objects.</span>
|
||||
|
||||
<span class="sd">:Date: 2020-01-01</span>
|
||||
|
||||
<span class="sd">.. module:: helper</span>
|
||||
<span class="sd"> :platform: *nix, Windows</span>
|
||||
<span class="sd"> :synopsis: Helper objects.</span>
|
||||
|
||||
<span class="sd">.. moduleauthor:: Daniel Weschke <daniel.weschke@directbox.de></span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="kn">import</span> <span class="nn">time</span>
|
||||
<span class="kn">from</span> <span class="nn">contextlib</span> <span class="kn">import</span> <span class="n">ContextDecorator</span>
|
||||
|
||||
<div class="viewcode-block" id="timeit"><a class="viewcode-back" href="../../pylib.helper.html#pylib.helper.timeit">[docs]</a><span class="k">class</span> <span class="nc">timeit</span><span class="p">(</span><span class="n">ContextDecorator</span><span class="p">):</span>
|
||||
<span class="sd">"""Meassure time for a function or code block.</span>
|
||||
|
||||
<span class="sd"> :param description: description for the function or code block</span>
|
||||
<span class="sd"> used for the print-out</span>
|
||||
<span class="sd"> :type description: str</span>
|
||||
|
||||
<span class="sd"> :Example:</span>
|
||||
|
||||
<span class="sd"> >>> with timeit('section_test'):</span>
|
||||
<span class="sd"> ... # code</span>
|
||||
<span class="sd"> section_test took 0.006 ms</span>
|
||||
|
||||
<span class="sd"> ::</span>
|
||||
|
||||
<span class="sd"> @timeit('func')</span>
|
||||
<span class="sd"> def func():</span>
|
||||
<span class="sd"> # code</span>
|
||||
|
||||
<span class="sd"> >>> func()</span>
|
||||
<span class="sd"> func took 0.006 ms</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="n">description</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">description</span> <span class="o">=</span> <span class="n">description</span>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__enter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">start_time</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span>
|
||||
<span class="k">return</span> <span class="bp">self</span> <span class="c1"># to use as: with Timit() as t:</span>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__exit__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">exc</span><span class="p">):</span> <span class="c1"># exc: type, value, traceback</span>
|
||||
<span class="n">elapsed_time_ms</span> <span class="o">=</span> <span class="p">(</span><span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">start_time</span><span class="p">)</span> <span class="o">*</span> <span class="mi">1000</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s1">'</span><span class="si">{:s}</span><span class="s1"> took </span><span class="si">{:.3f}</span><span class="s1"> ms'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">description</span><span class="p">,</span> <span class="n">elapsed_time_ms</span><span class="p">))</span>
|
||||
<span class="k">return</span> <span class="kc">False</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>
|
||||
320
docs/build/html/_modules/pylib/mathematics.html
vendored
320
docs/build/html/_modules/pylib/mathematics.html
vendored
@@ -130,7 +130,7 @@
|
||||
<span class="sd"> >>> v[3]</span>
|
||||
<span class="sd"> 4</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="c1"># use the list.__getslice__ method and convert result to vector</span>
|
||||
<span class="c1"># use the list.__getitem__ 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></div>
|
||||
|
||||
@@ -385,12 +385,11 @@
|
||||
|
||||
<div class="viewcode-block" id="vector.full"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.vector.full">[docs]</a> <span class="nd">@staticmethod</span>
|
||||
<span class="k">def</span> <span class="nf">full</span><span class="p">(</span><span class="n">length</span><span class="p">,</span> <span class="n">fill_value</span><span class="p">):</span>
|
||||
<span class="sd">"""Returns a vector of length m or matrix of size m rows, n</span>
|
||||
<span class="sd"> columns filled with v.</span>
|
||||
<span class="sd">"""Returns a vector of length m filled with v.</span>
|
||||
|
||||
<span class="sd"> :param length: length of the vector, e. g. 3</span>
|
||||
<span class="sd"> :type length: int</span>
|
||||
<span class="sd"> :param fill_value: Fill value</span>
|
||||
<span class="sd"> :param fill_value: fill value</span>
|
||||
<span class="sd"> :Type fill_value: scalar</span>
|
||||
|
||||
<span class="sd"> :Example:</span>
|
||||
@@ -403,15 +402,14 @@
|
||||
|
||||
<div class="viewcode-block" id="vector.zeros"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.vector.zeros">[docs]</a> <span class="nd">@staticmethod</span>
|
||||
<span class="k">def</span> <span class="nf">zeros</span><span class="p">(</span><span class="n">length</span><span class="p">):</span>
|
||||
<span class="sd">"""Returns a zero vector of length m or matrix of size rows, n</span>
|
||||
<span class="sd"> columns filled with zeros.</span>
|
||||
<span class="sd">"""Returns a zero vector of length m filled with zeros.</span>
|
||||
|
||||
<span class="sd"> :param length: length of the vector, e. g. 3</span>
|
||||
<span class="sd"> :type length: int</span>
|
||||
|
||||
<span class="sd"> :Example:</span>
|
||||
|
||||
<span class="sd"> >>> v = zeros(3)</span>
|
||||
<span class="sd"> >>> v = vector.zeros(3)</span>
|
||||
<span class="sd"> >>> print(v)</span>
|
||||
<span class="sd"> [0.0, 0.0, 0.0]</span>
|
||||
<span class="sd"> """</span>
|
||||
@@ -419,40 +417,42 @@
|
||||
|
||||
<div class="viewcode-block" id="vector.ones"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.vector.ones">[docs]</a> <span class="nd">@staticmethod</span>
|
||||
<span class="k">def</span> <span class="nf">ones</span><span class="p">(</span><span class="n">length</span><span class="p">):</span>
|
||||
<span class="sd">"""Returns a vector of length m or matrix of size rows, n</span>
|
||||
<span class="sd"> columns filled with ones.</span>
|
||||
<span class="sd">"""Returns a vector of length m filled with ones.</span>
|
||||
|
||||
<span class="sd"> :param length: lhape of the vector, e. g. 3</span>
|
||||
<span class="sd"> :type length: int</span>
|
||||
|
||||
<span class="sd"> :Example:</span>
|
||||
|
||||
<span class="sd"> >>> v = ones(3)</span>
|
||||
<span class="sd"> >>> v = vector.ones(3)</span>
|
||||
<span class="sd"> >>> print(v)</span>
|
||||
<span class="sd"> [1.0, 1.0, 1.0]</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="n">vector</span><span class="o">.</span><span class="n">full</span><span class="p">(</span><span class="n">length</span><span class="p">,</span> <span class="mf">1.</span><span class="p">)</span></div>
|
||||
|
||||
<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,</span>
|
||||
<span class="sd"> n columns filled with random numbers.</span>
|
||||
<span class="k">def</span> <span class="nf">random</span><span class="p">(</span><span class="n">length</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 filled with random</span>
|
||||
<span class="sd"> numbers.</span>
|
||||
|
||||
<span class="sd"> :param length: lhape of the vector, e. g. 3</span>
|
||||
<span class="sd"> :type length: int</span>
|
||||
|
||||
<span class="sd"> :Example:</span>
|
||||
|
||||
<span class="sd"> >>> v = random(3)</span>
|
||||
<span class="sd"> >>> v = vector.random(3)</span>
|
||||
<span class="sd"> >>> print(v)</span>
|
||||
<span class="sd"> [0.9172905912930438, 0.8908124278322492, 0.5256002790725927]</span>
|
||||
<span class="sd"> >>> v = random(3, 1, 2)</span>
|
||||
<span class="sd"> >>> v = vector.random(3, 1, 2)</span>
|
||||
<span class="sd"> >>> print(v)</span>
|
||||
<span class="sd"> [1.2563665665080803, 1.9270454509964547, 1.2381672401270487]</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="kn">import</span> <span class="nn">random</span>
|
||||
<span class="n">dl</span> <span class="o">=</span> <span class="n">lmax</span><span class="o">-</span><span class="n">lmin</span>
|
||||
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="n">dl</span><span class="o">*</span><span class="n">random</span><span class="o">.</span><span class="n">random</span><span class="p">()</span><span class="o">+</span><span class="n">lmin</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">shape</span><span class="p">)])</span></div>
|
||||
<span class="k">return</span> <span class="n">vector</span><span class="p">([</span><span class="n">dl</span><span class="o">*</span><span class="n">random</span><span class="o">.</span><span class="n">random</span><span class="p">()</span><span class="o">+</span><span class="n">lmin</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">length</span><span class="p">)])</span></div>
|
||||
|
||||
<div class="viewcode-block" id="vector.normalize"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.vector.normalize">[docs]</a> <span class="nd">@staticmethod</span>
|
||||
<span class="k">def</span> <span class="nf">normalize</span><span class="p">(</span><span class="n">a</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="vector.normalized"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.vector.normalized">[docs]</a> <span class="nd">@staticmethod</span>
|
||||
<span class="k">def</span> <span class="nf">normalized</span><span class="p">(</span><span class="n">a</span><span class="p">):</span>
|
||||
<span class="sa">r</span><span class="sd">"""Normalize a vector (i. e. the vector has a length of 1)</span>
|
||||
|
||||
<span class="sd"> :type a: vector</span>
|
||||
@@ -468,7 +468,12 @@
|
||||
|
||||
<div class="viewcode-block" id="vector.ang"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.vector.ang">[docs]</a> <span class="nd">@staticmethod</span>
|
||||
<span class="k">def</span> <span class="nf">ang</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">math</span><span class="o">.</span><span class="n">acos</span><span class="p">(</span><span class="n">a</span> <span class="o">*</span> <span class="n">b</span> <span class="o">/</span> <span class="p">(</span><span class="nb">abs</span><span class="p">(</span><span class="n">a</span><span class="p">)</span> <span class="o">*</span> <span class="nb">abs</span><span class="p">(</span><span class="n">b</span><span class="p">)))</span></div>
|
||||
<span class="n">x</span> <span class="o">=</span> <span class="n">a</span> <span class="o">*</span> <span class="n">b</span> <span class="o">/</span> <span class="p">(</span><span class="nb">abs</span><span class="p">(</span><span class="n">a</span><span class="p">)</span> <span class="o">*</span> <span class="nb">abs</span><span class="p">(</span><span class="n">b</span><span class="p">))</span>
|
||||
<span class="c1"># decimal floating-point numbers are only approximated by the</span>
|
||||
<span class="c1"># binary floating-point numbers actually stored in the machine.</span>
|
||||
<span class="c1"># https://docs.python.org/3.8/tutorial/floatingpoint.html</span>
|
||||
<span class="n">xr15</span> <span class="o">=</span> <span class="nb">round</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="mi">15</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">math</span><span class="o">.</span><span class="n">acos</span><span class="p">(</span><span class="n">xr15</span><span class="p">)</span> <span class="k">if</span> <span class="o">-</span><span class="mi">1</span> <span class="o"><=</span> <span class="n">xr15</span> <span class="o"><=</span> <span class="mi">1</span> <span class="k">else</span> <span class="n">math</span><span class="o">.</span><span class="n">acos</span><span class="p">(</span><span class="n">x</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="vector.conjugate"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.vector.conjugate">[docs]</a> <span class="nd">@staticmethod</span>
|
||||
<span class="k">def</span> <span class="nf">conjugate</span><span class="p">(</span><span class="n">a</span><span class="p">):</span>
|
||||
@@ -524,9 +529,30 @@
|
||||
<span class="sd"> .. math::</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>
|
||||
<span class="k">return</span> <span class="n">vector</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.isclose"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.vector.isclose">[docs]</a> <span class="nd">@staticmethod</span>
|
||||
<span class="k">def</span> <span class="nf">isclose</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">rel_tol</span><span class="o">=</span><span class="mf">0.05</span><span class="p">,</span> <span class="n">abs_tol</span><span class="o">=</span><span class="mf">1e-8</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="nb">all</span><span class="p">([</span><span class="n">math</span><span class="o">.</span><span class="n">isclose</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">,</span> <span class="n">rel_tol</span><span class="o">=</span><span class="n">rel_tol</span><span class="p">,</span> <span class="n">abs_tol</span><span class="o">=</span><span class="n">abs_tol</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">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)])</span></div>
|
||||
|
||||
<div class="viewcode-block" id="vector.iscloseto"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.vector.iscloseto">[docs]</a> <span class="k">def</span> <span class="nf">iscloseto</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="o">.</span><span class="n">isclose</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="vector.normalize"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.vector.normalize">[docs]</a> <span class="k">def</span> <span class="nf">normalize</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sa">r</span><span class="sd">"""Normalize a vector (i. e. the vector has a length of 1)</span>
|
||||
|
||||
<span class="sd"> :type a: vector</span>
|
||||
|
||||
<span class="sd"> .. math::</span>
|
||||
<span class="sd"> \mathbf{\hat{a}} = \frac{\mathbf{a}}{|\mathbf{a}|}</span>
|
||||
|
||||
<span class="sd"> .. seealso::</span>
|
||||
<span class="sd"> :meth:`__abs__` for a norm (magnitude) of a vector</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="bp">self</span><span class="p">[:]</span> <span class="o">=</span> <span class="n">vector</span><span class="o">.</span><span class="n">normalized</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="bp">self</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>
|
||||
@@ -649,8 +675,16 @@
|
||||
|
||||
<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[:])</span>
|
||||
<span class="sd"> [[1, 2, 3, 0], [4, 5, 6, 0], [7, 8, 9, 0], [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[2, :])</span>
|
||||
<span class="sd"> [7, 8, 9, 0]</span>
|
||||
<span class="sd"> >>> print(m[:, 2])</span>
|
||||
<span class="sd"> [3, 6, 9, 0]</span>
|
||||
<span class="sd"> >>> print(m[2, 2])</span>
|
||||
<span class="sd"> 9</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>
|
||||
@@ -658,15 +692,143 @@
|
||||
<span class="sd"> >>> print(m[::2, ::2])</span>
|
||||
<span class="sd"> [[1, 3], [7, 9]]</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="c1"># TODO single row or column = vector (1d list)?</span>
|
||||
<span class="c1"># index: slice(stop), slice(start, stop[, step])</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="k">except</span><span class="p">:</span> <span class="c1"># 1d slicing</span>
|
||||
<span class="c1"># use the list.__getitem__ method and convert result to matrix</span>
|
||||
<span class="c1">#print(index)</span>
|
||||
<span class="k">try</span><span class="p">:</span> <span class="c1"># 2d slicing (tuple of sclices)</span>
|
||||
<span class="k">try</span><span class="p">:</span> <span class="c1"># range:range or range:single: [:, 2]</span>
|
||||
<span class="c1">#print(1)</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"># single:range: [2, :], [2, 2]</span>
|
||||
<span class="c1">#print(2)</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="mi">0</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">1</span><span class="p">])</span>
|
||||
<span class="k">except</span><span class="p">:</span> <span class="c1"># 1d slicing: [:], [2], [2][2]</span>
|
||||
<span class="c1">#print(3)</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></div>
|
||||
<span class="c1">#print(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="ow">and</span> \
|
||||
<span class="nb">isinstance</span><span class="p">(</span><span class="n">item</span><span class="p">[</span><span class="mi">0</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.__setitem__"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.matrix.__setitem__">[docs]</a> <span class="k">def</span> <span class="fm">__setitem__</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="n">value</span><span class="p">):</span>
|
||||
<span class="c1">#print(index, value)</span>
|
||||
<span class="k">try</span><span class="p">:</span> <span class="c1"># [2, 2]</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="o">.</span><span class="fm">__setitem__</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="n">value</span><span class="p">)</span>
|
||||
<span class="k">except</span><span class="p">:</span> <span class="c1"># [2], [2][2]</span>
|
||||
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__setitem__</span><span class="p">(</span><span class="n">index</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span></div>
|
||||
<span class="c1">#print(self)</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. (new object)</span>
|
||||
|
||||
<span class="sd"> :type other: scalar, vector (or 1d list), matrix (or 2d list)</span>
|
||||
|
||||
<span class="sd"> .. math::</span>
|
||||
<span class="sd"> \mathbf{C} &= \mathbf{A} \cdot b \\</span>
|
||||
<span class="sd"> \mathbf{c} &= \mathbf{A} \cdot \mathbf{b} \\</span>
|
||||
<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</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], \</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], \</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]]) * \</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]]) * \</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>
|
||||
|
||||
<span class="sd"> .. seealso::</span>
|
||||
<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">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">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></div>
|
||||
|
||||
<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. (new object)</span>
|
||||
|
||||
<span class="sd"> :type other: scalar (or 1d list and 2d list)</span>
|
||||
|
||||
<span class="sd"> .. math::</span>
|
||||
<span class="sd"> \mathbf{C} &= a \cdot \mathbf{B} \\</span>
|
||||
<span class="sd"> \mathbf{c} &= \mathbf{a} \cdot \mathbf{B} \\</span>
|
||||
<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</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], \</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], \</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__` 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">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">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></div>
|
||||
|
||||
<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>
|
||||
|
||||
<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.zeros"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.matrix.zeros">[docs]</a> <span class="nd">@staticmethod</span>
|
||||
<span class="k">def</span> <span class="nf">zeros</span><span class="p">(</span><span class="n">m</span><span class="p">,</span> <span class="n">n</span><span class="p">):</span>
|
||||
<span class="sd">"""Returns a zero matrix of size mxn; m rows and n columns</span>
|
||||
<span class="sd"> filled with zeros.</span>
|
||||
|
||||
<span class="sd"> :param m: number of rows of the matrix, e. g. 3</span>
|
||||
<span class="sd"> :type m: int</span>
|
||||
<span class="sd"> :param n: number of columns of the matrix, e. g. 3</span>
|
||||
<span class="sd"> :type n: int</span>
|
||||
|
||||
<span class="sd"> :Example:</span>
|
||||
|
||||
<span class="sd"> >>> m = matrix.zeros(3, 3)</span>
|
||||
<span class="sd"> >>> print(m)\</span>
|
||||
<span class="sd"> [[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0]]</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="n">matrix</span><span class="p">([[</span><span class="mf">0.</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="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">m</span><span class="p">)])</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>
|
||||
@@ -809,97 +971,23 @@
|
||||
<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>
|
||||
|
||||
<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. (new object)</span>
|
||||
|
||||
<span class="sd"> :type other: scalar, vector (or 1d list), matrix (or 2d list)</span>
|
||||
|
||||
<span class="sd"> .. math::</span>
|
||||
<span class="sd"> \mathbf{C} &= \mathbf{A} \cdot b \\</span>
|
||||
<span class="sd"> \mathbf{c} &= \mathbf{A} \cdot \mathbf{b} \\</span>
|
||||
<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</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], \</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], \</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]]) * \</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]]) * \</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>
|
||||
|
||||
<span class="sd"> .. seealso::</span>
|
||||
<span class="sd"> :meth:`__rmul__`</span>
|
||||
<div class="viewcode-block" id="matrix.transposed"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.matrix.transposed">[docs]</a> <span class="nd">@staticmethod</span>
|
||||
<span class="k">def</span> <span class="nf">transposed</span><span class="p">(</span><span class="n">a</span><span class="p">):</span>
|
||||
<span class="sd">"""Transpose</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">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">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></div>
|
||||
<span class="n">m</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
|
||||
<span class="n">n</span> <span class="o">=</span> <span class="nb">len</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="n">new</span> <span class="o">=</span> <span class="n">matrix</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="n">m</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">m</span><span class="p">):</span>
|
||||
<span class="k">for</span> <span class="n">j</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">new</span><span class="p">[</span><span class="n">j</span><span class="p">][</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">a</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="n">j</span><span class="p">]</span>
|
||||
<span class="k">return</span> <span class="n">new</span></div>
|
||||
|
||||
<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. (new object)</span>
|
||||
|
||||
<span class="sd"> :type other: scalar (or 1d list and 2d list)</span>
|
||||
|
||||
<span class="sd"> .. math::</span>
|
||||
<span class="sd"> \mathbf{C} &= a \cdot \mathbf{B} \\</span>
|
||||
<span class="sd"> \mathbf{c} &= \mathbf{a} \cdot \mathbf{B} \\</span>
|
||||
<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</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], \</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], \</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__` and :meth:`vector.__mul__` for vector * matrix</span>
|
||||
<div class="viewcode-block" id="matrix.transpose"><a class="viewcode-back" href="../../pylib.mathematics.html#pylib.mathematics.matrix.transpose">[docs]</a> <span class="k">def</span> <span class="nf">transpose</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Transpose</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">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">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></div>
|
||||
|
||||
<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>
|
||||
|
||||
<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>
|
||||
<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">transposed</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="bp">self</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>
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
<h1>Source code for pylib.numerical.ode</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">"""Numerical solver of ordinary differential equations.</span>
|
||||
<span class="sa">r</span><span class="sd">"""Numerical solver of ordinary differential equations.</span>
|
||||
|
||||
<span class="sd">Solves the initial value problem for systems of first order</span>
|
||||
<span class="sd">ordinary differential equations.</span>
|
||||
@@ -47,9 +47,14 @@
|
||||
<span class="sd"> :synopsis: Numerical solver.</span>
|
||||
|
||||
<span class="sd">.. moduleauthor:: Daniel Weschke <daniel.weschke@directbox.de></span>
|
||||
<span class="sd">"""</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">division</span><span class="p">,</span> <span class="n">print_function</span>
|
||||
<span class="sd">Approximate the solution :math:`x(t)` of the initial value problem</span>
|
||||
|
||||
<span class="sd">.. math ::</span>
|
||||
<span class="sd"> \frac{\mathrm{d}x}{\mathrm{d}t} = \dot{x} &= f(t,x) \\</span>
|
||||
<span class="sd"> x(t_0) &= x_0 \\</span>
|
||||
<span class="sd"> t &\in [t_0, t_n]</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="kn">from</span> <span class="nn">numpy</span> <span class="kn">import</span> <span class="n">array</span><span class="p">,</span> <span class="n">isnan</span><span class="p">,</span> <span class="nb">sum</span><span class="p">,</span> <span class="n">zeros</span><span class="p">,</span> <span class="n">dot</span>
|
||||
<span class="kn">from</span> <span class="nn">numpy.linalg</span> <span class="kn">import</span> <span class="n">norm</span><span class="p">,</span> <span class="n">inv</span>
|
||||
|
||||
@@ -73,20 +78,21 @@
|
||||
<span class="sd"> :param verbose: print information (default = False)</span>
|
||||
<span class="sd"> :type verbose: bool</span>
|
||||
|
||||
<span class="sd"> Approximate the solution of the initial value problem</span>
|
||||
<span class="sd"> Approximate the solution :math:`x(t)` of the initial value problem</span>
|
||||
|
||||
<span class="sd"> .. math ::</span>
|
||||
<span class="sd"> \dot{x} &= f(t,x) \\</span>
|
||||
<span class="sd"> x(t_0) &= x_0</span>
|
||||
<span class="sd"> x(t_0) &= x_0 \\</span>
|
||||
<span class="sd"> t &\in [t_0, t_n]</span>
|
||||
|
||||
<span class="sd"> Choose a value h for the size of every step and set</span>
|
||||
|
||||
<span class="sd"> .. math ::</span>
|
||||
<span class="sd"> t_i = t_0 + i h ~,\quad i=1,2,\ldots,n</span>
|
||||
<span class="sd"> t_{i+1} = t_0 + i h = t_i + h ~,\quad i=0,1,2,\ldots,n-1</span>
|
||||
|
||||
<span class="sd"> The derivative of the solution is approximated as the forward</span>
|
||||
<span class="sd"> difference equation</span>
|
||||
<span class="sd"> </span>
|
||||
|
||||
<span class="sd"> .. math ::</span>
|
||||
<span class="sd"> \dot{x}_i = f(t_i, x_i) = \frac{x_{i+1} - x_i}{t_{i+1}-t_i}</span>
|
||||
|
||||
@@ -166,13 +172,23 @@
|
||||
<span class="sd"> the step size, and the global error (error at a given time) is</span>
|
||||
<span class="sd"> proportional to the step size.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">x</span> <span class="o">=</span> <span class="n">zeros</span><span class="p">((</span><span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">x0</span><span class="p">)))</span> <span class="c1"># Preallocate array</span>
|
||||
<span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">x0</span> <span class="c1"># Initial condition gives solution at first t</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="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">):</span> <span class="c1"># Calculation loop</span>
|
||||
<span class="n">Dt</span> <span class="o">=</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
|
||||
<span class="n">dxdt</span> <span class="o">=</span> <span class="n">array</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">i</span><span class="p">,:],</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="o">*</span><span class="n">p</span><span class="p">))</span>
|
||||
<span class="c1"># Approximate solution at next value of x</span>
|
||||
<span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">,:]</span> <span class="o">+</span> <span class="n">dxdt</span><span class="o">*</span><span class="n">Dt</span>
|
||||
<span class="kn">from</span> <span class="nn">pylib.data</span> <span class="kn">import</span> <span class="n">issequence</span>
|
||||
<span class="k">if</span> <span class="n">issequence</span><span class="p">(</span><span class="n">x0</span><span class="p">):</span>
|
||||
<span class="n">x</span> <span class="o">=</span> <span class="n">zeros</span><span class="p">((</span><span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">x0</span><span class="p">)))</span> <span class="c1"># Preallocate array</span>
|
||||
<span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">x0</span> <span class="c1"># Initial condition gives solution at first t</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="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">):</span> <span class="c1"># Calculation loop</span>
|
||||
<span class="n">Dt</span> <span class="o">=</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
|
||||
<span class="n">dxdt</span> <span class="o">=</span> <span class="n">array</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">i</span><span class="p">,:],</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="o">*</span><span class="n">p</span><span class="p">))</span>
|
||||
<span class="c1"># Approximate solution at next value of x</span>
|
||||
<span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">,:]</span> <span class="o">+</span> <span class="n">dxdt</span><span class="o">*</span><span class="n">Dt</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">x</span> <span class="o">=</span> <span class="n">zeros</span><span class="p">((</span><span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">)))</span>
|
||||
<span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">x0</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="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">):</span> <span class="c1"># Calculation loop</span>
|
||||
<span class="n">Dt</span> <span class="o">=</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
|
||||
<span class="n">dxdt</span> <span class="o">=</span> <span class="n">array</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">i</span><span class="p">],</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="o">*</span><span class="n">p</span><span class="p">))</span>
|
||||
<span class="c1"># Approximate solution at next value of x</span>
|
||||
<span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">+</span> <span class="n">dxdt</span><span class="o">*</span><span class="n">Dt</span>
|
||||
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s1">'Numerical integration of ODE using explicit '</span> <span class="o">+</span>
|
||||
<span class="s1">'first-order method (Euler / Runge-Kutta) was successful.'</span><span class="p">)</span>
|
||||
@@ -218,6 +234,31 @@
|
||||
<span class="sd"> ...)</span>
|
||||
<span class="sd"> :param verbose: print information (default = False)</span>
|
||||
<span class="sd"> :type verbose: bool</span>
|
||||
|
||||
<span class="sd"> Problem</span>
|
||||
|
||||
<span class="sd"> .. math ::</span>
|
||||
<span class="sd"> \dot{y} &= f(t, y) \\</span>
|
||||
<span class="sd"> y(t_0) &= y_0 \\</span>
|
||||
<span class="sd"> t &\in [t_0, t_n]</span>
|
||||
|
||||
<span class="sd"> Increment :math:`\delta t = t_{i+1}-t_i ~,~~ i=0,1,2,\ldots,n-1`</span>
|
||||
|
||||
<span class="sd"> .. math::</span>
|
||||
<span class="sd"> y_{n+1} &= y_{i} + \tfrac{1}{6}(</span>
|
||||
<span class="sd"> \delta y_{i,1} + 2\delta y_{i,2} + 2\delta y_{i,3} +</span>
|
||||
<span class="sd"> \delta y_{i,4}) \\</span>
|
||||
<span class="sd"> & \qquad \text{with} \\</span>
|
||||
<span class="sd"> \delta y_{i,1} &= \delta t \cdot y'(t_{i}, ~ y_{i}) \\</span>
|
||||
<span class="sd"> \delta y_{i,2} &= \delta t \cdot</span>
|
||||
<span class="sd"> y'(t_{i}+\tfrac{1}{2}\delta t, ~</span>
|
||||
<span class="sd"> y_{i}+\tfrac{1}{2}\delta y_{i,1}) \\</span>
|
||||
<span class="sd"> \delta y_{i,3} &= \delta t \cdot</span>
|
||||
<span class="sd"> y'(t_{i}+\tfrac{1}{2}\delta t, ~</span>
|
||||
<span class="sd"> y_{i}+\tfrac{1}{2}\delta y_{i,2}) \\</span>
|
||||
<span class="sd"> \delta y_{i,4} &= \delta t \cdot</span>
|
||||
<span class="sd"> y'(t_{i}+\delta t, ~ y_{i}+\delta y_{i,3})</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">x</span> <span class="o">=</span> <span class="n">zeros</span><span class="p">((</span><span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">),</span> <span class="nb">len</span><span class="p">(</span><span class="n">x0</span><span class="p">)))</span> <span class="c1"># Preallocate array</span>
|
||||
<span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">x0</span> <span class="c1"># Initial condition</span>
|
||||
@@ -237,7 +278,7 @@
|
||||
<div class="viewcode-block" id="fpi"><a class="viewcode-back" href="../../../pylib.numerical.ode.html#pylib.numerical.ode.fpi">[docs]</a><span class="k">def</span> <span class="nf">fpi</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">ti</span><span class="p">,</span> <span class="n">ti1</span><span class="p">,</span> <span class="o">*</span><span class="n">p</span><span class="p">,</span> <span class="n">max_iterations</span><span class="o">=</span><span class="mi">1000</span><span class="p">,</span> <span class="n">tol</span><span class="o">=</span><span class="mf">1e-9</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="sa">r</span><span class="sd">"""Fixed-point iteration.</span>
|
||||
<span class="sd"> </span>
|
||||
|
||||
<span class="sd"> :param f: the function to iterate :math:`f = \dot{x}(x,t)`</span>
|
||||
<span class="sd"> :type f: function</span>
|
||||
<span class="sd"> :param xi: initial condition :math:`x_i`</span>
|
||||
@@ -255,19 +296,19 @@
|
||||
<span class="sd"> :type tol: float</span>
|
||||
<span class="sd"> :param verbose: print information (default = False)</span>
|
||||
<span class="sd"> :type verbose: bool</span>
|
||||
<span class="sd"> </span>
|
||||
|
||||
<span class="sd"> :returns: :math:`x_{i}`</span>
|
||||
<span class="sd"> </span>
|
||||
|
||||
<span class="sd"> .. math ::</span>
|
||||
<span class="sd"> x_{i,j=0} = x_{i}</span>
|
||||
<span class="sd"> </span>
|
||||
|
||||
<span class="sd"> .. math ::</span>
|
||||
<span class="sd"> x_{i,j+1} = x_i + \dot{x}(x_{i,j}, t_{i+1})\cdot(t_{i+1}-t_i)</span>
|
||||
<span class="sd"> </span>
|
||||
|
||||
<span class="sd"> .. math ::</span>
|
||||
<span class="sd"> \text{residuum} = \frac{\lVert x_{i,j+1}-x_{i,j}\rVert}</span>
|
||||
<span class="sd"> {\lVert x_{i,j+1} \rVert} < \varepsilon</span>
|
||||
<span class="sd"> </span>
|
||||
|
||||
<span class="sd"> .. math ::</span>
|
||||
<span class="sd"> x_{i} = x_{i,j=\text{end}}</span>
|
||||
<span class="sd"> """</span>
|
||||
@@ -301,7 +342,7 @@
|
||||
<span class="sd"> :type tol: float</span>
|
||||
<span class="sd"> :param verbose: print information (default = False)</span>
|
||||
<span class="sd"> :type verbose: bool</span>
|
||||
<span class="sd"> </span>
|
||||
|
||||
<span class="sd"> The backward Euler method has order one and is A-stable.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">iterations</span> <span class="o">=</span> <span class="n">zeros</span><span class="p">((</span><span class="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">),</span> <span class="mi">1</span><span class="p">))</span>
|
||||
@@ -313,8 +354,9 @@
|
||||
<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="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">):</span>
|
||||
<span class="n">Dt</span> <span class="o">=</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
|
||||
<span class="n">xi</span> <span class="o">=</span> <span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">,:]</span>
|
||||
<span class="n">xi</span><span class="p">,</span> <span class="n">iteration</span> <span class="o">=</span> <span class="n">fpi</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="n">i</span><span class="p">],</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">],</span> <span class="o">*</span><span class="n">p</span><span class="p">,</span> <span class="n">max_iterations</span><span class="p">,</span>
|
||||
<span class="n">tol</span><span class="p">,</span> <span class="n">verbose</span><span class="p">)</span>
|
||||
<span class="n">xi</span><span class="p">,</span> <span class="n">iteration</span> <span class="o">=</span> <span class="n">fpi</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="n">i</span><span class="p">],</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">],</span> <span class="o">*</span><span class="n">p</span><span class="p">,</span>
|
||||
<span class="n">max_iterations</span><span class="o">=</span><span class="n">max_iterations</span><span class="p">,</span> <span class="n">tol</span><span class="o">=</span><span class="n">tol</span><span class="p">,</span>
|
||||
<span class="n">verbose</span><span class="o">=</span><span class="n">verbose</span><span class="p">)</span>
|
||||
<span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">,:]</span> <span class="o">=</span> <span class="n">xi</span>
|
||||
<span class="n">iterations</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">iteration</span>
|
||||
<span class="k">if</span> <span class="n">verbose</span><span class="p">:</span>
|
||||
@@ -398,10 +440,12 @@
|
||||
<span class="k">return</span> <span class="n">x</span><span class="p">,</span> <span class="n">xp</span><span class="p">,</span> <span class="n">xpp</span><span class="p">,</span> <span class="n">iterations</span></div>
|
||||
<span class="c1"># x = concatenate((x, xp, xpp), axis=1)</span>
|
||||
|
||||
<div class="viewcode-block" id="newmark_newtonraphson_rdk"><a class="viewcode-back" href="../../../pylib.numerical.ode.html#pylib.numerical.ode.newmark_newtonraphson_rdk">[docs]</a><span class="k">def</span> <span class="nf">newmark_newtonraphson_rdk</span><span class="p">(</span><span class="n">fnm</span><span class="p">,</span> <span class="n">x0</span><span class="p">,</span> <span class="n">xp0</span><span class="p">,</span> <span class="n">xpp0</span><span class="p">,</span> <span class="n">t</span><span class="p">,</span> <span class="o">*</span><span class="n">p</span><span class="p">,</span> <span class="n">gamma</span><span class="o">=.</span><span class="mi">5</span><span class="p">,</span>
|
||||
<div class="viewcode-block" id="newmark_newtonraphson_mdk"><a class="viewcode-back" href="../../../pylib.numerical.ode.html#pylib.numerical.ode.newmark_newtonraphson_mdk">[docs]</a><span class="k">def</span> <span class="nf">newmark_newtonraphson_mdk</span><span class="p">(</span><span class="n">fmdk</span><span class="p">,</span> <span class="n">x0</span><span class="p">,</span> <span class="n">xp0</span><span class="p">,</span> <span class="n">xpp0</span><span class="p">,</span> <span class="n">t</span><span class="p">,</span> <span class="o">*</span><span class="n">p</span><span class="p">,</span> <span class="n">gamma</span><span class="o">=.</span><span class="mi">5</span><span class="p">,</span>
|
||||
<span class="n">beta</span><span class="o">=.</span><span class="mi">25</span><span class="p">,</span> <span class="n">max_iterations</span><span class="o">=</span><span class="mi">1000</span><span class="p">,</span> <span class="n">tol</span><span class="o">=</span><span class="mf">1e-9</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="sa">r</span><span class="sd">"""Newmark method.</span>
|
||||
|
||||
<span class="sd"> Using m mass, d damping and k stiffness formulation.</span>
|
||||
|
||||
<span class="sd"> :param f: the function to solve</span>
|
||||
<span class="sd"> :type f: function</span>
|
||||
<span class="sd"> :param x0: initial condition</span>
|
||||
@@ -435,7 +479,7 @@
|
||||
<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="nb">len</span><span class="p">(</span><span class="n">t</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">):</span>
|
||||
<span class="n">Dt</span> <span class="o">=</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
|
||||
|
||||
<span class="n">rm</span><span class="p">,</span> <span class="n">rmx</span><span class="p">,</span> <span class="n">rmxpp</span><span class="p">,</span> <span class="n">rd</span><span class="p">,</span> <span class="n">rdx</span><span class="p">,</span> <span class="n">rdxp</span><span class="p">,</span> <span class="n">rk</span><span class="p">,</span> <span class="n">rkx</span><span class="p">,</span> <span class="n">f</span> <span class="o">=</span> <span class="n">fnm</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">,:],</span>
|
||||
<span class="n">rm</span><span class="p">,</span> <span class="n">rmx</span><span class="p">,</span> <span class="n">rmxpp</span><span class="p">,</span> <span class="n">rd</span><span class="p">,</span> <span class="n">rdx</span><span class="p">,</span> <span class="n">rdxp</span><span class="p">,</span> <span class="n">rk</span><span class="p">,</span> <span class="n">rkx</span><span class="p">,</span> <span class="n">f</span> <span class="o">=</span> <span class="n">fmdk</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">,:],</span>
|
||||
<span class="n">xp</span><span class="p">[</span><span class="n">i</span><span class="p">,:],</span> <span class="n">xpp</span><span class="p">[</span><span class="n">i</span><span class="p">,:],</span> <span class="n">t</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="o">*</span><span class="n">p</span><span class="p">)</span>
|
||||
|
||||
<span class="n">xi</span> <span class="o">=</span> <span class="n">x</span><span class="p">[</span><span class="n">i</span><span class="p">,:]</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span>
|
||||
|
||||
@@ -37,10 +37,10 @@
|
||||
<span class="c1"># -*- coding: utf-8 -*-</span>
|
||||
<span class="sd">"""Mathmatical models governed by ordinary differential equations.</span>
|
||||
|
||||
<span class="sd">Describes initial value problems as systems of first order ordinary differential</span>
|
||||
<span class="sd">equations.</span>
|
||||
<span class="sd">Describes initial value problems as systems of first order ordinary</span>
|
||||
<span class="sd">differential equations.</span>
|
||||
|
||||
<span class="sd">:Date: 2019-05-25</span>
|
||||
<span class="sd">:Date: 2020-01-08</span>
|
||||
|
||||
<span class="sd">.. module:: ode_model</span>
|
||||
<span class="sd"> :platform: *nix, Windows</span>
|
||||
@@ -48,111 +48,172 @@
|
||||
|
||||
<span class="sd">.. moduleauthor:: Daniel Weschke <daniel.weschke@directbox.de></span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">division</span><span class="p">,</span> <span class="n">print_function</span>
|
||||
<span class="kn">from</span> <span class="nn">numpy</span> <span class="kn">import</span> <span class="n">array</span><span class="p">,</span> <span class="n">cos</span><span class="p">,</span> <span class="n">sin</span><span class="p">,</span> <span class="n">dot</span><span class="p">,</span> <span class="n">square</span>
|
||||
<span class="kn">from</span> <span class="nn">numpy.linalg</span> <span class="kn">import</span> <span class="n">inv</span>
|
||||
|
||||
<div class="viewcode-block" id="disk"><a class="viewcode-back" href="../../../pylib.numerical.ode_model.html#pylib.numerical.ode_model.disk">[docs]</a><span class="k">def</span> <span class="nf">disk</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">t</span><span class="p">,</span> <span class="o">*</span><span class="n">p</span><span class="p">):</span>
|
||||
<span class="sd">"""Rotation of an eccentric disk.</span>
|
||||
<div class="viewcode-block" id="disk"><a class="viewcode-back" href="../../../pylib.numerical.ode_model.html#pylib.numerical.ode_model.disk">[docs]</a><span class="k">def</span> <span class="nf">disk</span><span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="n">e</span><span class="p">,</span> <span class="n">T</span><span class="p">,</span> <span class="n">method</span><span class="o">=</span><span class="s1">''</span><span class="p">):</span>
|
||||
<span class="sa">r</span><span class="sd">"""Rotation of an eccentric disk.</span>
|
||||
|
||||
<span class="sd"> :param x: values of the function</span>
|
||||
<span class="sd"> :type x: list</span>
|
||||
<span class="sd"> :param t: time</span>
|
||||
<span class="sd"> :type t: list</span>
|
||||
<span class="sd"> :param `*p`: parameters of the function</span>
|
||||
<span class="sd"> :param d: diameter</span>
|
||||
<span class="sd"> :type d: float</span>
|
||||
<span class="sd"> :param e: eccentricity</span>
|
||||
<span class="sd"> :type e: float</span>
|
||||
<span class="sd"> :param T: torque</span>
|
||||
<span class="sd"> :type T: float</span>
|
||||
<span class="sd"> :param method: the method to use, default = ''.</span>
|
||||
<span class="sd"> :type method:</span>
|
||||
<span class="sd"> :returns: disk function. This function is independent of the time.</span>
|
||||
|
||||
<span class="sd"> * diameter</span>
|
||||
<span class="sd"> * eccentricity</span>
|
||||
<span class="sd"> * torque</span>
|
||||
<span class="sd"> * For method = '': f(x, t=0) -> (xp1, xp2, xp3, xp4, xp5, xp6).</span>
|
||||
<span class="sd"> x is (x, y, phi, x', y', phi') and the return values are (x',</span>
|
||||
<span class="sd"> y', phi', x'', y'', phi'')</span>
|
||||
<span class="sd"> * For method = 'nm': f(xn, xpn, xppn, t=0) -> (N, dN, dNp, dNpp).</span>
|
||||
<span class="sd"> xn are the values of the function (x, y, phi), xpn are first</span>
|
||||
<span class="sd"> derivative values of the function (x', y', phi') and xppn are</span>
|
||||
<span class="sd"> the second derivative values of the function (x'', y'', phi'').</span>
|
||||
<span class="sd"> The return values are (N, dN, dNp, dNpp)</span>
|
||||
<span class="sd"> * For method = 'nmmdk': f(xn, xpn, xppn, t=0) -></span>
|
||||
<span class="sd"> (rm, rmx, rmxpp, rd, rdx, rdxp, rk, rkx, f).</span>
|
||||
<span class="sd"> xn are the values of the function (x, y, phi), xpn are first</span>
|
||||
<span class="sd"> derivative values of the function (x', y', phi') and xppn are</span>
|
||||
<span class="sd"> the second derivative values of the function (x'', y'', phi'').</span>
|
||||
<span class="sd"> The return values are (rm, rmx, rmxpp, rd, rdx, rdxp, rk, rkx,</span>
|
||||
<span class="sd"> f)</span>
|
||||
|
||||
<span class="sd"> :rtype: function</span>
|
||||
|
||||
<span class="sd"> Model</span>
|
||||
|
||||
<span class="sd"> .. math ::</span>
|
||||
<span class="sd"> \begin{vmatrix}</span>
|
||||
<span class="sd"> \ddot{x} + \cos(\varphi)\ddot{\varphi} + 2d \,\dot{x} - \sin(\varphi) \,\dot{\varphi}^2 + 2d\cos(\varphi)\, \dot{\varphi} + x &=&</span>
|
||||
<span class="sd"> 0 \\</span>
|
||||
<span class="sd"> \ddot{y} - \sin(\varphi)\ddot{\varphi} + 2d \,\dot{y} - \cos(\varphi) \,\dot{\varphi}^2 + 2d\sin(\varphi)\, \dot{\varphi} + y &=&</span>
|
||||
<span class="sd"> 0 \\</span>
|
||||
<span class="sd"> \ddot{\varphi} + e\,y\sin(\varphi) - e\,x\cos(\varphi) &=& t</span>
|
||||
<span class="sd"> \end{vmatrix}</span>
|
||||
<span class="sd"> \\</span>
|
||||
<span class="sd"> \begin{vmatrix}</span>
|
||||
<span class="sd"> \ddot{x} + \cos(\varphi)\ddot{\varphi} &=&</span>
|
||||
<span class="sd"> -2d \,\dot{x} + \sin(\varphi) \,\dot{\varphi}^2 -2d\cos(\varphi)\, \dot{\varphi} - x \\</span>
|
||||
<span class="sd"> \ddot{y} - \sin(\varphi)\ddot{\varphi} &=&</span>
|
||||
<span class="sd"> -2d \,\dot{y} + \cos(\varphi) \,\dot{\varphi}^2 -2d\sin(\varphi)\, \dot{\varphi} - y \\</span>
|
||||
<span class="sd"> \ddot{\varphi} &=& t - e\,y\sin(\varphi) + e\,x\cos(\varphi)</span>
|
||||
<span class="sd"> \end{vmatrix}</span>
|
||||
|
||||
<span class="sd"> .. math ::</span>
|
||||
<span class="sd"> \mathbf{M}(\mathbf{x}) \cdot \mathbf{\ddot{x}} &=</span>
|
||||
<span class="sd"> \mathbf{f}(\mathbf{x}, \mathbf{\dot{x}})</span>
|
||||
<span class="sd"> \\</span>
|
||||
<span class="sd"> \begin{bmatrix}</span>
|
||||
<span class="sd"> 1 & 0 & \cos \varphi \\</span>
|
||||
<span class="sd"> 0 & 1 & -\sin \varphi \\</span>
|
||||
<span class="sd"> 0 & 0 & 1</span>
|
||||
<span class="sd"> \end{bmatrix} \cdot</span>
|
||||
<span class="sd"> \begin{bmatrix}</span>
|
||||
<span class="sd"> \ddot{x} \\ \ddot{y} \\ \ddot{\varphi}</span>
|
||||
<span class="sd"> \end{bmatrix} &= \begin{bmatrix}</span>
|
||||
<span class="sd"> -2d \,\dot{x} + \sin(\varphi) \,\dot{\varphi}^2 -2d\cos(\varphi)\, \dot{\varphi} - x \\</span>
|
||||
<span class="sd"> -2d \,\dot{y} + \cos(\varphi) \,\dot{\varphi}^2 -2d\sin(\varphi)\, \dot{\varphi} - y \\</span>
|
||||
<span class="sd"> t - e\,y\sin(\varphi) + e\,x\cos(\varphi)</span>
|
||||
<span class="sd"> \end{bmatrix}</span>
|
||||
|
||||
|
||||
<span class="sd"> returns</span>
|
||||
|
||||
<span class="sd"> .. math ::</span>
|
||||
<span class="sd"> x_1 &= x &\quad x_4 &= \dot{x}_1 = \dot{x} &\quad \dot{x}_4 &= \ddot{x} \\</span>
|
||||
<span class="sd"> x_2 &= y &\quad x_5 &= \dot{x}_2 = \dot{y} &\quad \dot{x}_5 &= \ddot{y} \\</span>
|
||||
<span class="sd"> x_3 &= \varphi &\quad x_6 &= \dot{x}_3 = \dot{\varphi} &\quad \dot{x}_6 &= \ddot{\varphi} \\</span>
|
||||
|
||||
<span class="sd"> .. math ::</span>
|
||||
<span class="sd"> \dot{q} &= f(x) \\</span>
|
||||
<span class="sd"> \begin{bmatrix}</span>
|
||||
<span class="sd"> \dot{x}_1 \\</span>
|
||||
<span class="sd"> \dot{x}_2 \\</span>
|
||||
<span class="sd"> \dot{x}_3 \\</span>
|
||||
<span class="sd"> \dot{x}_4 \\</span>
|
||||
<span class="sd"> \dot{x}_5 \\</span>
|
||||
<span class="sd"> \dot{x}_6</span>
|
||||
<span class="sd"> \end{bmatrix} &= \begin{bmatrix}</span>
|
||||
<span class="sd"> x_4 \\</span>
|
||||
<span class="sd"> x_5 \\</span>
|
||||
<span class="sd"> x_6 \\</span>
|
||||
<span class="sd"> \begin{bmatrix}</span>
|
||||
<span class="sd"> 1 & 0 & \cos x_3 \\</span>
|
||||
<span class="sd"> 0 & 1 & -\sin x_3 \\</span>
|
||||
<span class="sd"> 0 & 0 & 1</span>
|
||||
<span class="sd"> \end{bmatrix}^{-1} \cdot \begin{bmatrix}</span>
|
||||
<span class="sd"> -2d \,x_4 + \sin(x_3) \,x_6^2 -2d\cos(x_3)\, x_6 - x_1 \\</span>
|
||||
<span class="sd"> -2d \,x_5 + \cos(x_3) \,x_6^2 -2d\sin(x_3)\, x_6 - x_2 \\</span>
|
||||
<span class="sd"> t - e\,x_2\sin(x_3) + e\,x_1\cos(x_3)</span>
|
||||
<span class="sd"> \end{bmatrix}</span>
|
||||
<span class="sd"> \end{bmatrix}</span>
|
||||
|
||||
<span class="sd"> Three explicit differential equations of order 2 reducted to a</span>
|
||||
<span class="sd"> system of 3x2 first-order differential equations.</span>
|
||||
|
||||
<span class="sd"> .. seealso::</span>
|
||||
<span class="sd"> :meth:`pylib.numerical.ode.newmark_newtonraphson` and</span>
|
||||
<span class="sd"> :meth:`pylib.numerical.ode.newmark_newtonraphson_mdk`</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">qp1</span> <span class="o">=</span> <span class="n">x</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span>
|
||||
<span class="n">qp2</span> <span class="o">=</span> <span class="n">x</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span>
|
||||
<span class="n">qp3</span> <span class="o">=</span> <span class="n">x</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span>
|
||||
<span class="n">M</span> <span class="o">=</span> <span class="n">array</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">cos</span><span class="p">(</span><span class="n">x</span><span class="p">[</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="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">x</span><span class="p">[</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="n">y</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">x</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="o">+</span><span class="n">sin</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">x</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="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">x</span><span class="p">[</span><span class="mi">5</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="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">x</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span><span class="o">+</span><span class="n">cos</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">x</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="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">x</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span><span class="o">-</span><span class="n">x</span><span class="p">[</span><span class="mi">1</span><span class="p">]],</span> \
|
||||
<span class="p">[</span><span class="n">p</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">x</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">+</span><span class="n">p</span><span class="p">[</span><span class="mi">1</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="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">2</span><span class="p">])]])</span>
|
||||
<span class="n">qp46</span> <span class="o">=</span> <span class="n">dot</span><span class="p">(</span><span class="n">inv</span><span class="p">(</span><span class="n">M</span><span class="p">),</span> <span class="n">y</span><span class="p">)</span>
|
||||
<span class="n">qp4</span><span class="p">,</span> <span class="n">qp5</span><span class="p">,</span> <span class="n">qp6</span> <span class="o">=</span> <span class="n">qp46</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,)</span><span class="o">.</span><span class="n">tolist</span><span class="p">()</span> <span class="c1"># 2d array to 1d array to list</span>
|
||||
<span class="k">return</span> <span class="n">qp1</span><span class="p">,</span> <span class="n">qp2</span><span class="p">,</span> <span class="n">qp3</span><span class="p">,</span> <span class="n">qp4</span><span class="p">,</span> <span class="n">qp5</span><span class="p">,</span> <span class="n">qp6</span></div>
|
||||
|
||||
<div class="viewcode-block" id="disk_nm"><a class="viewcode-back" href="../../../pylib.numerical.ode_model.html#pylib.numerical.ode_model.disk_nm">[docs]</a><span class="k">def</span> <span class="nf">disk_nm</span><span class="p">(</span><span class="n">xn</span><span class="p">,</span> <span class="n">xpn</span><span class="p">,</span> <span class="n">xppn</span><span class="p">,</span> <span class="n">t</span><span class="p">,</span> <span class="o">*</span><span class="n">p</span><span class="p">):</span>
|
||||
<span class="sd">"""Rotation of an eccentric disk.</span>
|
||||
|
||||
<span class="sd"> :param xn: values of the function</span>
|
||||
<span class="sd"> :type xn: list</span>
|
||||
<span class="sd"> :param xpn: first derivative values of the function</span>
|
||||
<span class="sd"> :type xpn: list</span>
|
||||
<span class="sd"> :param xppn: second derivative values of the function</span>
|
||||
<span class="sd"> :type xppn: list</span>
|
||||
<span class="sd"> :param t: time</span>
|
||||
<span class="sd"> :type t: list</span>
|
||||
<span class="sd"> :param `*p`: parameters of the function</span>
|
||||
|
||||
<span class="sd"> * diameter</span>
|
||||
<span class="sd"> * eccentricity</span>
|
||||
<span class="sd"> * torque</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">N</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="n">xppn</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xppn</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="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">xpn</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="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">square</span><span class="p">(</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">+</span><span class="n">xn</span><span class="p">[</span><span class="mi">0</span><span class="p">]],</span>
|
||||
<span class="p">[</span><span class="n">xppn</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xppn</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="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">xpn</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="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">square</span><span class="p">(</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">+</span><span class="n">xn</span><span class="p">[</span><span class="mi">1</span><span class="p">]],</span>
|
||||
<span class="p">[</span><span class="n">xppn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">+</span><span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="p">(</span><span class="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xn</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xn</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span><span class="o">-</span><span class="n">p</span><span class="p">[</span><span class="mi">2</span><span class="p">]]])</span>
|
||||
<span class="n">dN</span> <span class="o">=</span> <span class="n">array</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="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">*</span><span class="n">xppn</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="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">square</span><span class="p">(</span><span class="n">xpn</span><span class="p">[</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="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">*</span><span class="n">xppn</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="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">+</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">square</span><span class="p">(</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">])],</span>
|
||||
<span class="p">[</span><span class="o">-</span><span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">]),</span> <span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">]),</span> <span class="n">p</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">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xn</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xn</span><span class="p">[</span><span class="mi">1</span><span class="p">])]])</span>
|
||||
<span class="n">dNp</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="mi">2</span><span class="o">*</span><span class="n">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">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</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="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</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">2</span><span class="o">*</span><span class="n">p</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="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</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="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</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="n">dNpp</span> <span class="o">=</span> <span class="n">array</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">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</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="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</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="k">return</span> <span class="n">N</span><span class="p">,</span> <span class="n">dN</span><span class="p">,</span> <span class="n">dNp</span><span class="p">,</span> <span class="n">dNpp</span></div>
|
||||
|
||||
<div class="viewcode-block" id="disk_nmmdk"><a class="viewcode-back" href="../../../pylib.numerical.ode_model.html#pylib.numerical.ode_model.disk_nmmdk">[docs]</a><span class="k">def</span> <span class="nf">disk_nmmdk</span><span class="p">(</span><span class="n">xn</span><span class="p">,</span> <span class="n">xpn</span><span class="p">,</span> <span class="n">xppn</span><span class="p">,</span> <span class="n">t</span><span class="p">,</span> <span class="o">*</span><span class="n">p</span><span class="p">):</span>
|
||||
<span class="sd">"""Rotation of an eccentric disk.</span>
|
||||
|
||||
<span class="sd"> :param xn: values of the function</span>
|
||||
<span class="sd"> :type xn: list</span>
|
||||
<span class="sd"> :param xpn: derivative values of the function</span>
|
||||
<span class="sd"> :type xpn: list</span>
|
||||
<span class="sd"> :param xppn: second derivative values of the function</span>
|
||||
<span class="sd"> :type xppn: list</span>
|
||||
<span class="sd"> :param t: time</span>
|
||||
<span class="sd"> :type t: list</span>
|
||||
<span class="sd"> :param `*p`: parameters of the function</span>
|
||||
|
||||
<span class="sd"> * diameter</span>
|
||||
<span class="sd"> * eccentricity</span>
|
||||
<span class="sd"> * torque</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">rm</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="n">xppn</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xppn</span><span class="p">[</span><span class="mi">2</span><span class="p">]],</span>
|
||||
<span class="p">[</span><span class="n">xppn</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xppn</span><span class="p">[</span><span class="mi">2</span><span class="p">]],</span>
|
||||
<span class="p">[</span><span class="n">xppn</span><span class="p">[</span><span class="mi">2</span><span class="p">]]])</span>
|
||||
<span class="n">rmx</span> <span class="o">=</span> <span class="n">array</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="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">*</span><span class="n">xppn</span><span class="p">[</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="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">*</span><span class="n">xppn</span><span class="p">[</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="n">rmxpp</span> <span class="o">=</span> <span class="n">array</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">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</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="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</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="n">rd</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">xpn</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="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">square</span><span class="p">(</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">])],</span>
|
||||
<span class="p">[</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">xpn</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="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">square</span><span class="p">(</span><span class="n">xpn</span><span class="p">[</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="n">rdx</span> <span class="o">=</span> <span class="n">array</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">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">square</span><span class="p">(</span><span class="n">xpn</span><span class="p">[</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="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">+</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">square</span><span class="p">(</span><span class="n">xpn</span><span class="p">[</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="n">rdxp</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="mi">2</span><span class="o">*</span><span class="n">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">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</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="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</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">2</span><span class="o">*</span><span class="n">p</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="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</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="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</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="n">rk</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="n">xn</span><span class="p">[</span><span class="mi">0</span><span class="p">]],</span>
|
||||
<span class="p">[</span><span class="n">xn</span><span class="p">[</span><span class="mi">1</span><span class="p">]],</span>
|
||||
<span class="p">[</span><span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="p">(</span><span class="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xn</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xn</span><span class="p">[</span><span class="mi">1</span><span class="p">])]])</span>
|
||||
<span class="n">rkx</span> <span class="o">=</span> <span class="n">array</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">1</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">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">]),</span> <span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">]),</span> <span class="n">p</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">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xn</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xn</span><span class="p">[</span><span class="mi">1</span><span class="p">])]])</span>
|
||||
<span class="n">f</span> <span class="o">=</span> <span class="n">array</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="p">[</span><span class="n">p</span><span class="p">[</span><span class="mi">2</span><span class="p">]]])</span>
|
||||
<span class="k">return</span> <span class="n">rm</span><span class="p">,</span> <span class="n">rmx</span><span class="p">,</span> <span class="n">rmxpp</span><span class="p">,</span> <span class="n">rd</span><span class="p">,</span> <span class="n">rdx</span><span class="p">,</span> <span class="n">rdxp</span><span class="p">,</span> <span class="n">rk</span><span class="p">,</span> <span class="n">rkx</span><span class="p">,</span> <span class="n">f</span></div>
|
||||
|
||||
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s1">'__main__'</span><span class="p">:</span>
|
||||
<span class="kc">True</span>
|
||||
<span class="n">p</span> <span class="o">=</span> <span class="p">(</span><span class="n">d</span><span class="p">,</span> <span class="n">e</span><span class="p">,</span> <span class="n">T</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">method</span> <span class="o">==</span> <span class="s1">''</span><span class="p">:</span>
|
||||
<span class="k">def</span> <span class="nf">f</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">t</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
|
||||
<span class="n">xp1</span> <span class="o">=</span> <span class="n">x</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span>
|
||||
<span class="n">xp2</span> <span class="o">=</span> <span class="n">x</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span>
|
||||
<span class="n">xp3</span> <span class="o">=</span> <span class="n">x</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span>
|
||||
<span class="n">M</span> <span class="o">=</span> <span class="n">array</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">cos</span><span class="p">(</span><span class="n">x</span><span class="p">[</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="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">x</span><span class="p">[</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="n">y</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">x</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="o">+</span><span class="n">sin</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">x</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="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">x</span><span class="p">[</span><span class="mi">5</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="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">x</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span><span class="o">+</span><span class="n">cos</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">x</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="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">x</span><span class="p">[</span><span class="mi">5</span><span class="p">]</span><span class="o">-</span><span class="n">x</span><span class="p">[</span><span class="mi">1</span><span class="p">]],</span> \
|
||||
<span class="p">[</span><span class="n">p</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">x</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">+</span><span class="n">p</span><span class="p">[</span><span class="mi">1</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="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">2</span><span class="p">])]])</span>
|
||||
<span class="n">xp46</span> <span class="o">=</span> <span class="n">dot</span><span class="p">(</span><span class="n">inv</span><span class="p">(</span><span class="n">M</span><span class="p">),</span> <span class="n">y</span><span class="p">)</span>
|
||||
<span class="n">xp4</span><span class="p">,</span> <span class="n">xp5</span><span class="p">,</span> <span class="n">xp6</span> <span class="o">=</span> <span class="n">xp46</span><span class="o">.</span><span class="n">reshape</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,)</span><span class="o">.</span><span class="n">tolist</span><span class="p">()</span> <span class="c1"># 2d array to 1d array to list</span>
|
||||
<span class="k">return</span> <span class="n">xp1</span><span class="p">,</span> <span class="n">xp2</span><span class="p">,</span> <span class="n">xp3</span><span class="p">,</span> <span class="n">xp4</span><span class="p">,</span> <span class="n">xp5</span><span class="p">,</span> <span class="n">xp6</span>
|
||||
<span class="k">elif</span> <span class="n">method</span> <span class="o">==</span> <span class="s1">'nm'</span><span class="p">:</span>
|
||||
<span class="k">def</span> <span class="nf">f</span><span class="p">(</span><span class="n">xn</span><span class="p">,</span> <span class="n">xpn</span><span class="p">,</span> <span class="n">xppn</span><span class="p">,</span> <span class="n">t</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
|
||||
<span class="n">N</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="n">xppn</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xppn</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="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">xpn</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="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">square</span><span class="p">(</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">+</span><span class="n">xn</span><span class="p">[</span><span class="mi">0</span><span class="p">]],</span>
|
||||
<span class="p">[</span><span class="n">xppn</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xppn</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="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">xpn</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="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">square</span><span class="p">(</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">+</span><span class="n">xn</span><span class="p">[</span><span class="mi">1</span><span class="p">]],</span>
|
||||
<span class="p">[</span><span class="n">xppn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">+</span><span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="p">(</span><span class="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xn</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xn</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span><span class="o">-</span><span class="n">p</span><span class="p">[</span><span class="mi">2</span><span class="p">]]])</span>
|
||||
<span class="n">dN</span> <span class="o">=</span> <span class="n">array</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="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">*</span><span class="n">xppn</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="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">square</span><span class="p">(</span><span class="n">xpn</span><span class="p">[</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="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">*</span><span class="n">xppn</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="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">+</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">square</span><span class="p">(</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">])],</span>
|
||||
<span class="p">[</span><span class="o">-</span><span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">]),</span> <span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">]),</span> <span class="n">p</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">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xn</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xn</span><span class="p">[</span><span class="mi">1</span><span class="p">])]])</span>
|
||||
<span class="n">dNp</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="mi">2</span><span class="o">*</span><span class="n">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">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</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="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</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">2</span><span class="o">*</span><span class="n">p</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="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</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="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</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="n">dNpp</span> <span class="o">=</span> <span class="n">array</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">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</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="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</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="k">return</span> <span class="n">N</span><span class="p">,</span> <span class="n">dN</span><span class="p">,</span> <span class="n">dNp</span><span class="p">,</span> <span class="n">dNpp</span>
|
||||
<span class="k">elif</span> <span class="n">method</span> <span class="o">==</span> <span class="s1">'nmmdk'</span><span class="p">:</span>
|
||||
<span class="k">def</span> <span class="nf">f</span><span class="p">(</span><span class="n">xn</span><span class="p">,</span> <span class="n">xpn</span><span class="p">,</span> <span class="n">xppn</span><span class="p">,</span> <span class="n">t</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
|
||||
<span class="n">rm</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="n">xppn</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xppn</span><span class="p">[</span><span class="mi">2</span><span class="p">]],</span>
|
||||
<span class="p">[</span><span class="n">xppn</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xppn</span><span class="p">[</span><span class="mi">2</span><span class="p">]],</span>
|
||||
<span class="p">[</span><span class="n">xppn</span><span class="p">[</span><span class="mi">2</span><span class="p">]]])</span>
|
||||
<span class="n">rmx</span> <span class="o">=</span> <span class="n">array</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="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">*</span><span class="n">xppn</span><span class="p">[</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="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">*</span><span class="n">xppn</span><span class="p">[</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="n">rmxpp</span> <span class="o">=</span> <span class="n">array</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">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</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="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</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="n">rd</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">xpn</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="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">square</span><span class="p">(</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">])],</span>
|
||||
<span class="p">[</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">xpn</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="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">square</span><span class="p">(</span><span class="n">xpn</span><span class="p">[</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="n">rdx</span> <span class="o">=</span> <span class="n">array</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">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">square</span><span class="p">(</span><span class="n">xpn</span><span class="p">[</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="o">-</span><span class="mi">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">+</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">square</span><span class="p">(</span><span class="n">xpn</span><span class="p">[</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="n">rdxp</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="mi">2</span><span class="o">*</span><span class="n">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">2</span><span class="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</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="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</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">2</span><span class="o">*</span><span class="n">p</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="o">*</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">*</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</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="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xpn</span><span class="p">[</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="n">rk</span> <span class="o">=</span> <span class="n">array</span><span class="p">([[</span><span class="n">xn</span><span class="p">[</span><span class="mi">0</span><span class="p">]],</span>
|
||||
<span class="p">[</span><span class="n">xn</span><span class="p">[</span><span class="mi">1</span><span class="p">]],</span>
|
||||
<span class="p">[</span><span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="p">(</span><span class="o">-</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xn</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="n">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xn</span><span class="p">[</span><span class="mi">1</span><span class="p">])]])</span>
|
||||
<span class="n">rkx</span> <span class="o">=</span> <span class="n">array</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">1</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">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">]),</span> <span class="n">p</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">*</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">]),</span> <span class="n">p</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">sin</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xn</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="n">cos</span><span class="p">(</span><span class="n">xn</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">*</span><span class="n">xn</span><span class="p">[</span><span class="mi">1</span><span class="p">])]])</span>
|
||||
<span class="n">f</span> <span class="o">=</span> <span class="n">array</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="p">[</span><span class="n">p</span><span class="p">[</span><span class="mi">2</span><span class="p">]]])</span>
|
||||
<span class="k">return</span> <span class="n">rm</span><span class="p">,</span> <span class="n">rmx</span><span class="p">,</span> <span class="n">rmxpp</span><span class="p">,</span> <span class="n">rd</span><span class="p">,</span> <span class="n">rdx</span><span class="p">,</span> <span class="n">rdxp</span><span class="p">,</span> <span class="n">rk</span><span class="p">,</span> <span class="n">rkx</span><span class="p">,</span> <span class="n">f</span>
|
||||
<span class="k">return</span> <span class="n">f</span></div>
|
||||
</pre></div>
|
||||
|
||||
</div>
|
||||
|
||||
7
docs/build/html/_sources/pylib.data_step.rst.txt
vendored
Normal file
7
docs/build/html/_sources/pylib.data_step.rst.txt
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
pylib.data\_step module
|
||||
=======================
|
||||
|
||||
.. automodule:: pylib.data_step
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
7
docs/build/html/_sources/pylib.data_step_std.rst.txt
vendored
Normal file
7
docs/build/html/_sources/pylib.data_step_std.rst.txt
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
pylib.data\_step\_std module
|
||||
============================
|
||||
|
||||
.. automodule:: pylib.data_step_std
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
7
docs/build/html/_sources/pylib.helper.rst.txt
vendored
Normal file
7
docs/build/html/_sources/pylib.helper.rst.txt
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
pylib.helper module
|
||||
===================
|
||||
|
||||
.. automodule:: pylib.helper
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
3
docs/build/html/_sources/pylib.rst.txt
vendored
3
docs/build/html/_sources/pylib.rst.txt
vendored
@@ -19,6 +19,8 @@ Submodules
|
||||
.. toctree::
|
||||
|
||||
pylib.data
|
||||
pylib.data_step
|
||||
pylib.data_step_std
|
||||
pylib.date
|
||||
pylib.drawblock
|
||||
pylib.function
|
||||
@@ -27,5 +29,6 @@ Submodules
|
||||
pylib.geometry2d_plot
|
||||
pylib.geometry_plot
|
||||
pylib.geometry_plot_pylab
|
||||
pylib.helper
|
||||
pylib.mathematics
|
||||
pylib.time_of_day
|
||||
|
||||
6
docs/build/html/_static/alabaster.css
vendored
6
docs/build/html/_static/alabaster.css
vendored
@@ -259,8 +259,8 @@ dt:target, .highlight {
|
||||
}
|
||||
|
||||
div.warning {
|
||||
background-color: #FCC;
|
||||
border: 1px solid #FAA;
|
||||
background-color: rgb(82, 0, 0);
|
||||
border: 1px solid rgb(170, 0, 0);
|
||||
}
|
||||
|
||||
div.danger {
|
||||
@@ -455,7 +455,7 @@ dl pre, blockquote pre, li pre {
|
||||
}
|
||||
|
||||
tt, code {
|
||||
background-color: #ecf0f3;
|
||||
background-color: #25272c;
|
||||
color: #b2b2b2;
|
||||
/* padding: 1px 2px; */
|
||||
}
|
||||
|
||||
7
docs/build/html/_static/custom.css
vendored
7
docs/build/html/_static/custom.css
vendored
@@ -11,3 +11,10 @@ table.indextable tr.cap {
|
||||
position: relative;
|
||||
top: -1.5em;
|
||||
}
|
||||
/* sidebar_header is only set for normal screen size */
|
||||
@media screen and (max-width: 875px) {
|
||||
div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p,
|
||||
div.sphinxsidebar h3 a {
|
||||
color: #b2b2b2;
|
||||
}
|
||||
}
|
||||
|
||||
280
docs/build/html/genindex.html
vendored
280
docs/build/html/genindex.html
vendored
@@ -82,7 +82,7 @@
|
||||
</li>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__iadd__">__iadd__() (vector method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Wireframe.__iter__">__iter__() (Wireframe method)</a>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Polyline.__iter__">__iter__() (Polyline method)</a>
|
||||
|
||||
<ul>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.World.__iter__">(World method)</a>
|
||||
@@ -94,14 +94,14 @@
|
||||
</li>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__matmul__">__matmul__() (vector method)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix.__mul__">__mul__() (matrix method)</a>
|
||||
|
||||
<ul>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__mul__">(vector method)</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
</ul></td>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__neg__">__neg__() (vector method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__pos__">__pos__() (vector method)</a>
|
||||
@@ -109,6 +109,8 @@
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix.__repr__">__repr__() (matrix method)</a>
|
||||
|
||||
<ul>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Polyline.__repr__">(Polyline method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__repr__">(vector method)</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
@@ -118,12 +120,20 @@
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__rmul__">(vector method)</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix.__str__">__str__() (matrix method)</a>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix.__setitem__">__setitem__() (matrix method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data_step_std.html#pylib.data_step_std.CARTESIAN_POINT.__str__">__str__() (CARTESIAN_POINT method)</a>
|
||||
|
||||
<ul>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix.__str__">(matrix method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Polyline.__str__">(Polyline method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__str__">(vector method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Wireframe.__str__">(Wireframe method)</a>
|
||||
<li><a href="pylib.data_step_std.html#pylib.data_step_std.VERTEX_POINT.__str__">(VERTEX_POINT method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.World.__str__">(World method)</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.__sub__">__sub__() (vector method)</a>
|
||||
@@ -139,14 +149,26 @@
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.World.add">add() (World method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.ang">ang() (vector static method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry2d.html#pylib.geometry2d.angle">angle() (in module pylib.geometry2d)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data_step.html#pylib.data_step.arc_circle_geometry">arc_circle_geometry() (in module pylib.data_step)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.ArcBSplineCurveWithKnots">ArcBSplineCurveWithKnots (class in pylib.geometry)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.geometry2d.html#pylib.geometry2d.angle">angle() (in module pylib.geometry2d)</a>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.ArcCircle">ArcCircle (class in pylib.geometry)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.ArcEllipse">ArcEllipse (class in pylib.geometry)</a>
|
||||
</li>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.arg">arg() (vector static method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.date.html#pylib.date.ascension_of_jesus">ascension_of_jesus() (in module pylib.date)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data_step_std.html#pylib.data_step_std.AXIS2_PLACEMENT_2D">AXIS2_PLACEMENT_2D (class in pylib.data_step_std)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data_step_std.html#pylib.data_step_std.AXIS2_PLACEMENT_3D">AXIS2_PLACEMENT_3D (class in pylib.data_step_std)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
</tr></table>
|
||||
@@ -154,6 +176,28 @@
|
||||
<h2 id="B">B</h2>
|
||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.function.html#pylib.function.b_spline_basis">b_spline_basis() (in module pylib.function)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data_step_std.html#pylib.data_step_std.B_SPLINE_CURVE">B_SPLINE_CURVE (class in pylib.data_step_std)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data_step_std.html#pylib.data_step_std.B_SPLINE_CURVE_WITH_KNOTS">B_SPLINE_CURVE_WITH_KNOTS (class in pylib.data_step_std)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.B_spline_curve_with_knots">B_spline_curve_with_knots (class in pylib.geometry)</a>
|
||||
</li>
|
||||
<li><a href="pylib.function.html#pylib.function.b_spline_curve_with_knots">b_spline_curve_with_knots() (in module pylib.function)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.data_step.html#pylib.data_step.b_spline_curve_with_knots_geometry">b_spline_curve_with_knots_geometry() (in module pylib.data_step)</a>
|
||||
</li>
|
||||
<li><a href="pylib.function.html#pylib.function.b_spline_knots">b_spline_knots() (in module pylib.function)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data_step_std.html#pylib.data_step_std.boolean_choose">boolean_choose() (in module pylib.data_step_std)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data_step_std.html#pylib.data_step_std.BOOLEAN_to_bool">BOOLEAN_to_bool() (in module pylib.data_step_std)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data_step_std.html#pylib.data_step_std.BOUNDED_CURVE">BOUNDED_CURVE (class in pylib.data_step_std)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.World.bounding_box">bounding_box() (World method)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
@@ -163,29 +207,43 @@
|
||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.geometry_plot_pylab.html#pylib.geometry_plot_pylab.cad_wireframe">cad_wireframe() (in module pylib.geometry_plot_pylab)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data_step_std.html#pylib.data_step_std.CARTESIAN_POINT">CARTESIAN_POINT (class in pylib.data_step_std)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.World.center">center() (World method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Solid.ch_cs">ch_cs() (Solid method)</a>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Polyline.ch_cs">ch_cs() (Polyline method)</a>
|
||||
|
||||
<ul>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.ch_cs">(vector method)</a>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Solid.ch_cs">(Solid method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Wireframe.ch_cs">(Wireframe method)</a>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.ch_cs">(vector method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.World.ch_cs">(World method)</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
<li><a href="pylib.data_step_std.html#pylib.data_step_std.CIRCLE">CIRCLE (class in pylib.data_step_std)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Circle">Circle (class in pylib.geometry)</a>
|
||||
</li>
|
||||
<li><a href="pylib.function.html#pylib.function.circle">circle() (in module pylib.function)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Properties.circle_sectors">circle_sectors (Properties attribute)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.data_step_std.html#pylib.data_step_std.CONIC">CONIC (class in pylib.data_step_std)</a>
|
||||
</li>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.conjugate">conjugate() (vector static method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.function.html#pylib.function.cosine_wave">cosine_wave() (in module pylib.function)</a>
|
||||
</li>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.cross">cross() (vector static method)</a>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Direction.cross">cross() (Direction class method)</a>
|
||||
|
||||
<ul>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.cross">(vector static method)</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.CS">CS (class in pylib.geometry)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.World.cs">cs() (World method)</a>
|
||||
@@ -195,6 +253,8 @@
|
||||
<li><a href="pylib.geometry2d.html#pylib.geometry2d.cubic_deg">cubic_deg() (in module pylib.geometry2d)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry2d.html#pylib.geometry2d.cubics">cubics() (in module pylib.geometry2d)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data_step_std.html#pylib.data_step_std.CURVE">CURVE (class in pylib.data_step_std)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
</tr></table>
|
||||
@@ -204,21 +264,35 @@
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.data.html#module-data">data (module)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data_step.html#pylib.data_step.data_cmds_to_data_dict">data_cmds_to_data_dict() (in module pylib.data_step)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data_step.html#pylib.data_step.data_dict_edge_curve_to_geometry">data_dict_edge_curve_to_geometry() (in module pylib.data_step)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data_step.html#pylib.data_step.data_dict_to_geometry_world">data_dict_to_geometry_world() (in module pylib.data_step)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data_step.html#pylib.data_step.data_dict_to_geometry_world_edge_curve">data_dict_to_geometry_world_edge_curve() (in module pylib.data_step)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data_step.html#pylib.data_step.data_section_dict">data_section_dict() (in module pylib.data_step)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data_step.html#module-data_step">data_step (module)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data_step_std.html#module-data_step_std">data_step_std (module)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.date.html#module-date">date (module)</a>
|
||||
</li>
|
||||
<li><a href="pylib.time_of_day.html#pylib.time_of_day.days">days() (in module pylib.time_of_day)</a>
|
||||
</li>
|
||||
<li><a href="pylib.time_of_day.html#pylib.time_of_day.days_norm">days_norm() (in module pylib.time_of_day)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data_step_std.html#pylib.data_step_std.dimension_of">dimension_of() (in module pylib.data_step_std)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data_step_std.html#pylib.data_step_std.DIRECTION">DIRECTION (class in pylib.data_step_std)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Direction">Direction (class in pylib.geometry)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.numerical.ode_model.html#pylib.numerical.ode_model.disk">disk() (in module pylib.numerical.ode_model)</a>
|
||||
</li>
|
||||
<li><a href="pylib.numerical.ode_model.html#pylib.numerical.ode_model.disk_nm">disk_nm() (in module pylib.numerical.ode_model)</a>
|
||||
</li>
|
||||
<li><a href="pylib.numerical.ode_model.html#pylib.numerical.ode_model.disk_nmmdk">disk_nmmdk() (in module pylib.numerical.ode_model)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry2d.html#pylib.geometry2d.distance">distance() (in module pylib.geometry2d)</a>
|
||||
</li>
|
||||
@@ -236,13 +310,25 @@
|
||||
</li>
|
||||
<li><a href="pylib.numerical.ode.html#pylib.numerical.ode.e4">e4() (in module pylib.numerical.ode)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.date.html#pylib.date.easter_friday">easter_friday() (in module pylib.date)</a>
|
||||
</li>
|
||||
<li><a href="pylib.date.html#pylib.date.easter_monday">easter_monday() (in module pylib.date)</a>
|
||||
</li>
|
||||
<li><a href="pylib.date.html#pylib.date.easter_sunday">easter_sunday() (in module pylib.date)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.data_step_std.html#pylib.data_step_std.EDGE">EDGE (class in pylib.data_step_std)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data_step_std.html#pylib.data_step_std.EDGE_CURVE">EDGE_CURVE (class in pylib.data_step_std)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data_step_std.html#pylib.data_step_std.EDGE_LOOP">EDGE_LOOP (class in pylib.data_step_std)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data_step_std.html#pylib.data_step_std.ELLIPSE">ELLIPSE (class in pylib.data_step_std)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Ellipse">Ellipse (class in pylib.geometry)</a>
|
||||
</li>
|
||||
<li><a href="pylib.function.html#pylib.function.ellipse">ellipse() (in module pylib.function)</a>
|
||||
</li>
|
||||
<li><a href="pylib.function.html#pylib.function.epitrochoid">epitrochoid() (in module pylib.function)</a>
|
||||
</li>
|
||||
@@ -252,6 +338,8 @@
|
||||
<h2 id="F">F</h2>
|
||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.data.html#pylib.data.find_last">find_last() (in module pylib.data)</a>
|
||||
</li>
|
||||
<li><a href="pylib.numerical.fit.html#module-fit">fit (module)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data.html#pylib.data.fold_list">fold_list() (in module pylib.data)</a>
|
||||
@@ -276,12 +364,14 @@
|
||||
</li>
|
||||
<li><a href="pylib.date.html#pylib.date.gaußsche_osterformel">gaußsche_osterformel() (in module pylib.date)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#module-geometry">geometry (module)</a>
|
||||
<li><a href="pylib.data_step_std.html#pylib.data_step_std.GEOMETRIC_REPRESENTATION_ITEM">GEOMETRIC_REPRESENTATION_ITEM (class in pylib.data_step_std)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry2d.html#module-geometry2d">geometry2d (module)</a>
|
||||
<li><a href="pylib.geometry.html#module-geometry">geometry (module)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.geometry2d.html#module-geometry2d">geometry2d (module)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry2d_plot.html#module-geometry2d_plot">geometry2d_plot (module)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry_plot.html#module-geometry_plot">geometry_plot (module)</a>
|
||||
@@ -298,6 +388,8 @@
|
||||
<h2 id="H">H</h2>
|
||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.helper.html#module-helper">helper (module)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Hexahedron">Hexahedron (class in pylib.geometry)</a>
|
||||
</li>
|
||||
<li><a href="pylib.drawblock.html#pylib.drawblock.histogram">histogram() (in module pylib.drawblock)</a>
|
||||
@@ -317,16 +409,24 @@
|
||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.numerical.ode.html#pylib.numerical.ode.i1">i1() (in module pylib.numerical.ode)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data_step_std.html#pylib.data_step_std.REPRESENTATION_ITEM.idn">idn (REPRESENTATION_ITEM attribute)</a>
|
||||
</li>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.im">im() (vector static method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.time_of_day.html#pylib.time_of_day.in_seconds">in_seconds() (in module pylib.time_of_day)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.CS.init_xyz">init_xyz() (CS class method)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.numerical.integration.html#module-integration">integration (module)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry2d.html#pylib.geometry2d.interpolate_hermite">interpolate_hermite() (in module pylib.geometry2d)</a>
|
||||
</li>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.isclose">isclose() (vector static method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.iscloseto">iscloseto() (vector method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data.html#pylib.data.issequence">issequence() (in module pylib.data)</a>
|
||||
</li>
|
||||
@@ -337,16 +437,24 @@
|
||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.lcm">lcm() (in module pylib.mathematics)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data_step_std.html#pylib.data_step_std.LINE">LINE (class in pylib.data_step_std)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Line">Line (class in pylib.geometry)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry2d.html#pylib.geometry2d.line">line() (in module pylib.geometry2d)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.geometry2d.html#pylib.geometry2d.line">line() (in module pylib.geometry2d)</a>
|
||||
<li><a href="pylib.data_step.html#pylib.data_step.line_geometry">line_geometry() (in module pylib.data_step)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry2d.html#pylib.geometry2d.lines">lines() (in module pylib.geometry2d)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data_step_std.html#pylib.data_step_std.list_to_array">list_to_array() (in module pylib.data_step_std)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data.html#pylib.data.load">load() (in module pylib.data)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data_step_std.html#pylib.data_step_std.LOOP">LOOP (class in pylib.data_step_std)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
</tr></table>
|
||||
@@ -371,12 +479,14 @@
|
||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.numerical.ode.html#pylib.numerical.ode.newmark_newtonraphson">newmark_newtonraphson() (in module pylib.numerical.ode)</a>
|
||||
</li>
|
||||
<li><a href="pylib.numerical.ode.html#pylib.numerical.ode.newmark_newtonraphson_mdk">newmark_newtonraphson_mdk() (in module pylib.numerical.ode)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.numerical.ode.html#pylib.numerical.ode.newmark_newtonraphson_rdk">newmark_newtonraphson_rdk() (in module pylib.numerical.ode)</a>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.normalize">normalize() (vector method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.normalize">normalize() (vector static method)</a>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.normalized">normalized() (vector static method)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
</tr></table>
|
||||
@@ -393,6 +503,8 @@
|
||||
<li><a href="pylib.numerical.ode_model.html#module-ode_model">ode_model (module)</a>
|
||||
</li>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.ones">ones() (vector static method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data_step_std.html#pylib.data_step_std.ORIENTED_EDGE">ORIENTED_EDGE (class in pylib.data_step_std)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
</tr></table>
|
||||
@@ -400,32 +512,52 @@
|
||||
<h2 id="P">P</h2>
|
||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.data_step_std.html#pylib.data_step_std.PATH">PATH (class in pylib.data_step_std)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data_step_std.html#pylib.data_step_std.path_head_to_tail">path_head_to_tail() (in module pylib.data_step_std)</a>
|
||||
</li>
|
||||
<li><a href="pylib.date.html#pylib.date.pentecost">pentecost() (in module pylib.date)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data_step_std.html#pylib.data_step_std.PLACEMENT">PLACEMENT (class in pylib.data_step_std)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry2d_plot.html#pylib.geometry2d_plot.plot_cubic_lines">plot_cubic_lines() (in module pylib.geometry2d_plot)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry2d_plot.html#pylib.geometry2d_plot.plot_lines">plot_lines() (in module pylib.geometry2d_plot)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry_plot_pylab.html#pylib.geometry_plot_pylab.plot_post">plot_post() (in module pylib.geometry_plot_pylab)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data_step_std.html#pylib.data_step_std.POINT">POINT (class in pylib.data_step_std)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Point">Point (class in pylib.geometry)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Wireframe.points">points() (Wireframe method)</a>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Polyline.points">points() (Polyline method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Polygon">Polygon (class in pylib.geometry)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Polyline">Polyline (class in pylib.geometry)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data_step.html#pylib.data_step.print_edge_loop">print_edge_loop() (in module pylib.data_step)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data.html#pylib.data.print_list">print_list() (in module pylib.data)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Point.projection">projection() (Point method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Properties">Properties (class in pylib.geometry)</a>
|
||||
</li>
|
||||
<li><a href="pylib.html#module-pylib">pylib (module)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data.html#module-pylib.data">pylib.data (module)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.data_step.html#module-pylib.data_step">pylib.data_step (module)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data_step_std.html#module-pylib.data_step_std">pylib.data_step_std (module)</a>
|
||||
</li>
|
||||
<li><a href="pylib.date.html#module-pylib.date">pylib.date (module)</a>
|
||||
</li>
|
||||
<li><a href="pylib.drawblock.html#module-pylib.drawblock">pylib.drawblock (module)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.function.html#module-pylib.function">pylib.function (module)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#module-pylib.geometry">pylib.geometry (module)</a>
|
||||
@@ -437,6 +569,8 @@
|
||||
<li><a href="pylib.geometry_plot.html#module-pylib.geometry_plot">pylib.geometry_plot (module)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry_plot_pylab.html#module-pylib.geometry_plot_pylab">pylib.geometry_plot_pylab (module)</a>
|
||||
</li>
|
||||
<li><a href="pylib.helper.html#module-pylib.helper">pylib.helper (module)</a>
|
||||
</li>
|
||||
<li><a href="pylib.mathematics.html#module-pylib.mathematics">pylib.mathematics (module)</a>
|
||||
</li>
|
||||
@@ -463,8 +597,12 @@
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.re">re() (vector static method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data.html#pylib.data.read">read() (in module pylib.data)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data.html#pylib.data.read_columns">read_columns() (in module pylib.data)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry2d.html#pylib.geometry2d.rectangle">rectangle() (in module pylib.geometry2d)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data_step_std.html#pylib.data_step_std.REPRESENTATION_ITEM">REPRESENTATION_ITEM (class in pylib.data_step_std)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry2d.html#pylib.geometry2d.rotate">rotate() (in module pylib.geometry2d)</a>
|
||||
</li>
|
||||
@@ -473,23 +611,23 @@
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix.rotate_x">rotate_x() (matrix method)</a>
|
||||
|
||||
<ul>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.rotate_x">(vector method)</a>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Polyline.rotate_x">(Polyline method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Wireframe.rotate_x">(Wireframe method)</a>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.rotate_x">(vector method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.World.rotate_x">(World method)</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
<li><a href="pylib.geometry2d.html#pylib.geometry2d.rotate_xy">rotate_xy() (in module pylib.geometry2d)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.geometry2d.html#pylib.geometry2d.rotate_xy">rotate_xy() (in module pylib.geometry2d)</a>
|
||||
</li>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix.rotate_y">rotate_y() (matrix method)</a>
|
||||
|
||||
<ul>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.rotate_y">(vector method)</a>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Polyline.rotate_y">(Polyline method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Wireframe.rotate_y">(Wireframe method)</a>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.rotate_y">(vector method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.World.rotate_y">(World method)</a>
|
||||
</li>
|
||||
@@ -497,9 +635,9 @@
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix.rotate_z">rotate_z() (matrix method)</a>
|
||||
|
||||
<ul>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.rotate_z">(vector method)</a>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Polyline.rotate_z">(Polyline method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Wireframe.rotate_z">(Wireframe method)</a>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.rotate_z">(vector method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.World.rotate_z">(World method)</a>
|
||||
</li>
|
||||
@@ -517,25 +655,35 @@
|
||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix.s">s() (matrix static method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.function.html#pylib.function.sample_half_open">sample_half_open() (in module pylib.function)</a>
|
||||
|
||||
<ul>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.sample_half_open">(in module pylib.geometry)</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
<li><a href="pylib.function.html#pylib.function.sample_half_open_seq">sample_half_open_seq() (in module pylib.function)</a>
|
||||
</li>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix.scale">scale() (matrix method)</a>
|
||||
|
||||
<ul>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Polyline.scale">(Polyline method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Solid.scale">(Solid method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.scale">(vector method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Wireframe.scale">(Wireframe method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.World.scale">(World method)</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
<li><a href="pylib.data_step_std.html#pylib.data_step_std.SEAM_CURVE">SEAM_CURVE (class in pylib.data_step_std)</a>
|
||||
</li>
|
||||
<li><a href="pylib.time_of_day.html#pylib.time_of_day.seconds">seconds() (in module pylib.time_of_day)</a>
|
||||
</li>
|
||||
<li><a href="pylib.time_of_day.html#pylib.time_of_day.seconds_norm">seconds_norm() (in module pylib.time_of_day)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.time_of_day.html#pylib.time_of_day.seconds_norm">seconds_norm() (in module pylib.time_of_day)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data.html#pylib.data.seq">seq() (in module pylib.data)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry_plot_pylab.html#pylib.geometry_plot_pylab.set_aspect_equal">set_aspect_equal() (in module pylib.geometry_plot_pylab)</a>
|
||||
@@ -547,8 +695,18 @@
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.World.space_diagonal">space_diagonal() (World method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry2d.html#pylib.geometry2d.square">square() (in module pylib.geometry2d)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data_step.html#pylib.data_step.step">step (class in pylib.data_step)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data.html#pylib.data.store">store() (in module pylib.data)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data.html#pylib.data.str_between">str_between() (in module pylib.data)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data_step.html#pylib.data_step.str_to_cmd_args">str_to_cmd_args() (in module pylib.data_step)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data.html#pylib.data.str_to_list">str_to_list() (in module pylib.data)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data_step_std.html#pylib.data_step_std.SURFACE_CURVE">SURFACE_CURVE (class in pylib.data_step_std)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
</tr></table>
|
||||
@@ -559,8 +717,12 @@
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix.t">t() (matrix static method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.time_of_day.html#module-time_of_day">time_of_day (module)</a>
|
||||
</li>
|
||||
<li><a href="pylib.helper.html#pylib.helper.timeit">timeit (class in pylib.helper)</a>
|
||||
</li>
|
||||
<li><a href="pylib.function.html#pylib.function.to_str">to_str() (in module pylib.function)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data_step_std.html#pylib.data_step_std.TOPOLOGICAL_REPRESENTATION_ITEM">TOPOLOGICAL_REPRESENTATION_ITEM (class in pylib.data_step_std)</a>
|
||||
</li>
|
||||
<li><a href="pylib.time_of_day.html#pylib.time_of_day.transform">transform() (in module pylib.time_of_day)</a>
|
||||
</li>
|
||||
@@ -570,12 +732,12 @@
|
||||
|
||||
<ul>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix.translate">(matrix method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Polyline.translate">(Polyline method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Solid.translate">(Solid method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.translate">(vector method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Wireframe.translate">(Wireframe method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.World.translate">(World method)</a>
|
||||
</li>
|
||||
@@ -583,6 +745,10 @@
|
||||
</ul></td>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.geometry2d.html#pylib.geometry2d.translate_xy">translate_xy() (in module pylib.geometry2d)</a>
|
||||
</li>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix.transpose">transpose() (matrix method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix.transposed">transposed() (matrix static method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.numerical.integration.html#pylib.numerical.integration.trapez">trapez() (in module pylib.numerical.integration)</a>
|
||||
</li>
|
||||
@@ -593,6 +759,12 @@
|
||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.data.html#pylib.data.unique_ending">unique_ending() (in module pylib.data)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.data.html#pylib.data.unique_list">unique_list() (in module pylib.data)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data.html#pylib.data.unique_list_hashable">unique_list_hashable() (in module pylib.data)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
</tr></table>
|
||||
@@ -600,7 +772,15 @@
|
||||
<h2 id="V">V</h2>
|
||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.data_step_std.html#pylib.data_step_std.VECTOR">VECTOR (class in pylib.data_step_std)</a>
|
||||
</li>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector">vector (class in pylib.mathematics)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.data_step_std.html#pylib.data_step_std.VERTEX">VERTEX (class in pylib.data_step_std)</a>
|
||||
</li>
|
||||
<li><a href="pylib.data_step_std.html#pylib.data_step_std.VERTEX_POINT">VERTEX_POINT (class in pylib.data_step_std)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
</tr></table>
|
||||
@@ -608,8 +788,6 @@
|
||||
<h2 id="W">W</h2>
|
||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Wireframe">Wireframe (class in pylib.geometry)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry_plot_pylab.html#pylib.geometry_plot_pylab.wireframe3d">wireframe3d() (in module pylib.geometry_plot_pylab)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Solid.wireframes">wireframes() (Solid method)</a>
|
||||
@@ -634,15 +812,15 @@
|
||||
<h2 id="X">X</h2>
|
||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.CS.x90">x90() (CS static method)</a>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.CS.x90">x90() (CS class method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.CS.xm90">xm90() (CS static method)</a>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.CS.xm90">xm90() (CS class method)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Wireframe.xy">xy() (Wireframe method)</a>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Polyline.xy">xy() (Polyline method)</a>
|
||||
</li>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Wireframe.xyz">xyz() (Wireframe method)</a>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.Polyline.xyz">xyz() (Polyline method)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
</tr></table>
|
||||
@@ -650,11 +828,11 @@
|
||||
<h2 id="Y">Y</h2>
|
||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.CS.y90">y90() (CS static method)</a>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.CS.y90">y90() (CS class method)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.CS.ym90">ym90() (CS static method)</a>
|
||||
<li><a href="pylib.geometry.html#pylib.geometry.CS.ym90">ym90() (CS class method)</a>
|
||||
</li>
|
||||
</ul></td>
|
||||
</tr></table>
|
||||
@@ -662,8 +840,12 @@
|
||||
<h2 id="Z">Z</h2>
|
||||
<table style="width: 100%" class="indextable genindextable"><tr>
|
||||
<td style="width: 33%; vertical-align: top;"><ul>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.zeros">zeros() (vector static method)</a>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.matrix.zeros">zeros() (matrix static method)</a>
|
||||
|
||||
<ul>
|
||||
<li><a href="pylib.mathematics.html#pylib.mathematics.vector.zeros">(vector static method)</a>
|
||||
</li>
|
||||
</ul></li>
|
||||
</ul></td>
|
||||
</tr></table>
|
||||
|
||||
|
||||
8
docs/build/html/modules.html
vendored
8
docs/build/html/modules.html
vendored
@@ -48,17 +48,17 @@
|
||||
</li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="pylib.html#submodules">Submodules</a><ul>
|
||||
<li class="toctree-l3"><a class="reference internal" href="pylib.data.html">pylib.data module</a></li>
|
||||
<li class="toctree-l3"><a class="reference internal" href="pylib.data_step.html">pylib.data_step module</a></li>
|
||||
<li class="toctree-l3"><a class="reference internal" href="pylib.data_step_std.html">pylib.data_step_std module</a></li>
|
||||
<li class="toctree-l3"><a class="reference internal" href="pylib.date.html">pylib.date module</a></li>
|
||||
<li class="toctree-l3"><a class="reference internal" href="pylib.drawblock.html">pylib.drawblock module</a></li>
|
||||
<li class="toctree-l3"><a class="reference internal" href="pylib.function.html">pylib.function module</a></li>
|
||||
<li class="toctree-l3"><a class="reference internal" href="pylib.geometry.html">pylib.geometry module</a><ul>
|
||||
<li class="toctree-l4"><a class="reference internal" href="pylib.geometry.html#affine-transforms">Affine transforms</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l3"><a class="reference internal" href="pylib.geometry.html">pylib.geometry module</a></li>
|
||||
<li class="toctree-l3"><a class="reference internal" href="pylib.geometry2d.html">pylib.geometry2d module</a></li>
|
||||
<li class="toctree-l3"><a class="reference internal" href="pylib.geometry2d_plot.html">pylib.geometry2d_plot module</a></li>
|
||||
<li class="toctree-l3"><a class="reference internal" href="pylib.geometry_plot.html">pylib.geometry_plot module</a></li>
|
||||
<li class="toctree-l3"><a class="reference internal" href="pylib.geometry_plot_pylab.html">pylib.geometry_plot_pylab module</a></li>
|
||||
<li class="toctree-l3"><a class="reference internal" href="pylib.helper.html">pylib.helper module</a></li>
|
||||
<li class="toctree-l3"><a class="reference internal" href="pylib.mathematics.html">pylib.mathematics module</a></li>
|
||||
<li class="toctree-l3"><a class="reference internal" href="pylib.time_of_day.html">pylib.time_of_day module</a></li>
|
||||
</ul>
|
||||
|
||||
BIN
docs/build/html/objects.inv
vendored
BIN
docs/build/html/objects.inv
vendored
Binary file not shown.
34
docs/build/html/py-modindex.html
vendored
34
docs/build/html/py-modindex.html
vendored
@@ -42,6 +42,7 @@
|
||||
<a href="#cap-d"><strong>d</strong></a> |
|
||||
<a href="#cap-f"><strong>f</strong></a> |
|
||||
<a href="#cap-g"><strong>g</strong></a> |
|
||||
<a href="#cap-h"><strong>h</strong></a> |
|
||||
<a href="#cap-i"><strong>i</strong></a> |
|
||||
<a href="#cap-m"><strong>m</strong></a> |
|
||||
<a href="#cap-o"><strong>o</strong></a> |
|
||||
@@ -58,6 +59,16 @@
|
||||
<td>
|
||||
<a href="pylib.data.html#module-data"><code class="xref">data</code></a> <em>(*nix, Windows)</em></td><td>
|
||||
<em>Handle data files and structures.</em></td></tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>
|
||||
<a href="pylib.data_step.html#module-data_step"><code class="xref">data_step</code></a> <em>(*nix, Windows)</em></td><td>
|
||||
<em>STEP reader.</em></td></tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>
|
||||
<a href="pylib.data_step_std.html#module-data_step_std"><code class="xref">data_step_std</code></a> <em>(*nix, Windows)</em></td><td>
|
||||
<em>STEP Standard structure.</em></td></tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>
|
||||
@@ -110,6 +121,14 @@
|
||||
<a href="pylib.geometry_plot_pylab.html#module-geometry_plot_pylab"><code class="xref">geometry_plot_pylab</code></a> <em>(*nix, Windows)</em></td><td>
|
||||
<em>Geometry plotting (pylab).</em></td></tr>
|
||||
<tr class="pcap"><td></td><td> </td><td></td></tr>
|
||||
<tr class="cap" id="cap-h"><td></td><td>
|
||||
<strong>h</strong></td><td></td></tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>
|
||||
<a href="pylib.helper.html#module-helper"><code class="xref">helper</code></a> <em>(*nix, Windows)</em></td><td>
|
||||
<em>Helper objects.</em></td></tr>
|
||||
<tr class="pcap"><td></td><td> </td><td></td></tr>
|
||||
<tr class="cap" id="cap-i"><td></td><td>
|
||||
<strong>i</strong></td><td></td></tr>
|
||||
<tr>
|
||||
@@ -152,6 +171,16 @@
|
||||
<td>   
|
||||
<a href="pylib.data.html#module-pylib.data"><code class="xref">pylib.data</code></a></td><td>
|
||||
<em></em></td></tr>
|
||||
<tr class="cg-1">
|
||||
<td></td>
|
||||
<td>   
|
||||
<a href="pylib.data_step.html#module-pylib.data_step"><code class="xref">pylib.data_step</code></a></td><td>
|
||||
<em></em></td></tr>
|
||||
<tr class="cg-1">
|
||||
<td></td>
|
||||
<td>   
|
||||
<a href="pylib.data_step_std.html#module-pylib.data_step_std"><code class="xref">pylib.data_step_std</code></a></td><td>
|
||||
<em></em></td></tr>
|
||||
<tr class="cg-1">
|
||||
<td></td>
|
||||
<td>   
|
||||
@@ -192,6 +221,11 @@
|
||||
<td>   
|
||||
<a href="pylib.geometry_plot_pylab.html#module-pylib.geometry_plot_pylab"><code class="xref">pylib.geometry_plot_pylab</code></a></td><td>
|
||||
<em></em></td></tr>
|
||||
<tr class="cg-1">
|
||||
<td></td>
|
||||
<td>   
|
||||
<a href="pylib.helper.html#module-pylib.helper"><code class="xref">pylib.helper</code></a></td><td>
|
||||
<em></em></td></tr>
|
||||
<tr class="cg-1">
|
||||
<td></td>
|
||||
<td>   
|
||||
|
||||
139
docs/build/html/pylib.data.html
vendored
139
docs/build/html/pylib.data.html
vendored
@@ -16,7 +16,7 @@
|
||||
<script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
|
||||
<link rel="index" title="Index" href="genindex.html" />
|
||||
<link rel="search" title="Search" href="search.html" />
|
||||
<link rel="next" title="pylib.date module" href="pylib.date.html" />
|
||||
<link rel="next" title="pylib.data_step module" href="pylib.data_step.html" />
|
||||
<link rel="prev" title="pylib.numerical.ode_model module" href="pylib.numerical.ode_model.html" />
|
||||
|
||||
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
|
||||
@@ -36,13 +36,34 @@
|
||||
|
||||
<div class="section" id="module-pylib.data">
|
||||
<span id="pylib-data-module"></span><h1>pylib.data module<a class="headerlink" href="#module-pylib.data" title="Permalink to this headline">¶</a></h1>
|
||||
<p>Read and write data to or from file and manipulate data structures.</p>
|
||||
<p>Read and write data to or from file and manipulate data
|
||||
structures.</p>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Date</dt>
|
||||
<dd class="field-odd"><p>2019-10-11</p>
|
||||
<dd class="field-odd"><p>2019-12-28</p>
|
||||
</dd>
|
||||
</dl>
|
||||
<span class="target" id="module-data"></span><dl class="function">
|
||||
<dt id="pylib.data.find_last">
|
||||
<code class="sig-name descname">find_last</code><span class="sig-paren">(</span><em class="sig-param">sequence</em>, <em class="sig-param">pattern</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data.html#find_last"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data.find_last" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Find last last occurance in sequence (text)</p>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Parameters</dt>
|
||||
<dd class="field-odd"><ul class="simple">
|
||||
<li><p><strong>sequence</strong> (<em>str</em>) – text to search in</p></li>
|
||||
<li><p><strong>pattern</strong> (<em>str</em>) – search pattern</p></li>
|
||||
</ul>
|
||||
</dd>
|
||||
<dt class="field-even">Returns</dt>
|
||||
<dd class="field-even"><p>index (-1 if pattern not in sequence)</p>
|
||||
</dd>
|
||||
<dt class="field-odd">Return type</dt>
|
||||
<dd class="field-odd"><p>int</p>
|
||||
</dd>
|
||||
</dl>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="function">
|
||||
<dt id="pylib.data.fold_list">
|
||||
<code class="sig-name descname">fold_list</code><span class="sig-paren">(</span><em class="sig-param">lst</em>, <em class="sig-param">n</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data.html#fold_list"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data.fold_list" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Convert one-dimensional kx1 array (list) to two-dimensional mxn
|
||||
@@ -137,14 +158,42 @@ False for int, dict, set</p>
|
||||
</dl>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="function">
|
||||
<dt id="pylib.data.print_list">
|
||||
<code class="sig-name descname">print_list</code><span class="sig-paren">(</span><em class="sig-param">lst</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data.html#print_list"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data.print_list" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Print list, one list element per line.</p>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Parameters</dt>
|
||||
<dd class="field-odd"><p><strong>lst</strong> (<em>list</em>) – list to print</p>
|
||||
</dd>
|
||||
</dl>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="function">
|
||||
<dt id="pylib.data.read">
|
||||
<code class="sig-name descname">read</code><span class="sig-paren">(</span><em class="sig-param">file_name</em>, <em class="sig-param">x_column</em>, <em class="sig-param">y_column</em>, <em class="sig-param">default=None</em>, <em class="sig-param">verbose=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data.html#read"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data.read" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">read</code><span class="sig-paren">(</span><em class="sig-param">file_name</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data.html#read"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data.read" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Read ascii data file.</p>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Parameters</dt>
|
||||
<dd class="field-odd"><p><strong>filename</strong> (<em>str</em>) – file to read</p>
|
||||
</dd>
|
||||
<dt class="field-even">Returns</dt>
|
||||
<dd class="field-even"><p>file content</p>
|
||||
</dd>
|
||||
<dt class="field-odd">Return type</dt>
|
||||
<dd class="field-odd"><p>str</p>
|
||||
</dd>
|
||||
</dl>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="function">
|
||||
<dt id="pylib.data.read_columns">
|
||||
<code class="sig-name descname">read_columns</code><span class="sig-paren">(</span><em class="sig-param">file_name</em>, <em class="sig-param">x_column</em>, <em class="sig-param">y_column</em>, <em class="sig-param">default=None</em>, <em class="sig-param">verbose=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data.html#read_columns"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data.read_columns" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Read ascii data file.</p>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Parameters</dt>
|
||||
<dd class="field-odd"><ul class="simple">
|
||||
<li><p><strong>filename</strong> (<em>str</em>) – file to read</p></li>
|
||||
<li><p><strong>file_name</strong> (<em>str</em>) – file to read</p></li>
|
||||
<li><p><strong>x_column</strong> (<em>int</em>) – column index for the x data (first column is 0)</p></li>
|
||||
<li><p><strong>y_column</strong> (<em>int</em>) – column index for the y data (first column is 0)</p></li>
|
||||
<li><p><strong>default</strong> (<em>object</em>) – return object if data loading fails</p></li>
|
||||
@@ -203,6 +252,72 @@ between consecutive terms).</p></li>
|
||||
</dl>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="function">
|
||||
<dt id="pylib.data.str_between">
|
||||
<code class="sig-name descname">str_between</code><span class="sig-paren">(</span><em class="sig-param">text</em>, <em class="sig-param">left</em>, <em class="sig-param">right</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data.html#str_between"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data.str_between" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Get text between two pattern.</p>
|
||||
<p>Text can be multi-line.</p>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Parameters</dt>
|
||||
<dd class="field-odd"><ul class="simple">
|
||||
<li><p><strong>text</strong> (<em>str</em>) – text to search in</p></li>
|
||||
<li><p><strong>left</strong> (<em>str</em>) – left pattern</p></li>
|
||||
<li><p><strong>right</strong> (<em>str</em>) – right pattern</p></li>
|
||||
</ul>
|
||||
</dd>
|
||||
<dt class="field-even">Returns</dt>
|
||||
<dd class="field-even"><p>text between the left and right pattern</p>
|
||||
</dd>
|
||||
<dt class="field-odd">Return type</dt>
|
||||
<dd class="field-odd"><p>str</p>
|
||||
</dd>
|
||||
</dl>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="function">
|
||||
<dt id="pylib.data.str_to_list">
|
||||
<code class="sig-name descname">str_to_list</code><span class="sig-paren">(</span><em class="sig-param">string</em>, <em class="sig-param">delimiter=';\n'</em>, <em class="sig-param">newline_replacement=''</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data.html#str_to_list"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data.str_to_list" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Converts a string with block information into a list.</p>
|
||||
<p>This function un-wraps multi-line block information into one line.</p>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Parameters</dt>
|
||||
<dd class="field-odd"><ul class="simple">
|
||||
<li><p><strong>string</strong> (<em>str</em>) – string with block information</p></li>
|
||||
<li><p><strong>delimiter</strong> (<em>str</em>) – block delimiter (default = ‘;n’). This will be
|
||||
removed from the resulting list.</p></li>
|
||||
<li><p><strong>newline_replacement</strong> (<em>str</em>) – block lines replacement (default = ‘’)</p></li>
|
||||
</ul>
|
||||
</dd>
|
||||
<dt class="field-even">Returns</dt>
|
||||
<dd class="field-even"><p>list of block information</p>
|
||||
</dd>
|
||||
<dt class="field-odd">Return type</dt>
|
||||
<dd class="field-odd"><p>list</p>
|
||||
</dd>
|
||||
</dl>
|
||||
<div class="admonition note">
|
||||
<p class="admonition-title">Note</p>
|
||||
<p>Every line is left striped. Empty line are ignored.</p>
|
||||
</div>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Example</dt>
|
||||
<dd class="field-odd"><p></p></dd>
|
||||
</dl>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">before</span> <span class="p">(</span><span class="n">string</span><span class="p">):</span>
|
||||
<span class="n">FILE_DESCRIPTION</span><span class="p">((</span><span class="s1">'Open CASCADE Model'</span><span class="p">),</span><span class="s1">'2;1'</span><span class="p">);</span>
|
||||
<span class="n">FILE_NAME</span><span class="p">(</span><span class="s1">'Open CASCADE Shape Model'</span><span class="p">,</span><span class="s1">'2019-10-14T14:32:20'</span><span class="p">,(</span><span class="s1">'Author'</span><span class="p">),(</span>
|
||||
<span class="s1">'Open CASCADE'</span><span class="p">),</span><span class="s1">'Open CASCADE STEP processor 7.1'</span><span class="p">,</span><span class="s1">'Open CASCADE 7.1'</span>
|
||||
<span class="p">,</span><span class="s1">'Unknown'</span><span class="p">);</span>
|
||||
<span class="n">FILE_SCHEMA</span><span class="p">((</span><span class="s1">'AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }'</span><span class="p">));</span>
|
||||
|
||||
<span class="n">after</span> <span class="p">(</span><span class="nb">list</span> <span class="n">elements</span> <span class="n">one</span> <span class="n">per</span> <span class="n">line</span><span class="p">):</span>
|
||||
<span class="n">FILE_DESCRIPTION</span><span class="p">((</span><span class="s1">'Open CASCADE Model'</span><span class="p">),</span><span class="s1">'2;1'</span><span class="p">)</span>
|
||||
<span class="n">FILE_NAME</span><span class="p">(</span><span class="s1">'Open CASCADE Shape Model'</span><span class="p">,</span><span class="s1">'2019-10-14T14:32:20'</span><span class="p">,(</span><span class="s1">'Author'</span><span class="p">),(</span><span class="s1">'Open CASCADE'</span><span class="p">),</span><span class="s1">'Open CASCADE STEP processor 7.1'</span><span class="p">,</span><span class="s1">'Open CASCADE 7.1'</span><span class="p">,</span><span class="s1">'Unknown'</span><span class="p">)</span>
|
||||
<span class="n">FILE_SCHEMA</span><span class="p">((</span><span class="s1">'AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }'</span><span class="p">))</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="function">
|
||||
<dt id="pylib.data.unique_ending">
|
||||
<code class="sig-name descname">unique_ending</code><span class="sig-paren">(</span><em class="sig-param">ids</em>, <em class="sig-param">n=1</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data.html#unique_ending"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data.unique_ending" title="Permalink to this definition">¶</a></dt>
|
||||
@@ -223,6 +338,18 @@ between consecutive terms).</p></li>
|
||||
</dl>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="function">
|
||||
<dt id="pylib.data.unique_list">
|
||||
<code class="sig-name descname">unique_list</code><span class="sig-paren">(</span><em class="sig-param">sequence</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data.html#unique_list"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data.unique_list" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="function">
|
||||
<dt id="pylib.data.unique_list_hashable">
|
||||
<code class="sig-name descname">unique_list_hashable</code><span class="sig-paren">(</span><em class="sig-param">sequence</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data.html#unique_list_hashable"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data.unique_list_hashable" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>faster using set() but elements of the sequence must be hashable.
|
||||
unhashable types: ‘list’</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="function">
|
||||
<dt id="pylib.data.write">
|
||||
<code class="sig-name descname">write</code><span class="sig-paren">(</span><em class="sig-param">file_name</em>, <em class="sig-param">data</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data.html#write"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data.write" title="Permalink to this definition">¶</a></dt>
|
||||
@@ -271,7 +398,7 @@ between consecutive terms).</p></li>
|
||||
<li><a href="modules.html">pylib</a><ul>
|
||||
<li><a href="pylib.html">pylib package</a><ul>
|
||||
<li>Previous: <a href="pylib.numerical.ode_model.html" title="previous chapter">pylib.numerical.ode_model module</a></li>
|
||||
<li>Next: <a href="pylib.date.html" title="next chapter">pylib.date module</a></li>
|
||||
<li>Next: <a href="pylib.data_step.html" title="next chapter">pylib.data_step module</a></li>
|
||||
</ul></li>
|
||||
</ul></li>
|
||||
</ul></li>
|
||||
|
||||
246
docs/build/html/pylib.data_step.html
vendored
Normal file
246
docs/build/html/pylib.data_step.html
vendored
Normal file
@@ -0,0 +1,246 @@
|
||||
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>pylib.data_step module — pylib 2019.12.21 documentation</title>
|
||||
<link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
|
||||
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
|
||||
<script type="text/javascript" src="_static/jquery.js"></script>
|
||||
<script type="text/javascript" src="_static/underscore.js"></script>
|
||||
<script type="text/javascript" src="_static/doctools.js"></script>
|
||||
<script type="text/javascript" src="_static/language_data.js"></script>
|
||||
<script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
|
||||
<link rel="index" title="Index" href="genindex.html" />
|
||||
<link rel="search" title="Search" href="search.html" />
|
||||
<link rel="next" title="pylib.data_step_std module" href="pylib.data_step_std.html" />
|
||||
<link rel="prev" title="pylib.data module" href="pylib.data.html" />
|
||||
|
||||
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
|
||||
|
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
|
||||
|
||||
</head><body>
|
||||
|
||||
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
|
||||
|
||||
<div class="body" role="main">
|
||||
|
||||
<div class="section" id="module-pylib.data_step">
|
||||
<span id="pylib-data-step-module"></span><h1>pylib.data_step module<a class="headerlink" href="#module-pylib.data_step" title="Permalink to this headline">¶</a></h1>
|
||||
<p>STEP reader.</p>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Date</dt>
|
||||
<dd class="field-odd"><p>2020-01-03</p>
|
||||
</dd>
|
||||
</dl>
|
||||
<span class="target" id="module-data_step"></span><dl class="function">
|
||||
<dt id="pylib.data_step.arc_circle_geometry">
|
||||
<code class="sig-name descname">arc_circle_geometry</code><span class="sig-paren">(</span><em class="sig-param">conic</em>, <em class="sig-param">p1</em>, <em class="sig-param">p2</em>, <em class="sig-param">ellipse=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data_step.html#arc_circle_geometry"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data_step.arc_circle_geometry" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="function">
|
||||
<dt id="pylib.data_step.b_spline_curve_with_knots_geometry">
|
||||
<code class="sig-name descname">b_spline_curve_with_knots_geometry</code><span class="sig-paren">(</span><em class="sig-param">b_spline</em>, <em class="sig-param">p1</em>, <em class="sig-param">p2</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data_step.html#b_spline_curve_with_knots_geometry"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data_step.b_spline_curve_with_knots_geometry" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Currently only clamped b_spline curves and assumed, i. e. closed
|
||||
= False.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="function">
|
||||
<dt id="pylib.data_step.data_cmds_to_data_dict">
|
||||
<code class="sig-name descname">data_cmds_to_data_dict</code><span class="sig-paren">(</span><em class="sig-param">data_cmds</em>, <em class="sig-param">verbose=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data_step.html#data_cmds_to_data_dict"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data_step.data_cmds_to_data_dict" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Create dict with step objects</p>
|
||||
<p>1st it creats keys equal to the number id string and values with
|
||||
the command string.</p>
|
||||
<p>2nd it creats keys for different step object types to dict all
|
||||
commands as new created objects of that type.</p>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Example</dt>
|
||||
<dd class="field-odd"><p></p></dd>
|
||||
</dl>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">from</span><span class="p">:</span>
|
||||
<span class="p">[</span><span class="s2">"#12 = CARTESIAN_POINT('',(0.E+000,0.E+000,0.E+000))"</span><span class="p">,</span>
|
||||
<span class="s2">"#22 = VERTEX_POINT('',#23)"</span><span class="p">]</span>
|
||||
<span class="n">to</span><span class="p">:</span>
|
||||
<span class="p">{</span><span class="s1">'#12'</span><span class="p">:</span> <span class="s1">'CARTESIAN_POINT('',(0.E+000,0.E+000,0.E+000))'</span><span class="p">,</span>
|
||||
<span class="s1">'#22'</span><span class="p">:</span> <span class="s1">'VERTEX_POINT('',#23)'</span><span class="p">}</span>
|
||||
|
||||
<span class="n">additional</span>
|
||||
<span class="p">{</span>
|
||||
<span class="s1">'cartesian_points'</span><span class="p">:</span> <span class="p">{</span>
|
||||
<span class="s1">'#12'</span><span class="p">:</span> <span class="n">pointer_to_new_created_point_object</span><span class="p">,</span>
|
||||
<span class="o">...</span>
|
||||
<span class="p">},</span>
|
||||
<span class="s1">'vertex_points'</span><span class="p">:</span> <span class="p">{</span>
|
||||
<span class="s1">'#22'</span><span class="p">:</span> <span class="n">pointer_to_new_created_vertex_object</span><span class="p">,</span>
|
||||
<span class="o">...</span>
|
||||
<span class="p">},</span>
|
||||
<span class="o">...</span>
|
||||
<span class="p">}</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="function">
|
||||
<dt id="pylib.data_step.data_dict_edge_curve_to_geometry">
|
||||
<code class="sig-name descname">data_dict_edge_curve_to_geometry</code><span class="sig-paren">(</span><em class="sig-param">data_dict</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data_step.html#data_dict_edge_curve_to_geometry"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data_step.data_dict_edge_curve_to_geometry" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="function">
|
||||
<dt id="pylib.data_step.data_dict_to_geometry_world">
|
||||
<code class="sig-name descname">data_dict_to_geometry_world</code><span class="sig-paren">(</span><em class="sig-param">data_dict</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data_step.html#data_dict_to_geometry_world"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data_step.data_dict_to_geometry_world" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="function">
|
||||
<dt id="pylib.data_step.data_dict_to_geometry_world_edge_curve">
|
||||
<code class="sig-name descname">data_dict_to_geometry_world_edge_curve</code><span class="sig-paren">(</span><em class="sig-param">data_dict</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data_step.html#data_dict_to_geometry_world_edge_curve"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data_step.data_dict_to_geometry_world_edge_curve" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="function">
|
||||
<dt id="pylib.data_step.data_section_dict">
|
||||
<code class="sig-name descname">data_section_dict</code><span class="sig-paren">(</span><em class="sig-param">step</em>, <em class="sig-param">verbose=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data_step.html#data_section_dict"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data_step.data_section_dict" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="function">
|
||||
<dt id="pylib.data_step.line_geometry">
|
||||
<code class="sig-name descname">line_geometry</code><span class="sig-paren">(</span><em class="sig-param">p1</em>, <em class="sig-param">p2</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data_step.html#line_geometry"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data_step.line_geometry" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="function">
|
||||
<dt id="pylib.data_step.print_edge_loop">
|
||||
<code class="sig-name descname">print_edge_loop</code><span class="sig-paren">(</span><em class="sig-param">data_dict</em>, <em class="sig-param">instance_name</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data_step.html#print_edge_loop"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data_step.print_edge_loop" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="class">
|
||||
<dt id="pylib.data_step.step">
|
||||
<em class="property">class </em><code class="sig-name descname">step</code><span class="sig-paren">(</span><em class="sig-param">file_name</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data_step.html#step"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data_step.step" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
|
||||
<p>STEP reader class.</p>
|
||||
<p>1st read a STEP file.
|
||||
2nd convert header and data section string to list of commands.</p>
|
||||
<p>The STEP file string can have commands distributed over several
|
||||
lines, the commands are seperated by <code class="docutils literal notranslate"><span class="pre">;\n</span></code>. This class un-wraps
|
||||
each command into one line (remove <code class="docutils literal notranslate"><span class="pre">\n</span></code>) and removes empty lines.</p>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Example</dt>
|
||||
<dd class="field-odd"><p></p></dd>
|
||||
</dl>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">header</span> <span class="n">part</span> <span class="n">of</span> <span class="n">a</span> <span class="n">step</span> <span class="n">file</span> <span class="p">(</span><span class="n">between</span> <span class="n">HEADER</span><span class="p">;</span> <span class="ow">and</span> <span class="n">ENDSEC</span><span class="p">;):</span>
|
||||
<span class="n">FILE_DESCRIPTION</span><span class="p">((</span><span class="s1">'Open CASCADE Model'</span><span class="p">),</span><span class="s1">'2;1'</span><span class="p">);</span>
|
||||
<span class="n">FILE_NAME</span><span class="p">(</span><span class="s1">'Open CASCADE Shape Model'</span><span class="p">,</span><span class="s1">'2019-10-14T14:32:20'</span><span class="p">,(</span><span class="s1">'Author'</span><span class="p">),(</span>
|
||||
<span class="s1">'Open CASCADE'</span><span class="p">),</span><span class="s1">'Open CASCADE STEP processor 7.1'</span><span class="p">,</span><span class="s1">'Open CASCADE 7.1'</span>
|
||||
<span class="p">,</span><span class="s1">'Unknown'</span><span class="p">);</span>
|
||||
<span class="n">FILE_SCHEMA</span><span class="p">((</span><span class="s1">'AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }'</span><span class="p">));</span>
|
||||
|
||||
<span class="n">will</span> <span class="n">result</span> <span class="ow">in</span> <span class="p">(</span><span class="n">but</span> <span class="k">as</span> <span class="n">a</span> <span class="nb">list</span><span class="p">):</span>
|
||||
<span class="n">FILE_DESCRIPTION</span><span class="p">((</span><span class="s1">'Open CASCADE Model'</span><span class="p">),</span><span class="s1">'2;1'</span><span class="p">)</span>
|
||||
<span class="n">FILE_NAME</span><span class="p">(</span><span class="s1">'Open CASCADE Shape Model'</span><span class="p">,</span><span class="s1">'2019-10-14T14:32:20'</span><span class="p">,(</span><span class="s1">'Author'</span><span class="p">),(</span><span class="s1">'Open CASCADE'</span><span class="p">),</span><span class="s1">'Open CASCADE STEP processor 7.1'</span><span class="p">,</span><span class="s1">'Open CASCADE 7.1'</span><span class="p">,</span><span class="s1">'Unknown'</span><span class="p">)</span>
|
||||
<span class="n">FILE_SCHEMA</span><span class="p">((</span><span class="s1">'AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }'</span><span class="p">))</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="function">
|
||||
<dt id="pylib.data_step.str_to_cmd_args">
|
||||
<code class="sig-name descname">str_to_cmd_args</code><span class="sig-paren">(</span><em class="sig-param">cmd_str</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/data_step.html#str_to_cmd_args"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.data_step.str_to_cmd_args" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Using negative lookahead to match all the commas which are not
|
||||
inside a parenthesis and then split the string at the commas.</p>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Example</dt>
|
||||
<dd class="field-odd"><p></p></dd>
|
||||
</dl>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">CARTESIAN_POINT</span><span class="p">(</span><span class="s1">''</span><span class="p">,(</span><span class="mf">0.E+000</span><span class="p">,</span><span class="mf">0.E+000</span><span class="p">,</span><span class="mf">0.E+000</span><span class="p">))</span>
|
||||
<span class="n">will</span> <span class="n">become</span>
|
||||
<span class="n">command</span> <span class="o">=</span> <span class="s1">'CARTESIAN_POINT'</span>
|
||||
<span class="n">arguments</span> <span class="o">=</span> <span class="p">[</span><span class="s1">''</span><span class="p">,</span> <span class="s1">'(0.E+000,0.E+000,0.E+000)'</span><span class="p">]</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</dd></dl>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
||||
<div class="sphinxsidebarwrapper">
|
||||
<h1 class="logo"><a href="index.html">pylib</a></h1>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<h3>Navigation</h3>
|
||||
<p class="caption"><span class="caption-text">Contents:</span></p>
|
||||
<ul class="current">
|
||||
<li class="toctree-l1 current"><a class="reference internal" href="modules.html">pylib</a><ul class="current">
|
||||
<li class="toctree-l2 current"><a class="reference internal" href="pylib.html">pylib package</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<div class="relations">
|
||||
<h3>Related Topics</h3>
|
||||
<ul>
|
||||
<li><a href="index.html">Documentation overview</a><ul>
|
||||
<li><a href="modules.html">pylib</a><ul>
|
||||
<li><a href="pylib.html">pylib package</a><ul>
|
||||
<li>Previous: <a href="pylib.data.html" title="previous chapter">pylib.data module</a></li>
|
||||
<li>Next: <a href="pylib.data_step_std.html" title="next chapter">pylib.data_step_std module</a></li>
|
||||
</ul></li>
|
||||
</ul></li>
|
||||
</ul></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="searchbox" style="display: none" role="search">
|
||||
<h3 id="searchlabel">Quick search</h3>
|
||||
<div class="searchformwrapper">
|
||||
<form class="search" action="search.html" method="get">
|
||||
<input type="text" name="q" aria-labelledby="searchlabel" />
|
||||
<input type="submit" value="Go" />
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">$('#searchbox').show(0);</script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
</div>
|
||||
<div class="footer">
|
||||
©2019, Daniel Weschke.
|
||||
|
||||
|
|
||||
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.1</a>
|
||||
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
||||
|
||||
|
|
||||
<a href="_sources/pylib.data_step.rst.txt"
|
||||
rel="nofollow">Page source</a>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
1021
docs/build/html/pylib.data_step_std.html
vendored
Normal file
1021
docs/build/html/pylib.data_step_std.html
vendored
Normal file
File diff suppressed because it is too large
Load Diff
4
docs/build/html/pylib.date.html
vendored
4
docs/build/html/pylib.date.html
vendored
@@ -17,7 +17,7 @@
|
||||
<link rel="index" title="Index" href="genindex.html" />
|
||||
<link rel="search" title="Search" href="search.html" />
|
||||
<link rel="next" title="pylib.drawblock module" href="pylib.drawblock.html" />
|
||||
<link rel="prev" title="pylib.data module" href="pylib.data.html" />
|
||||
<link rel="prev" title="pylib.data_step_std module" href="pylib.data_step_std.html" />
|
||||
|
||||
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
|
||||
|
||||
@@ -194,7 +194,7 @@
|
||||
<li><a href="index.html">Documentation overview</a><ul>
|
||||
<li><a href="modules.html">pylib</a><ul>
|
||||
<li><a href="pylib.html">pylib package</a><ul>
|
||||
<li>Previous: <a href="pylib.data.html" title="previous chapter">pylib.data module</a></li>
|
||||
<li>Previous: <a href="pylib.data_step_std.html" title="previous chapter">pylib.data_step_std module</a></li>
|
||||
<li>Next: <a href="pylib.drawblock.html" title="next chapter">pylib.drawblock module</a></li>
|
||||
</ul></li>
|
||||
</ul></li>
|
||||
|
||||
235
docs/build/html/pylib.function.html
vendored
235
docs/build/html/pylib.function.html
vendored
@@ -42,7 +42,163 @@
|
||||
<dd class="field-odd"><p>2019-11-15</p>
|
||||
</dd>
|
||||
</dl>
|
||||
<span class="target" id="module-function"></span><dl class="function">
|
||||
<span class="target" id="module-function"></span><p>Functions returns function to apply conditions.</p>
|
||||
<dl class="function">
|
||||
<dt id="pylib.function.b_spline_basis">
|
||||
<code class="sig-name descname">b_spline_basis</code><span class="sig-paren">(</span><em class="sig-param">knots</em>, <em class="sig-param">knot_span</em>, <em class="sig-param">degree</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/function.html#b_spline_basis"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.function.b_spline_basis" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Cox-de Boor algorithm / recursion formula.</p>
|
||||
<p>Calculate the i-th B-spline basis function of degree p: N_{i,p}(u)</p>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Parameters</dt>
|
||||
<dd class="field-odd"><ul class="simple">
|
||||
<li><p><strong>knots</strong> (<em>list</em>) – Knot vector U. m + 1 non-decreasing numbers / knots,
|
||||
<span class="math notranslate nohighlight">\(u_0 <= u_1 <= u_2 <= ... <= u_m\)</span></p></li>
|
||||
<li><p><strong>knot_span</strong> (<em>int</em>) – i-th knot span</p></li>
|
||||
<li><p><strong>degree</strong> (<em>int</em>) – degree of B-spline basis function</p></li>
|
||||
</ul>
|
||||
</dd>
|
||||
<dt class="field-even">Returns</dt>
|
||||
<dd class="field-even"><p>B-spline basis function using variable, u in [u_0, u_m]</p>
|
||||
</dd>
|
||||
<dt class="field-odd">Return type</dt>
|
||||
<dd class="field-odd"><p>function</p>
|
||||
</dd>
|
||||
</dl>
|
||||
<div class="math notranslate nohighlight">
|
||||
\[\begin{split}N_{i,0}(u) &= \begin{cases} 1 & \text{if } u_i \le u \lt u_{i+1} \\
|
||||
0 & \text{otherwise}\end{cases} \\
|
||||
N_{i,p}(u) &= \frac{u - u_i}{u_{i+p} - u_i} N_{i,p-1}(u) +
|
||||
\frac{u_{i+p+1} - u}{u_{i+p+1} - u_{i+1}} N_{i+1,p-1}(u)\end{split}\]</div>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="function">
|
||||
<dt id="pylib.function.b_spline_curve_with_knots">
|
||||
<code class="sig-name descname">b_spline_curve_with_knots</code><span class="sig-paren">(</span><em class="sig-param">degree</em>, <em class="sig-param">control_points</em>, <em class="sig-param">knots</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/function.html#b_spline_curve_with_knots"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.function.b_spline_curve_with_knots" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>B-spline curve of degree p (order + 1) on a given set of knots.</p>
|
||||
<p>n, m and p must satisfy m = n + p + 1.</p>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Parameters</dt>
|
||||
<dd class="field-odd"><ul class="simple">
|
||||
<li><p><strong>degree</strong> (<em>int</em>) – degree of B-spline basis functions</p></li>
|
||||
<li><p><strong>control_points</strong> (<em>list</em>) – control points P, n + 1 control points</p></li>
|
||||
<li><p><strong>knots</strong> (<em>list</em>) – Knot vector U. m + 1 non-decreasing numbers / knots,
|
||||
<span class="math notranslate nohighlight">\(u_0 <= u_1 <= u_2 <= ... <= u_m\)</span></p></li>
|
||||
</ul>
|
||||
</dd>
|
||||
<dt class="field-even">Returns</dt>
|
||||
<dd class="field-even"><p>B-spline curve using variable, u in [u_0, u_m]</p>
|
||||
</dd>
|
||||
<dt class="field-odd">Return type</dt>
|
||||
<dd class="field-odd"><p>function</p>
|
||||
</dd>
|
||||
</dl>
|
||||
<div class="math notranslate nohighlight">
|
||||
\[\mathbf{C}_p(u) = \sum\limits_{i=0}^{n} N_{i,p}(u) \mathbf{P}_i\]</div>
|
||||
<ul class="simple">
|
||||
<li><p>open B-spline curves</p>
|
||||
<ul>
|
||||
<li><p>the curve will not touch the first and last legs of the
|
||||
control polyline</p></li>
|
||||
<li><p>the knot vector does not have any particular structure</p></li>
|
||||
<li><p>for degree p, intervals [u_0, u_p) and [u_{n-p}, u_n) will not
|
||||
have “full support” of basis functions and are ignored when a
|
||||
B-spline curve is open. For open B-spline curves, the domain
|
||||
is inteval [u_p, u_{n-p}]</p></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><p>clamped B-spline curves, nonperiodic B-spline curves</p>
|
||||
<ul>
|
||||
<li><p>the curve is tangent to the first and the last legs just like
|
||||
a Bézier curve</p></li>
|
||||
<li><p>the first knot and the last knot must be repeated p+1 times
|
||||
(i. e., of multiplicity p+1)</p></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><p>closed B-spline curves</p>
|
||||
<ul>
|
||||
<li><p>the start and the end of the generated curve join together
|
||||
forming a closed loop</p></li>
|
||||
<li><p>repeating some knots and control points # TODO: which?</p></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><p>uniform B-spline curves</p>
|
||||
<ul>
|
||||
<li><p>internal knots are equally spaced</p></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><p>Bézier curves</p>
|
||||
<ul>
|
||||
<li><p>a B-spline with no internal knots.</p></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="admonition seealso">
|
||||
<p class="admonition-title">See also</p>
|
||||
<p><a class="reference internal" href="#pylib.function.b_spline_knots" title="pylib.function.b_spline_knots"><code class="xref py py-meth docutils literal notranslate"><span class="pre">b_spline_knots()</span></code></a></p>
|
||||
</div>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="function">
|
||||
<dt id="pylib.function.b_spline_knots">
|
||||
<code class="sig-name descname">b_spline_knots</code><span class="sig-paren">(</span><em class="sig-param">control_point_spans</em>, <em class="sig-param">degree=3</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/function.html#b_spline_knots"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.function.b_spline_knots" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>B-spline knots to generate a clamped uniform B-spline curve
|
||||
of degree p (order + 1).</p>
|
||||
<p>The internal knots are equally spaced (uniform B-spline curve)</p>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Parameters</dt>
|
||||
<dd class="field-odd"><ul class="simple">
|
||||
<li><p><strong>control_point_spans</strong> (<em>int</em>) – number of control points + 1</p></li>
|
||||
<li><p><strong>degree</strong> (<em>int</em>) – degree of B-spline basis functions (default = 3)</p></li>
|
||||
</ul>
|
||||
</dd>
|
||||
<dt class="field-even">Returns</dt>
|
||||
<dd class="field-even"><p>knot vector</p>
|
||||
</dd>
|
||||
<dt class="field-odd">Return type</dt>
|
||||
<dd class="field-odd"><p>tuple</p>
|
||||
</dd>
|
||||
</dl>
|
||||
<div class="admonition seealso">
|
||||
<p class="admonition-title">See also</p>
|
||||
<p><a class="reference internal" href="#pylib.function.b_spline_curve_with_knots" title="pylib.function.b_spline_curve_with_knots"><code class="xref py py-meth docutils literal notranslate"><span class="pre">b_spline_curve_with_knots()</span></code></a></p>
|
||||
</div>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="function">
|
||||
<dt id="pylib.function.circle">
|
||||
<code class="sig-name descname">circle</code><span class="sig-paren">(</span><em class="sig-param">r</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/function.html#circle"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.function.circle" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Circle</p>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Parameters</dt>
|
||||
<dd class="field-odd"><p><strong>r</strong> (<em>float</em>) – radius of the circle</p>
|
||||
</dd>
|
||||
<dt class="field-even">Results</dt>
|
||||
<dd class="field-even"><p>functions for x of theta and y of theta and the interval</p>
|
||||
</dd>
|
||||
<dt class="field-odd">Return type</dt>
|
||||
<dd class="field-odd"><p>tuple</p>
|
||||
</dd>
|
||||
</dl>
|
||||
<div class="math notranslate nohighlight">
|
||||
\[\begin{split}x(\theta) = r\cos\theta \\
|
||||
y(\theta) = r\sin\theta \\
|
||||
\theta = \left[0, 2\pi\right]\end{split}\]</div>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span> <span class="o">*</span> <span class="o">*</span>
|
||||
<span class="o">*</span> <span class="n">r</span> <span class="o">*</span>
|
||||
<span class="o">*</span> <span class="o">*</span>
|
||||
<span class="o">*</span> <span class="o">*</span>
|
||||
<span class="o">*</span> <span class="o">*</span>
|
||||
<span class="o">*</span> <span class="o">*</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">circle</span><span class="p">(</span><span class="mi">20</span><span class="p">)[:</span><span class="mi">2</span><span class="p">]</span>
|
||||
<span class="gp">>>> </span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="n">circle</span><span class="p">(</span><span class="mi">20</span><span class="p">)</span>
|
||||
<span class="gp">>>> </span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">interval</span> <span class="o">=</span> <span class="n">circle</span><span class="p">(</span><span class="mi">20</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="function">
|
||||
<dt id="pylib.function.cosine_wave">
|
||||
<code class="sig-name descname">cosine_wave</code><span class="sig-paren">(</span><em class="sig-param">A=1</em>, <em class="sig-param">k=1</em>, <em class="sig-param">f=1</em>, <em class="sig-param">phi=0</em>, <em class="sig-param">D=0</em>, <em class="sig-param">degree=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/function.html#cosine_wave"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.function.cosine_wave" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>A cosine wave is said to be sinusoidal, because,
|
||||
@@ -67,6 +223,9 @@ interpreted in degrees.</p></li>
|
||||
<dd class="field-even"><p>sine wave function of spatial variable x and optional
|
||||
time t</p>
|
||||
</dd>
|
||||
<dt class="field-odd">Return type</dt>
|
||||
<dd class="field-odd"><p>function</p>
|
||||
</dd>
|
||||
</dl>
|
||||
<div class="admonition seealso">
|
||||
<p class="admonition-title">See also</p>
|
||||
@@ -74,6 +233,43 @@ time t</p>
|
||||
</div>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="function">
|
||||
<dt id="pylib.function.ellipse">
|
||||
<code class="sig-name descname">ellipse</code><span class="sig-paren">(</span><em class="sig-param">a</em>, <em class="sig-param">b</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/function.html#ellipse"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.function.ellipse" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Ellipse</p>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Parameters</dt>
|
||||
<dd class="field-odd"><ul class="simple">
|
||||
<li><p><strong>a</strong> (<em>float</em>) – semi-major axis</p></li>
|
||||
<li><p><strong>b</strong> (<em>float</em>) – semi-minor axis</p></li>
|
||||
</ul>
|
||||
</dd>
|
||||
<dt class="field-even">Results</dt>
|
||||
<dd class="field-even"><p>functions for x of theta and y of theta and the interval</p>
|
||||
</dd>
|
||||
<dt class="field-odd">Return type</dt>
|
||||
<dd class="field-odd"><p>tuple</p>
|
||||
</dd>
|
||||
</dl>
|
||||
<div class="math notranslate nohighlight">
|
||||
\[\begin{split}x(\theta) = a\cos\theta \\
|
||||
y(\theta) = b\sin\theta \\
|
||||
\theta = \left[0, 2\pi\right]\end{split}\]</div>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span> <span class="o">*</span> <span class="o">.*</span>
|
||||
<span class="o">*</span> <span class="n">b</span> <span class="p">:</span> <span class="o">*</span>
|
||||
<span class="o">*</span> <span class="p">:</span><span class="o">......*</span>
|
||||
<span class="o">*</span> <span class="n">a</span> <span class="o">*</span>
|
||||
<span class="o">*</span> <span class="o">*</span>
|
||||
<span class="o">*</span> <span class="o">*</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">ellipse</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="mi">5</span><span class="p">)[:</span><span class="mi">2</span><span class="p">]</span>
|
||||
<span class="gp">>>> </span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="n">ellipse</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span>
|
||||
<span class="gp">>>> </span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">interval</span> <span class="o">=</span> <span class="n">ellipse</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="function">
|
||||
<dt id="pylib.function.epitrochoid">
|
||||
<code class="sig-name descname">epitrochoid</code><span class="sig-paren">(</span><em class="sig-param">R</em>, <em class="sig-param">r</em>, <em class="sig-param">d</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/function.html#epitrochoid"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.function.epitrochoid" title="Permalink to this definition">¶</a></dt>
|
||||
@@ -93,7 +289,7 @@ circle of radius R.</p>
|
||||
<dd class="field-even"><p>float</p>
|
||||
</dd>
|
||||
<dt class="field-odd">Results</dt>
|
||||
<dd class="field-odd"><p>functions for x of theta and y of theta</p>
|
||||
<dd class="field-odd"><p>functions for x of theta and y of theta and the interval</p>
|
||||
</dd>
|
||||
<dt class="field-even">Return type</dt>
|
||||
<dd class="field-even"><p>tuple</p>
|
||||
@@ -108,7 +304,7 @@ y(\theta) = (R + r)\sin\theta - d\sin\left(\frac{R+r}{r}\theta\right) \\
|
||||
<span class="o">*</span> <span class="o">*</span>
|
||||
<span class="o">*</span> <span class="o">*</span> <span class="o">*</span> <span class="o">*</span>
|
||||
<span class="o">*</span> <span class="o">*</span> <span class="o">*</span> <span class="n">r</span> <span class="o">*</span>
|
||||
<span class="o">*</span> <span class="o">**</span> <span class="o">....</span> <span class="o">*</span>
|
||||
<span class="o">*</span> <span class="o">**</span> <span class="o">..</span><span class="p">,</span> <span class="o">*</span>
|
||||
<span class="o">*</span> <span class="o">**</span> <span class="n">d</span> <span class="o">*</span>
|
||||
<span class="o">*</span> <span class="o">*</span> <span class="o">*</span> <span class="o">*</span>
|
||||
<span class="o">*</span> <span class="o">*</span> <span class="o">*</span> <span class="o">*</span>
|
||||
@@ -117,8 +313,9 @@ y(\theta) = (R + r)\sin\theta - d\sin\left(\frac{R+r}{r}\theta\right) \\
|
||||
<span class="o">*</span> <span class="o">*</span> <span class="o">*</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">epitrochoid</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">)[:</span><span class="mi">1</span><span class="p">]</span>
|
||||
<span class="gp">>>> </span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">theta_end</span> <span class="o">=</span> <span class="n">epitrochoid</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">)</span>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">epitrochoid</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">)[:</span><span class="mi">2</span><span class="p">]</span>
|
||||
<span class="gp">>>> </span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="n">epitrochoid</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">)</span>
|
||||
<span class="gp">>>> </span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">interval</span> <span class="o">=</span> <span class="n">epitrochoid</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</dd></dl>
|
||||
@@ -142,7 +339,7 @@ circle of radius R.</p>
|
||||
<dd class="field-even"><p>float</p>
|
||||
</dd>
|
||||
<dt class="field-odd">Results</dt>
|
||||
<dd class="field-odd"><p>functions for x of theta and y of theta</p>
|
||||
<dd class="field-odd"><p>functions for x of theta and y of theta and the interval</p>
|
||||
</dd>
|
||||
<dt class="field-even">Return type</dt>
|
||||
<dd class="field-even"><p>tuple</p>
|
||||
@@ -157,7 +354,7 @@ y(\theta) = (R - r)\sin\theta - d\sin\left(\frac{R-r}{r}\theta\right) \\
|
||||
<span class="o">*</span> <span class="o">*</span>
|
||||
<span class="o">*</span> <span class="o">*</span> <span class="o">*</span> <span class="o">*</span>
|
||||
<span class="o">*</span> <span class="o">*</span> <span class="n">r</span> <span class="o">**</span>
|
||||
<span class="o">*</span> <span class="o">*</span> <span class="o">....</span> <span class="o">*</span>
|
||||
<span class="o">*</span> <span class="o">*</span> <span class="p">,</span><span class="o">..</span> <span class="o">*</span>
|
||||
<span class="o">*</span> <span class="o">*</span> <span class="n">d</span> <span class="o">*</span>
|
||||
<span class="o">*</span> <span class="o">*</span> <span class="o">**</span>
|
||||
<span class="o">*</span> <span class="o">*</span> <span class="o">*</span> <span class="o">*</span>
|
||||
@@ -166,8 +363,9 @@ y(\theta) = (R - r)\sin\theta - d\sin\left(\frac{R-r}{r}\theta\right) \\
|
||||
<span class="o">*</span> <span class="o">*</span> <span class="o">*</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">hyotrochoid</span><span class="p">(</span><span class="mi">20</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">6</span><span class="p">)[:</span><span class="mi">1</span><span class="p">]</span>
|
||||
<span class="gp">>>> </span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">theta_end</span> <span class="o">=</span> <span class="n">hyotrochoid</span><span class="p">(</span><span class="mi">20</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">6</span><span class="p">)</span>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">hyotrochoid</span><span class="p">(</span><span class="mi">20</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">6</span><span class="p">)[:</span><span class="mi">2</span><span class="p">]</span>
|
||||
<span class="gp">>>> </span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="n">hyotrochoid</span><span class="p">(</span><span class="mi">20</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">6</span><span class="p">)</span>
|
||||
<span class="gp">>>> </span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">interval</span> <span class="o">=</span> <span class="n">hyotrochoid</span><span class="p">(</span><span class="mi">20</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">6</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<div class="admonition seealso">
|
||||
@@ -176,6 +374,16 @@ y(\theta) = (R - r)\sin\theta - d\sin\left(\frac{R-r}{r}\theta\right) \\
|
||||
</div>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="function">
|
||||
<dt id="pylib.function.sample_half_open">
|
||||
<code class="sig-name descname">sample_half_open</code><span class="sig-paren">(</span><em class="sig-param">f</em>, <em class="sig-param">a</em>, <em class="sig-param">b</em>, <em class="sig-param">n=50</em>, <em class="sig-param">endpoint_epsilon=1e-07</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/function.html#sample_half_open"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.function.sample_half_open" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="function">
|
||||
<dt id="pylib.function.sample_half_open_seq">
|
||||
<code class="sig-name descname">sample_half_open_seq</code><span class="sig-paren">(</span><em class="sig-param">f</em>, <em class="sig-param">x</em>, <em class="sig-param">endpoint_epsilon=1e-07</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/function.html#sample_half_open_seq"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.function.sample_half_open_seq" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="function">
|
||||
<dt id="pylib.function.sine_wave">
|
||||
<code class="sig-name descname">sine_wave</code><span class="sig-paren">(</span><em class="sig-param">A=1</em>, <em class="sig-param">k=1</em>, <em class="sig-param">f=1</em>, <em class="sig-param">phi=0</em>, <em class="sig-param">D=0</em>, <em class="sig-param">degree=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/function.html#sine_wave"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.function.sine_wave" title="Permalink to this definition">¶</a></dt>
|
||||
@@ -198,11 +406,14 @@ interpreted in degrees.</p></li>
|
||||
<dd class="field-even"><p>sine wave function of spatial variable x and optional
|
||||
time t</p>
|
||||
</dd>
|
||||
<dt class="field-odd">Return type</dt>
|
||||
<dd class="field-odd"><p>function</p>
|
||||
</dd>
|
||||
</dl>
|
||||
<p>In general, the function is:</p>
|
||||
<div class="math notranslate nohighlight">
|
||||
\[\begin{split}y(x,t) = A\sin(kx + 2\pi f t + \varphi) + D \\
|
||||
y(x,t) = A\sin(kx + \omega t + \varphi) + D\end{split}\]</div>
|
||||
\[\begin{split}y(x,t) = A\sin(kx + \omega t + \varphi) + D \\
|
||||
y(x,t) = A\sin(kx + 2\pi f t + \varphi) + D\end{split}\]</div>
|
||||
<p>where:</p>
|
||||
<blockquote>
|
||||
<div><ul class="simple">
|
||||
@@ -246,7 +457,7 @@ which are normed to the range of [0, 1] to</p>
|
||||
<li><p><strong>h</strong> (<em>int</em>) – number of chars in vertical direction</p></li>
|
||||
<li><p><strong>w</strong> (<em>int</em>) – number of chars in horizontal direction</p></li>
|
||||
<li><p><strong>char_set</strong> (<em>str</em>) – either “braille” or “block”. “braille” uses Unicode
|
||||
Characters in the Braille Patterns Block (fisrt index U+2800, last
|
||||
Characters in the Braille Patterns Block (first index U+2800, last
|
||||
index U+28FF <a class="reference internal" href="#cudb" id="id1"><span>[CUDB]</span></a>) and the “block” uses part of the Unicode
|
||||
Characters in the Block Elements Block (fisrt index U+2580, last
|
||||
index U+259F <a class="reference internal" href="#cudb" id="id2"><span>[CUDB]</span></a>). Alias for braille is line and alias for
|
||||
|
||||
244
docs/build/html/pylib.geometry.html
vendored
244
docs/build/html/pylib.geometry.html
vendored
@@ -42,16 +42,47 @@
|
||||
<dd class="field-odd"><p>2019-12-21</p>
|
||||
</dd>
|
||||
</dl>
|
||||
<span class="target" id="module-geometry"></span><div class="section" id="affine-transforms">
|
||||
<h2>Affine transforms<a class="headerlink" href="#affine-transforms" title="Permalink to this headline">¶</a></h2>
|
||||
<span class="target" id="module-geometry"></span><p class="rubric">Affine transforms</p>
|
||||
<p>Functions in augmented space, in homogenous coordinates.
|
||||
Points are augment to 4 dimensions, by adding a dummy coordinate.
|
||||
For points the dummy coordinate is always normalized to 1.
|
||||
With homogenous coordinates translation of points is repesentable
|
||||
as a linear transformation.</p>
|
||||
<dl class="class">
|
||||
<dt id="pylib.geometry.ArcBSplineCurveWithKnots">
|
||||
<em class="property">class </em><code class="sig-name descname">ArcBSplineCurveWithKnots</code><span class="sig-paren">(</span><em class="sig-param">degree</em>, <em class="sig-param">control_points</em>, <em class="sig-param">knot_multiplicities</em>, <em class="sig-param">knots</em>, <em class="sig-param">start</em>, <em class="sig-param">end</em>, <em class="sig-param">n=5</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#ArcBSplineCurveWithKnots"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.ArcBSplineCurveWithKnots" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Bases: <a class="reference internal" href="#pylib.geometry.Polyline" title="pylib.geometry.Polyline"><code class="xref py py-class docutils literal notranslate"><span class="pre">pylib.geometry.Polyline</span></code></a></p>
|
||||
<p>B-spline curve with knots, an open wireframe object in local
|
||||
coordinate system</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="class">
|
||||
<dt id="pylib.geometry.ArcCircle">
|
||||
<em class="property">class </em><code class="sig-name descname">ArcCircle</code><span class="sig-paren">(</span><em class="sig-param">radius=1</em>, <em class="sig-param">ang1=0</em>, <em class="sig-param">ang2=1.5707963267948966</em>, <em class="sig-param">n=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#ArcCircle"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.ArcCircle" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Bases: <a class="reference internal" href="#pylib.geometry.Polyline" title="pylib.geometry.Polyline"><code class="xref py py-class docutils literal notranslate"><span class="pre">pylib.geometry.Polyline</span></code></a></p>
|
||||
<p>Arc of a circle, an open wireframe object in local coordinate
|
||||
system</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="class">
|
||||
<dt id="pylib.geometry.ArcEllipse">
|
||||
<em class="property">class </em><code class="sig-name descname">ArcEllipse</code><span class="sig-paren">(</span><em class="sig-param">a=1</em>, <em class="sig-param">b=1</em>, <em class="sig-param">ang1=0</em>, <em class="sig-param">ang2=1.5707963267948966</em>, <em class="sig-param">n=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#ArcEllipse"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.ArcEllipse" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Bases: <a class="reference internal" href="#pylib.geometry.Polyline" title="pylib.geometry.Polyline"><code class="xref py py-class docutils literal notranslate"><span class="pre">pylib.geometry.Polyline</span></code></a></p>
|
||||
<p>Arc of an ellipse, an open wireframe object in local
|
||||
coordinate system</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="class">
|
||||
<dt id="pylib.geometry.B_spline_curve_with_knots">
|
||||
<em class="property">class </em><code class="sig-name descname">B_spline_curve_with_knots</code><span class="sig-paren">(</span><em class="sig-param">degree</em>, <em class="sig-param">control_points</em>, <em class="sig-param">knot_multiplicities</em>, <em class="sig-param">knots</em>, <em class="sig-param">n=5</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#B_spline_curve_with_knots"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.B_spline_curve_with_knots" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Bases: <a class="reference internal" href="#pylib.geometry.Polyline" title="pylib.geometry.Polyline"><code class="xref py py-class docutils literal notranslate"><span class="pre">pylib.geometry.Polyline</span></code></a></p>
|
||||
<p>B-spline curve with knots, an open wireframe object in local
|
||||
coordinate system</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="class">
|
||||
<dt id="pylib.geometry.CS">
|
||||
<em class="property">class </em><code class="sig-name descname">CS</code><span class="sig-paren">(</span><em class="sig-param">x=[1, 0, 0], y=[0, 1, 0], z=[0, 0, 1]</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#CS"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.CS" title="Permalink to this definition">¶</a></dt>
|
||||
<em class="property">class </em><code class="sig-name descname">CS</code><span class="sig-paren">(</span><em class="sig-param">x=vector([1</em>, <em class="sig-param">0</em>, <em class="sig-param">0</em>, <em class="sig-param">0])</em>, <em class="sig-param">y=vector([0</em>, <em class="sig-param">1</em>, <em class="sig-param">0</em>, <em class="sig-param">0])</em>, <em class="sig-param">z=vector([0</em>, <em class="sig-param">0</em>, <em class="sig-param">1</em>, <em class="sig-param">0])</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#CS"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.CS" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Bases: <a class="reference internal" href="pylib.mathematics.html#pylib.mathematics.matrix" title="pylib.mathematics.matrix"><code class="xref py py-class docutils literal notranslate"><span class="pre">pylib.mathematics.matrix</span></code></a></p>
|
||||
<p>Coordinate system</p>
|
||||
<dl class="method">
|
||||
@@ -60,33 +91,38 @@ as a linear transformation.</p>
|
||||
<dd><p>Get coordinates in 3d space</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.geometry.CS.init_xyz">
|
||||
<em class="property">classmethod </em><code class="sig-name descname">init_xyz</code><span class="sig-paren">(</span><em class="sig-param">x=[1, 0, 0], y=[0, 1, 0], z=[0, 0, 1]</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#CS.init_xyz"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.CS.init_xyz" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.geometry.CS.x90">
|
||||
<em class="property">static </em><code class="sig-name descname">x90</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#CS.x90"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.CS.x90" title="Permalink to this definition">¶</a></dt>
|
||||
<em class="property">classmethod </em><code class="sig-name descname">x90</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#CS.x90"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.CS.x90" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.geometry.CS.xm90">
|
||||
<em class="property">static </em><code class="sig-name descname">xm90</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#CS.xm90"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.CS.xm90" title="Permalink to this definition">¶</a></dt>
|
||||
<em class="property">classmethod </em><code class="sig-name descname">xm90</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#CS.xm90"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.CS.xm90" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.geometry.CS.y90">
|
||||
<em class="property">static </em><code class="sig-name descname">y90</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#CS.y90"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.CS.y90" title="Permalink to this definition">¶</a></dt>
|
||||
<em class="property">classmethod </em><code class="sig-name descname">y90</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#CS.y90"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.CS.y90" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.geometry.CS.ym90">
|
||||
<em class="property">static </em><code class="sig-name descname">ym90</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#CS.ym90"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.CS.ym90" title="Permalink to this definition">¶</a></dt>
|
||||
<em class="property">classmethod </em><code class="sig-name descname">ym90</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#CS.ym90"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.CS.ym90" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<dl class="class">
|
||||
<dt id="pylib.geometry.Circle">
|
||||
<em class="property">class </em><code class="sig-name descname">Circle</code><span class="sig-paren">(</span><em class="sig-param">radius=1</em>, <em class="sig-param">n=10</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Circle"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Circle" title="Permalink to this definition">¶</a></dt>
|
||||
<em class="property">class </em><code class="sig-name descname">Circle</code><span class="sig-paren">(</span><em class="sig-param">radius=1</em>, <em class="sig-param">n=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Circle"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Circle" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Bases: <a class="reference internal" href="#pylib.geometry.Polygon" title="pylib.geometry.Polygon"><code class="xref py py-class docutils literal notranslate"><span class="pre">pylib.geometry.Polygon</span></code></a></p>
|
||||
<p>Circle a closed wireframe object in local coordinate system</p>
|
||||
<p>Circle, a closed wireframe object in local coordinate system</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="class">
|
||||
@@ -94,6 +130,25 @@ as a linear transformation.</p>
|
||||
<em class="property">class </em><code class="sig-name descname">Direction</code><span class="sig-paren">(</span><em class="sig-param">x=1</em>, <em class="sig-param">y=0</em>, <em class="sig-param">z=0</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Direction"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Direction" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Bases: <a class="reference internal" href="pylib.mathematics.html#pylib.mathematics.vector" title="pylib.mathematics.vector"><code class="xref py py-class docutils literal notranslate"><span class="pre">pylib.mathematics.vector</span></code></a></p>
|
||||
<p>Direction in local coordinate system</p>
|
||||
<dl class="method">
|
||||
<dt id="pylib.geometry.Direction.cross">
|
||||
<em class="property">classmethod </em><code class="sig-name descname">cross</code><span class="sig-paren">(</span><em class="sig-param">a</em>, <em class="sig-param">b</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Direction.cross"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Direction.cross" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Cross product</p>
|
||||
<dl class="field-list simple">
|
||||
</dl>
|
||||
<p>c is orthogonal to both a and b.
|
||||
The direction of c can be found with the right-hand rule.</p>
|
||||
<div class="math notranslate nohighlight">
|
||||
\[\mathbf{c} = \mathbf{a} \times \mathbf{b}\]</div>
|
||||
</dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<dl class="class">
|
||||
<dt id="pylib.geometry.Ellipse">
|
||||
<em class="property">class </em><code class="sig-name descname">Ellipse</code><span class="sig-paren">(</span><em class="sig-param">a=1</em>, <em class="sig-param">b=1</em>, <em class="sig-param">n=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Ellipse"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Ellipse" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Bases: <a class="reference internal" href="#pylib.geometry.Polygon" title="pylib.geometry.Polygon"><code class="xref py py-class docutils literal notranslate"><span class="pre">pylib.geometry.Polygon</span></code></a></p>
|
||||
<p>Circle, a closed wireframe object in local coordinate system</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="class">
|
||||
@@ -106,8 +161,8 @@ as a linear transformation.</p>
|
||||
<dl class="class">
|
||||
<dt id="pylib.geometry.Line">
|
||||
<em class="property">class </em><code class="sig-name descname">Line</code><span class="sig-paren">(</span><em class="sig-param">point1=vector([-1</em>, <em class="sig-param">0</em>, <em class="sig-param">0</em>, <em class="sig-param">1])</em>, <em class="sig-param">point2=vector([1</em>, <em class="sig-param">0</em>, <em class="sig-param">0</em>, <em class="sig-param">1])</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Line"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Line" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Bases: <a class="reference internal" href="#pylib.geometry.Wireframe" title="pylib.geometry.Wireframe"><code class="xref py py-class docutils literal notranslate"><span class="pre">pylib.geometry.Wireframe</span></code></a></p>
|
||||
<p>Line a open wireframe object in local coordinate system</p>
|
||||
<dd><p>Bases: <a class="reference internal" href="#pylib.geometry.Polyline" title="pylib.geometry.Polyline"><code class="xref py py-class docutils literal notranslate"><span class="pre">pylib.geometry.Polyline</span></code></a></p>
|
||||
<p>Line, an open wireframe object in local coordinate system</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="class">
|
||||
@@ -126,10 +181,95 @@ as a linear transformation.</p>
|
||||
<dl class="class">
|
||||
<dt id="pylib.geometry.Polygon">
|
||||
<em class="property">class </em><code class="sig-name descname">Polygon</code><span class="sig-paren">(</span><em class="sig-param">*points</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Polygon"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Polygon" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Bases: <a class="reference internal" href="#pylib.geometry.Wireframe" title="pylib.geometry.Wireframe"><code class="xref py py-class docutils literal notranslate"><span class="pre">pylib.geometry.Wireframe</span></code></a></p>
|
||||
<dd><p>Bases: <a class="reference internal" href="#pylib.geometry.Polyline" title="pylib.geometry.Polyline"><code class="xref py py-class docutils literal notranslate"><span class="pre">pylib.geometry.Polyline</span></code></a></p>
|
||||
<p>Polygon as closed wireframe object in local coordinate system</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="class">
|
||||
<dt id="pylib.geometry.Polyline">
|
||||
<em class="property">class </em><code class="sig-name descname">Polyline</code><span class="sig-paren">(</span><em class="sig-param">*points</em>, <em class="sig-param">closed=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Polyline"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Polyline" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
|
||||
<p>Open and closed wireframe object in local coordinate system</p>
|
||||
<p>This class create its own points (copy).</p>
|
||||
<dl class="method">
|
||||
<dt id="pylib.geometry.Polyline.__iter__">
|
||||
<code class="sig-name descname">__iter__</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Polyline.__iter__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Polyline.__iter__" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Returns the Iterator object</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.geometry.Polyline.__repr__">
|
||||
<code class="sig-name descname">__repr__</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Polyline.__repr__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Polyline.__repr__" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Return repr(self).</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.geometry.Polyline.__str__">
|
||||
<code class="sig-name descname">__str__</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Polyline.__str__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Polyline.__str__" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Return str(self).</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.geometry.Polyline.ch_cs">
|
||||
<code class="sig-name descname">ch_cs</code><span class="sig-paren">(</span><em class="sig-param">cs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Polyline.ch_cs"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Polyline.ch_cs" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.geometry.Polyline.points">
|
||||
<code class="sig-name descname">points</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Polyline.points"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Polyline.points" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Get coordinates in 3d space</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.geometry.Polyline.rotate_x">
|
||||
<code class="sig-name descname">rotate_x</code><span class="sig-paren">(</span><em class="sig-param">theta</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Polyline.rotate_x"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Polyline.rotate_x" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.geometry.Polyline.rotate_y">
|
||||
<code class="sig-name descname">rotate_y</code><span class="sig-paren">(</span><em class="sig-param">theta</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Polyline.rotate_y"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Polyline.rotate_y" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.geometry.Polyline.rotate_z">
|
||||
<code class="sig-name descname">rotate_z</code><span class="sig-paren">(</span><em class="sig-param">theta</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Polyline.rotate_z"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Polyline.rotate_z" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.geometry.Polyline.scale">
|
||||
<code class="sig-name descname">scale</code><span class="sig-paren">(</span><em class="sig-param">sx</em>, <em class="sig-param">sy=None</em>, <em class="sig-param">sz=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Polyline.scale"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Polyline.scale" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.geometry.Polyline.translate">
|
||||
<code class="sig-name descname">translate</code><span class="sig-paren">(</span><em class="sig-param">tx</em>, <em class="sig-param">ty</em>, <em class="sig-param">tz</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Polyline.translate"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Polyline.translate" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.geometry.Polyline.xy">
|
||||
<code class="sig-name descname">xy</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Polyline.xy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Polyline.xy" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Get coordinates in 3d space</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.geometry.Polyline.xyz">
|
||||
<code class="sig-name descname">xyz</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Polyline.xyz"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Polyline.xyz" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Get coordinates in 3d space</p>
|
||||
</dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<dl class="class">
|
||||
<dt id="pylib.geometry.Properties">
|
||||
<em class="property">class </em><code class="sig-name descname">Properties</code><a class="reference internal" href="_modules/pylib/geometry.html#Properties"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Properties" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
|
||||
<dl class="attribute">
|
||||
<dt id="pylib.geometry.Properties.circle_sectors">
|
||||
<code class="sig-name descname">circle_sectors</code><em class="property"> = 12</em><a class="headerlink" href="#pylib.geometry.Properties.circle_sectors" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<dl class="class">
|
||||
<dt id="pylib.geometry.Solid">
|
||||
<em class="property">class </em><code class="sig-name descname">Solid</code><span class="sig-paren">(</span><em class="sig-param">*wireframes</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Solid"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Solid" title="Permalink to this definition">¶</a></dt>
|
||||
@@ -159,74 +299,6 @@ The Wireframe class create its own points (copy).</p>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<dl class="class">
|
||||
<dt id="pylib.geometry.Wireframe">
|
||||
<em class="property">class </em><code class="sig-name descname">Wireframe</code><span class="sig-paren">(</span><em class="sig-param">*points</em>, <em class="sig-param">closed=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Wireframe"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Wireframe" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
|
||||
<p>Open and closed wireframe object in local coordinate system</p>
|
||||
<p>This class create its own points (copy).</p>
|
||||
<dl class="method">
|
||||
<dt id="pylib.geometry.Wireframe.__iter__">
|
||||
<code class="sig-name descname">__iter__</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Wireframe.__iter__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Wireframe.__iter__" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Returns the Iterator object</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.geometry.Wireframe.__str__">
|
||||
<code class="sig-name descname">__str__</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Wireframe.__str__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Wireframe.__str__" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Return str(self).</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.geometry.Wireframe.ch_cs">
|
||||
<code class="sig-name descname">ch_cs</code><span class="sig-paren">(</span><em class="sig-param">cs</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Wireframe.ch_cs"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Wireframe.ch_cs" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.geometry.Wireframe.points">
|
||||
<code class="sig-name descname">points</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Wireframe.points"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Wireframe.points" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Get coordinates in 3d space</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.geometry.Wireframe.rotate_x">
|
||||
<code class="sig-name descname">rotate_x</code><span class="sig-paren">(</span><em class="sig-param">theta</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Wireframe.rotate_x"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Wireframe.rotate_x" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.geometry.Wireframe.rotate_y">
|
||||
<code class="sig-name descname">rotate_y</code><span class="sig-paren">(</span><em class="sig-param">theta</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Wireframe.rotate_y"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Wireframe.rotate_y" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.geometry.Wireframe.rotate_z">
|
||||
<code class="sig-name descname">rotate_z</code><span class="sig-paren">(</span><em class="sig-param">theta</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Wireframe.rotate_z"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Wireframe.rotate_z" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.geometry.Wireframe.scale">
|
||||
<code class="sig-name descname">scale</code><span class="sig-paren">(</span><em class="sig-param">sx</em>, <em class="sig-param">sy=None</em>, <em class="sig-param">sz=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Wireframe.scale"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Wireframe.scale" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.geometry.Wireframe.translate">
|
||||
<code class="sig-name descname">translate</code><span class="sig-paren">(</span><em class="sig-param">tx</em>, <em class="sig-param">ty</em>, <em class="sig-param">tz</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Wireframe.translate"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Wireframe.translate" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.geometry.Wireframe.xy">
|
||||
<code class="sig-name descname">xy</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Wireframe.xy"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Wireframe.xy" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Get coordinates in 3d space</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.geometry.Wireframe.xyz">
|
||||
<code class="sig-name descname">xyz</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#Wireframe.xyz"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.Wireframe.xyz" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Get coordinates in 3d space</p>
|
||||
</dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<dl class="class">
|
||||
<dt id="pylib.geometry.World">
|
||||
<em class="property">class </em><code class="sig-name descname">World</code><a class="reference internal" href="_modules/pylib/geometry.html#World"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.World" title="Permalink to this definition">¶</a></dt>
|
||||
@@ -238,6 +310,12 @@ The Wireframe class create its own points (copy).</p>
|
||||
<dd><p>Returns the Iterator object</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.geometry.World.__str__">
|
||||
<code class="sig-name descname">__str__</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#World.__str__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.World.__str__" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Return str(self).</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.geometry.World.add">
|
||||
<code class="sig-name descname">add</code><span class="sig-paren">(</span><em class="sig-param">*objects</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#World.add"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.World.add" title="Permalink to this definition">¶</a></dt>
|
||||
@@ -315,7 +393,11 @@ The Wireframe class create its own points (copy).</p>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
</div>
|
||||
<dl class="function">
|
||||
<dt id="pylib.geometry.sample_half_open">
|
||||
<code class="sig-name descname">sample_half_open</code><span class="sig-paren">(</span><em class="sig-param">f</em>, <em class="sig-param">a</em>, <em class="sig-param">b</em>, <em class="sig-param">n=50</em>, <em class="sig-param">endpoint_epsilon=1e-07</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/geometry.html#sample_half_open"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.geometry.sample_half_open" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
<script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
|
||||
<link rel="index" title="Index" href="genindex.html" />
|
||||
<link rel="search" title="Search" href="search.html" />
|
||||
<link rel="next" title="pylib.mathematics module" href="pylib.mathematics.html" />
|
||||
<link rel="next" title="pylib.helper module" href="pylib.helper.html" />
|
||||
<link rel="prev" title="pylib.geometry_plot module" href="pylib.geometry_plot.html" />
|
||||
|
||||
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
|
||||
@@ -147,7 +147,7 @@ working for 3D.</p>
|
||||
<li><a href="modules.html">pylib</a><ul>
|
||||
<li><a href="pylib.html">pylib package</a><ul>
|
||||
<li>Previous: <a href="pylib.geometry_plot.html" title="previous chapter">pylib.geometry_plot module</a></li>
|
||||
<li>Next: <a href="pylib.mathematics.html" title="next chapter">pylib.mathematics module</a></li>
|
||||
<li>Next: <a href="pylib.helper.html" title="next chapter">pylib.helper module</a></li>
|
||||
</ul></li>
|
||||
</ul></li>
|
||||
</ul></li>
|
||||
|
||||
152
docs/build/html/pylib.helper.html
vendored
Normal file
152
docs/build/html/pylib.helper.html
vendored
Normal file
@@ -0,0 +1,152 @@
|
||||
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>pylib.helper module — pylib 2019.12.21 documentation</title>
|
||||
<link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
||||
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
|
||||
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
|
||||
<script type="text/javascript" src="_static/jquery.js"></script>
|
||||
<script type="text/javascript" src="_static/underscore.js"></script>
|
||||
<script type="text/javascript" src="_static/doctools.js"></script>
|
||||
<script type="text/javascript" src="_static/language_data.js"></script>
|
||||
<script async="async" type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
|
||||
<link rel="index" title="Index" href="genindex.html" />
|
||||
<link rel="search" title="Search" href="search.html" />
|
||||
<link rel="next" title="pylib.mathematics module" href="pylib.mathematics.html" />
|
||||
<link rel="prev" title="pylib.geometry_plot_pylab module" href="pylib.geometry_plot_pylab.html" />
|
||||
|
||||
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
|
||||
|
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
|
||||
|
||||
</head><body>
|
||||
|
||||
|
||||
<div class="document">
|
||||
<div class="documentwrapper">
|
||||
<div class="bodywrapper">
|
||||
|
||||
|
||||
<div class="body" role="main">
|
||||
|
||||
<div class="section" id="module-pylib.helper">
|
||||
<span id="pylib-helper-module"></span><h1>pylib.helper module<a class="headerlink" href="#module-pylib.helper" title="Permalink to this headline">¶</a></h1>
|
||||
<p>Helper objects.</p>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Date</dt>
|
||||
<dd class="field-odd"><p>2020-01-01</p>
|
||||
</dd>
|
||||
</dl>
|
||||
<span class="target" id="module-helper"></span><dl class="class">
|
||||
<dt id="pylib.helper.timeit">
|
||||
<em class="property">class </em><code class="sig-name descname">timeit</code><span class="sig-paren">(</span><em class="sig-param">description=None</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/helper.html#timeit"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.helper.timeit" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">contextlib.ContextDecorator</span></code></p>
|
||||
<p>Meassure time for a function or code block.</p>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Parameters</dt>
|
||||
<dd class="field-odd"><p><strong>description</strong> (<em>str</em>) – description for the function or code block
|
||||
used for the print-out</p>
|
||||
</dd>
|
||||
<dt class="field-even">Example</dt>
|
||||
<dd class="field-even"><p></p></dd>
|
||||
</dl>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="k">with</span> <span class="n">timeit</span><span class="p">(</span><span class="s1">'section_test'</span><span class="p">):</span>
|
||||
<span class="gp">... </span> <span class="c1"># code</span>
|
||||
<span class="go">section_test took 0.006 ms</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="nd">@timeit</span><span class="p">(</span><span class="s1">'func'</span><span class="p">)</span>
|
||||
<span class="k">def</span> <span class="nf">func</span><span class="p">():</span>
|
||||
<span class="c1"># code</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">func</span><span class="p">()</span>
|
||||
<span class="go">func took 0.006 ms</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</dd></dl>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
||||
<div class="sphinxsidebarwrapper">
|
||||
<h1 class="logo"><a href="index.html">pylib</a></h1>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<h3>Navigation</h3>
|
||||
<p class="caption"><span class="caption-text">Contents:</span></p>
|
||||
<ul class="current">
|
||||
<li class="toctree-l1 current"><a class="reference internal" href="modules.html">pylib</a><ul class="current">
|
||||
<li class="toctree-l2 current"><a class="reference internal" href="pylib.html">pylib package</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<div class="relations">
|
||||
<h3>Related Topics</h3>
|
||||
<ul>
|
||||
<li><a href="index.html">Documentation overview</a><ul>
|
||||
<li><a href="modules.html">pylib</a><ul>
|
||||
<li><a href="pylib.html">pylib package</a><ul>
|
||||
<li>Previous: <a href="pylib.geometry_plot_pylab.html" title="previous chapter">pylib.geometry_plot_pylab module</a></li>
|
||||
<li>Next: <a href="pylib.mathematics.html" title="next chapter">pylib.mathematics module</a></li>
|
||||
</ul></li>
|
||||
</ul></li>
|
||||
</ul></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="searchbox" style="display: none" role="search">
|
||||
<h3 id="searchlabel">Quick search</h3>
|
||||
<div class="searchformwrapper">
|
||||
<form class="search" action="search.html" method="get">
|
||||
<input type="text" name="q" aria-labelledby="searchlabel" />
|
||||
<input type="submit" value="Go" />
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">$('#searchbox').show(0);</script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
</div>
|
||||
<div class="footer">
|
||||
©2019, Daniel Weschke.
|
||||
|
||||
|
|
||||
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.2.1</a>
|
||||
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
||||
|
||||
|
|
||||
<a href="_sources/pylib.helper.rst.txt"
|
||||
rel="nofollow">Page source</a>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
8
docs/build/html/pylib.html
vendored
8
docs/build/html/pylib.html
vendored
@@ -58,17 +58,17 @@
|
||||
<div class="toctree-wrapper compound">
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="pylib.data.html">pylib.data module</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="pylib.data_step.html">pylib.data_step module</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="pylib.data_step_std.html">pylib.data_step_std module</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="pylib.date.html">pylib.date module</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="pylib.drawblock.html">pylib.drawblock module</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="pylib.function.html">pylib.function module</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="pylib.geometry.html">pylib.geometry module</a><ul>
|
||||
<li class="toctree-l2"><a class="reference internal" href="pylib.geometry.html#affine-transforms">Affine transforms</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="pylib.geometry.html">pylib.geometry module</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="pylib.geometry2d.html">pylib.geometry2d module</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="pylib.geometry2d_plot.html">pylib.geometry2d_plot module</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="pylib.geometry_plot.html">pylib.geometry_plot module</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="pylib.geometry_plot_pylab.html">pylib.geometry_plot_pylab module</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="pylib.helper.html">pylib.helper module</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="pylib.mathematics.html">pylib.mathematics module</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="pylib.time_of_day.html">pylib.time_of_day module</a></li>
|
||||
</ul>
|
||||
|
||||
109
docs/build/html/pylib.mathematics.html
vendored
109
docs/build/html/pylib.mathematics.html
vendored
@@ -17,7 +17,7 @@
|
||||
<link rel="index" title="Index" href="genindex.html" />
|
||||
<link rel="search" title="Search" href="search.html" />
|
||||
<link rel="next" title="pylib.time_of_day module" href="pylib.time_of_day.html" />
|
||||
<link rel="prev" title="pylib.geometry_plot_pylab module" href="pylib.geometry_plot_pylab.html" />
|
||||
<link rel="prev" title="pylib.helper module" href="pylib.helper.html" />
|
||||
|
||||
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
|
||||
|
||||
@@ -62,8 +62,16 @@
|
||||
<dd class="field-odd"><p></p></dd>
|
||||
</dl>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">m</span> <span class="o">=</span> <span class="n">matrix</span><span class="p">([[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="p">[</span><span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="p">[</span><span class="mi">7</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">9</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">]])</span>
|
||||
<span class="gp">>>> </span><span class="nb">print</span><span class="p">(</span><span class="n">m</span><span class="p">[:])</span>
|
||||
<span class="go">[[1, 2, 3, 0], [4, 5, 6, 0], [7, 8, 9, 0], [0, 0, 0, 0]]</span>
|
||||
<span class="gp">>>> </span><span class="nb">print</span><span class="p">(</span><span class="n">m</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span>
|
||||
<span class="go">[7, 8, 9, 0]</span>
|
||||
<span class="gp">>>> </span><span class="nb">print</span><span class="p">(</span><span class="n">m</span><span class="p">[</span><span class="mi">2</span><span class="p">,</span> <span class="p">:])</span>
|
||||
<span class="go">[7, 8, 9, 0]</span>
|
||||
<span class="gp">>>> </span><span class="nb">print</span><span class="p">(</span><span class="n">m</span><span class="p">[:,</span> <span class="mi">2</span><span class="p">])</span>
|
||||
<span class="go">[3, 6, 9, 0]</span>
|
||||
<span class="gp">>>> </span><span class="nb">print</span><span class="p">(</span><span class="n">m</span><span class="p">[</span><span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">])</span>
|
||||
<span class="go">9</span>
|
||||
<span class="gp">>>> </span><span class="nb">print</span><span class="p">(</span><span class="n">m</span><span class="p">[:,</span> <span class="mi">1</span><span class="p">:</span><span class="mi">3</span><span class="p">])</span>
|
||||
<span class="go">[[2, 3], [5, 6], [8, 9], [0, 0]]</span>
|
||||
<span class="gp">>>> </span><span class="nb">print</span><span class="p">(</span><span class="n">m</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">:</span><span class="mi">3</span><span class="p">])</span>
|
||||
@@ -160,6 +168,12 @@ for wrong usage (result will be nonsense).</p>
|
||||
</div>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.mathematics.matrix.__setitem__">
|
||||
<code class="sig-name descname">__setitem__</code><span class="sig-paren">(</span><em class="sig-param">index</em>, <em class="sig-param">value</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#matrix.__setitem__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.matrix.__setitem__" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Set self[key] to value.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.mathematics.matrix.__str__">
|
||||
<code class="sig-name descname">__str__</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#matrix.__str__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.matrix.__str__" title="Permalink to this definition">¶</a></dt>
|
||||
@@ -400,6 +414,39 @@ where it should be.</p>
|
||||
\end{bmatrix}\end{split}\]</div>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.mathematics.matrix.transpose">
|
||||
<code class="sig-name descname">transpose</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#matrix.transpose"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.matrix.transpose" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Transpose</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.mathematics.matrix.transposed">
|
||||
<em class="property">static </em><code class="sig-name descname">transposed</code><span class="sig-paren">(</span><em class="sig-param">a</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#matrix.transposed"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.matrix.transposed" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Transpose</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.mathematics.matrix.zeros">
|
||||
<em class="property">static </em><code class="sig-name descname">zeros</code><span class="sig-paren">(</span><em class="sig-param">m</em>, <em class="sig-param">n</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#matrix.zeros"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.matrix.zeros" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Returns a zero matrix of size mxn; m rows and n columns
|
||||
filled with zeros.</p>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Parameters</dt>
|
||||
<dd class="field-odd"><ul class="simple">
|
||||
<li><p><strong>m</strong> (<em>int</em>) – number of rows of the matrix, e. g. 3</p></li>
|
||||
<li><p><strong>n</strong> (<em>int</em>) – number of columns of the matrix, e. g. 3</p></li>
|
||||
</ul>
|
||||
</dd>
|
||||
<dt class="field-even">Example</dt>
|
||||
<dd class="field-even"><p></p></dd>
|
||||
</dl>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">m</span> <span class="o">=</span> <span class="n">matrix</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span>
|
||||
<span class="gp">>>> </span><span class="nb">print</span><span class="p">(</span><span class="n">m</span><span class="p">)</span> <span class="p">[[</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">],</span> <span class="p">[</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">],</span> <span class="p">[</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">]]</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<dl class="class">
|
||||
@@ -848,13 +895,12 @@ The direction of c can be found with the right-hand rule.</p>
|
||||
<dl class="method">
|
||||
<dt id="pylib.mathematics.vector.full">
|
||||
<em class="property">static </em><code class="sig-name descname">full</code><span class="sig-paren">(</span><em class="sig-param">length</em>, <em class="sig-param">fill_value</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.full"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.full" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Returns a vector of length m or matrix of size m rows, n
|
||||
columns filled with v.</p>
|
||||
<dd><p>Returns a vector of length m filled with v.</p>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Parameters</dt>
|
||||
<dd class="field-odd"><ul class="simple">
|
||||
<li><p><strong>length</strong> (<em>int</em>) – length of the vector, e. g. 3</p></li>
|
||||
<li><p><strong>fill_value</strong> – Fill value</p></li>
|
||||
<li><p><strong>fill_value</strong> – fill value</p></li>
|
||||
</ul>
|
||||
</dd>
|
||||
<dt class="field-even">Type fill_value</dt>
|
||||
@@ -878,9 +924,33 @@ columns filled with v.</p>
|
||||
</dl>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.mathematics.vector.isclose">
|
||||
<em class="property">static </em><code class="sig-name descname">isclose</code><span class="sig-paren">(</span><em class="sig-param">a</em>, <em class="sig-param">b</em>, <em class="sig-param">rel_tol=0.05</em>, <em class="sig-param">abs_tol=1e-08</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.isclose"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.isclose" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.mathematics.vector.iscloseto">
|
||||
<code class="sig-name descname">iscloseto</code><span class="sig-paren">(</span><em class="sig-param">other</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.iscloseto"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.iscloseto" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.mathematics.vector.normalize">
|
||||
<em class="property">static </em><code class="sig-name descname">normalize</code><span class="sig-paren">(</span><em class="sig-param">a</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.normalize"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.normalize" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">normalize</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.normalize"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.normalize" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Normalize a vector (i. e. the vector has a length of 1)</p>
|
||||
<dl class="field-list simple">
|
||||
</dl>
|
||||
<div class="math notranslate nohighlight">
|
||||
\[\mathbf{\hat{a}} = \frac{\mathbf{a}}{|\mathbf{a}|}\]</div>
|
||||
<div class="admonition seealso">
|
||||
<p class="admonition-title">See also</p>
|
||||
<p><a class="reference internal" href="#pylib.mathematics.vector.__abs__" title="pylib.mathematics.vector.__abs__"><code class="xref py py-meth docutils literal notranslate"><span class="pre">__abs__()</span></code></a> for a norm (magnitude) of a vector</p>
|
||||
</div>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.mathematics.vector.normalized">
|
||||
<em class="property">static </em><code class="sig-name descname">normalized</code><span class="sig-paren">(</span><em class="sig-param">a</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.normalized"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.normalized" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Normalize a vector (i. e. the vector has a length of 1)</p>
|
||||
<dl class="field-list simple">
|
||||
</dl>
|
||||
@@ -895,8 +965,7 @@ columns filled with v.</p>
|
||||
<dl class="method">
|
||||
<dt id="pylib.mathematics.vector.ones">
|
||||
<em class="property">static </em><code class="sig-name descname">ones</code><span class="sig-paren">(</span><em class="sig-param">length</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.ones"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.ones" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Returns a vector of length m or matrix of size rows, n
|
||||
columns filled with ones.</p>
|
||||
<dd><p>Returns a vector of length m filled with ones.</p>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Parameters</dt>
|
||||
<dd class="field-odd"><p><strong>length</strong> (<em>int</em>) – lhape of the vector, e. g. 3</p>
|
||||
@@ -904,7 +973,7 @@ columns filled with ones.</p>
|
||||
<dt class="field-even">Example</dt>
|
||||
<dd class="field-even"><p></p></dd>
|
||||
</dl>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">v</span> <span class="o">=</span> <span class="n">ones</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">v</span> <span class="o">=</span> <span class="n">vector</span><span class="o">.</span><span class="n">ones</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
|
||||
<span class="gp">>>> </span><span class="nb">print</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
|
||||
<span class="go">[1.0, 1.0, 1.0]</span>
|
||||
</pre></div>
|
||||
@@ -913,17 +982,20 @@ columns filled with ones.</p>
|
||||
|
||||
<dl class="method">
|
||||
<dt id="pylib.mathematics.vector.random">
|
||||
<em class="property">static </em><code class="sig-name descname">random</code><span class="sig-paren">(</span><em class="sig-param">shape</em>, <em class="sig-param">lmin=0.0</em>, <em class="sig-param">lmax=1.0</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.random"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.random" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Returns a random vector of length n or matrix of size m rows,
|
||||
n columns filled with random numbers.</p>
|
||||
<em class="property">static </em><code class="sig-name descname">random</code><span class="sig-paren">(</span><em class="sig-param">length</em>, <em class="sig-param">lmin=0.0</em>, <em class="sig-param">lmax=1.0</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.random"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.random" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Returns a random vector of length n filled with random
|
||||
numbers.</p>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Example</dt>
|
||||
<dd class="field-odd"><p></p></dd>
|
||||
<dt class="field-odd">Parameters</dt>
|
||||
<dd class="field-odd"><p><strong>length</strong> (<em>int</em>) – lhape of the vector, e. g. 3</p>
|
||||
</dd>
|
||||
<dt class="field-even">Example</dt>
|
||||
<dd class="field-even"><p></p></dd>
|
||||
</dl>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">v</span> <span class="o">=</span> <span class="n">random</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">v</span> <span class="o">=</span> <span class="n">vector</span><span class="o">.</span><span class="n">random</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
|
||||
<span class="gp">>>> </span><span class="nb">print</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
|
||||
<span class="go">[0.9172905912930438, 0.8908124278322492, 0.5256002790725927]</span>
|
||||
<span class="gp">>>> </span><span class="n">v</span> <span class="o">=</span> <span class="n">random</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
|
||||
<span class="gp">>>> </span><span class="n">v</span> <span class="o">=</span> <span class="n">vector</span><span class="o">.</span><span class="n">random</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
|
||||
<span class="gp">>>> </span><span class="nb">print</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
|
||||
<span class="go">[1.2563665665080803, 1.9270454509964547, 1.2381672401270487]</span>
|
||||
</pre></div>
|
||||
@@ -1022,8 +1094,7 @@ where it should be.</p>
|
||||
<dl class="method">
|
||||
<dt id="pylib.mathematics.vector.zeros">
|
||||
<em class="property">static </em><code class="sig-name descname">zeros</code><span class="sig-paren">(</span><em class="sig-param">length</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/mathematics.html#vector.zeros"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.mathematics.vector.zeros" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Returns a zero vector of length m or matrix of size rows, n
|
||||
columns filled with zeros.</p>
|
||||
<dd><p>Returns a zero vector of length m filled with zeros.</p>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Parameters</dt>
|
||||
<dd class="field-odd"><p><strong>length</strong> (<em>int</em>) – length of the vector, e. g. 3</p>
|
||||
@@ -1031,7 +1102,7 @@ columns filled with zeros.</p>
|
||||
<dt class="field-even">Example</dt>
|
||||
<dd class="field-even"><p></p></dd>
|
||||
</dl>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">v</span> <span class="o">=</span> <span class="n">zeros</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">v</span> <span class="o">=</span> <span class="n">vector</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
|
||||
<span class="gp">>>> </span><span class="nb">print</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
|
||||
<span class="go">[0.0, 0.0, 0.0]</span>
|
||||
</pre></div>
|
||||
@@ -1073,7 +1144,7 @@ columns filled with zeros.</p>
|
||||
<li><a href="index.html">Documentation overview</a><ul>
|
||||
<li><a href="modules.html">pylib</a><ul>
|
||||
<li><a href="pylib.html">pylib package</a><ul>
|
||||
<li>Previous: <a href="pylib.geometry_plot_pylab.html" title="previous chapter">pylib.geometry_plot_pylab module</a></li>
|
||||
<li>Previous: <a href="pylib.helper.html" title="previous chapter">pylib.helper module</a></li>
|
||||
<li>Next: <a href="pylib.time_of_day.html" title="next chapter">pylib.time_of_day module</a></li>
|
||||
</ul></li>
|
||||
</ul></li>
|
||||
|
||||
43
docs/build/html/pylib.numerical.ode.html
vendored
43
docs/build/html/pylib.numerical.ode.html
vendored
@@ -44,7 +44,12 @@ ordinary differential equations.</p>
|
||||
<dd class="field-odd"><p>2015-09-21</p>
|
||||
</dd>
|
||||
</dl>
|
||||
<span class="target" id="module-ode"></span><dl class="function">
|
||||
<span class="target" id="module-ode"></span><p>Approximate the solution <span class="math notranslate nohighlight">\(x(t)\)</span> of the initial value problem</p>
|
||||
<div class="math notranslate nohighlight">
|
||||
\[\begin{split}\frac{\mathrm{d}x}{\mathrm{d}t} = \dot{x} &= f(t,x) \\
|
||||
x(t_0) &= x_0 \\
|
||||
t &\in [t_0, t_n]\end{split}\]</div>
|
||||
<dl class="function">
|
||||
<dt id="pylib.numerical.ode.e1">
|
||||
<code class="sig-name descname">e1</code><span class="sig-paren">(</span><em class="sig-param">f</em>, <em class="sig-param">x0</em>, <em class="sig-param">t</em>, <em class="sig-param">*p</em>, <em class="sig-param">verbose=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/numerical/ode.html#e1"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.numerical.ode.e1" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Explicit first-order method /
|
||||
@@ -65,13 +70,14 @@ Euler-Cauchy-Verfahren / Euler-vorwärts-Verfahren</p>
|
||||
</ul>
|
||||
</dd>
|
||||
</dl>
|
||||
<p>Approximate the solution of the initial value problem</p>
|
||||
<p>Approximate the solution <span class="math notranslate nohighlight">\(x(t)\)</span> of the initial value problem</p>
|
||||
<div class="math notranslate nohighlight">
|
||||
\[\begin{split}\dot{x} &= f(t,x) \\
|
||||
x(t_0) &= x_0\end{split}\]</div>
|
||||
x(t_0) &= x_0 \\
|
||||
t &\in [t_0, t_n]\end{split}\]</div>
|
||||
<p>Choose a value h for the size of every step and set</p>
|
||||
<div class="math notranslate nohighlight">
|
||||
\[t_i = t_0 + i h ~,\quad i=1,2,\ldots,n\]</div>
|
||||
\[t_{i+1} = t_0 + i h = t_i + h ~,\quad i=0,1,2,\ldots,n-1\]</div>
|
||||
<p>The derivative of the solution is approximated as the forward
|
||||
difference equation</p>
|
||||
<div class="math notranslate nohighlight">
|
||||
@@ -169,6 +175,30 @@ proportional to the step size.</p>
|
||||
</ul>
|
||||
</dd>
|
||||
</dl>
|
||||
<p>Problem</p>
|
||||
<blockquote>
|
||||
<div><div class="math notranslate nohighlight">
|
||||
\[\begin{split}\dot{y} &= f(t, y) \\
|
||||
y(t_0) &= y_0 \\
|
||||
t &\in [t_0, t_n]\end{split}\]</div>
|
||||
</div></blockquote>
|
||||
<p>Increment <span class="math notranslate nohighlight">\(\delta t = t_{i+1}-t_i ~,~~ i=0,1,2,\ldots,n-1\)</span></p>
|
||||
<blockquote>
|
||||
<div><div class="math notranslate nohighlight">
|
||||
\[\begin{split}y_{n+1} &= y_{i} + \tfrac{1}{6}(
|
||||
\delta y_{i,1} + 2\delta y_{i,2} + 2\delta y_{i,3} +
|
||||
\delta y_{i,4}) \\
|
||||
& \qquad \text{with} \\
|
||||
\delta y_{i,1} &= \delta t \cdot y'(t_{i}, ~ y_{i}) \\
|
||||
\delta y_{i,2} &= \delta t \cdot
|
||||
y'(t_{i}+\tfrac{1}{2}\delta t, ~
|
||||
y_{i}+\tfrac{1}{2}\delta y_{i,1}) \\
|
||||
\delta y_{i,3} &= \delta t \cdot
|
||||
y'(t_{i}+\tfrac{1}{2}\delta t, ~
|
||||
y_{i}+\tfrac{1}{2}\delta y_{i,2}) \\
|
||||
\delta y_{i,4} &= \delta t \cdot
|
||||
y'(t_{i}+\delta t, ~ y_{i}+\delta y_{i,3})\end{split}\]</div>
|
||||
</div></blockquote>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="function">
|
||||
@@ -251,9 +281,10 @@ proportional to the step size.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="function">
|
||||
<dt id="pylib.numerical.ode.newmark_newtonraphson_rdk">
|
||||
<code class="sig-name descname">newmark_newtonraphson_rdk</code><span class="sig-paren">(</span><em class="sig-param">fnm</em>, <em class="sig-param">x0</em>, <em class="sig-param">xp0</em>, <em class="sig-param">xpp0</em>, <em class="sig-param">t</em>, <em class="sig-param">*p</em>, <em class="sig-param">gamma=0.5</em>, <em class="sig-param">beta=0.25</em>, <em class="sig-param">max_iterations=1000</em>, <em class="sig-param">tol=1e-09</em>, <em class="sig-param">verbose=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/numerical/ode.html#newmark_newtonraphson_rdk"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.numerical.ode.newmark_newtonraphson_rdk" title="Permalink to this definition">¶</a></dt>
|
||||
<dt id="pylib.numerical.ode.newmark_newtonraphson_mdk">
|
||||
<code class="sig-name descname">newmark_newtonraphson_mdk</code><span class="sig-paren">(</span><em class="sig-param">fmdk</em>, <em class="sig-param">x0</em>, <em class="sig-param">xp0</em>, <em class="sig-param">xpp0</em>, <em class="sig-param">t</em>, <em class="sig-param">*p</em>, <em class="sig-param">gamma=0.5</em>, <em class="sig-param">beta=0.25</em>, <em class="sig-param">max_iterations=1000</em>, <em class="sig-param">tol=1e-09</em>, <em class="sig-param">verbose=False</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/numerical/ode.html#newmark_newtonraphson_mdk"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.numerical.ode.newmark_newtonraphson_mdk" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Newmark method.</p>
|
||||
<p>Using m mass, d damping and k stiffness formulation.</p>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Parameters</dt>
|
||||
<dd class="field-odd"><ul class="simple">
|
||||
|
||||
159
docs/build/html/pylib.numerical.ode_model.html
vendored
159
docs/build/html/pylib.numerical.ode_model.html
vendored
@@ -37,78 +37,123 @@
|
||||
<div class="section" id="module-pylib.numerical.ode_model">
|
||||
<span id="pylib-numerical-ode-model-module"></span><h1>pylib.numerical.ode_model module<a class="headerlink" href="#module-pylib.numerical.ode_model" title="Permalink to this headline">¶</a></h1>
|
||||
<p>Mathmatical models governed by ordinary differential equations.</p>
|
||||
<p>Describes initial value problems as systems of first order ordinary differential
|
||||
equations.</p>
|
||||
<p>Describes initial value problems as systems of first order ordinary
|
||||
differential equations.</p>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Date</dt>
|
||||
<dd class="field-odd"><p>2019-05-25</p>
|
||||
<dd class="field-odd"><p>2020-01-08</p>
|
||||
</dd>
|
||||
</dl>
|
||||
<span class="target" id="module-ode_model"></span><dl class="function">
|
||||
<dt id="pylib.numerical.ode_model.disk">
|
||||
<code class="sig-name descname">disk</code><span class="sig-paren">(</span><em class="sig-param">x</em>, <em class="sig-param">t</em>, <em class="sig-param">*p</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/numerical/ode_model.html#disk"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.numerical.ode_model.disk" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">disk</code><span class="sig-paren">(</span><em class="sig-param">d</em>, <em class="sig-param">e</em>, <em class="sig-param">T</em>, <em class="sig-param">method=''</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/numerical/ode_model.html#disk"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.numerical.ode_model.disk" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Rotation of an eccentric disk.</p>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Parameters</dt>
|
||||
<dd class="field-odd"><ul class="simple">
|
||||
<li><p><strong>x</strong> (<em>list</em>) – values of the function</p></li>
|
||||
<li><p><strong>t</strong> (<em>list</em>) – time</p></li>
|
||||
<li><p><strong>*p</strong> – <p>parameters of the function</p>
|
||||
<ul>
|
||||
<li><p>diameter</p></li>
|
||||
<li><p>eccentricity</p></li>
|
||||
<li><p>torque</p></li>
|
||||
</ul>
|
||||
</p></li>
|
||||
<li><p><strong>d</strong> (<em>float</em>) – diameter</p></li>
|
||||
<li><p><strong>e</strong> (<em>float</em>) – eccentricity</p></li>
|
||||
<li><p><strong>T</strong> (<em>float</em>) – torque</p></li>
|
||||
<li><p><strong>method</strong> – the method to use, default = ‘’.</p></li>
|
||||
</ul>
|
||||
</dd>
|
||||
</dl>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="function">
|
||||
<dt id="pylib.numerical.ode_model.disk_nm">
|
||||
<code class="sig-name descname">disk_nm</code><span class="sig-paren">(</span><em class="sig-param">xn</em>, <em class="sig-param">xpn</em>, <em class="sig-param">xppn</em>, <em class="sig-param">t</em>, <em class="sig-param">*p</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/numerical/ode_model.html#disk_nm"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.numerical.ode_model.disk_nm" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Rotation of an eccentric disk.</p>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Parameters</dt>
|
||||
<dd class="field-odd"><ul class="simple">
|
||||
<li><p><strong>xn</strong> (<em>list</em>) – values of the function</p></li>
|
||||
<li><p><strong>xpn</strong> (<em>list</em>) – first derivative values of the function</p></li>
|
||||
<li><p><strong>xppn</strong> (<em>list</em>) – second derivative values of the function</p></li>
|
||||
<li><p><strong>t</strong> (<em>list</em>) – time</p></li>
|
||||
<li><p><strong>*p</strong> – <p>parameters of the function</p>
|
||||
<ul>
|
||||
<li><p>diameter</p></li>
|
||||
<li><p>eccentricity</p></li>
|
||||
<li><p>torque</p></li>
|
||||
</ul>
|
||||
</p></li>
|
||||
</ul>
|
||||
</dd>
|
||||
</dl>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="function">
|
||||
<dt id="pylib.numerical.ode_model.disk_nmmdk">
|
||||
<code class="sig-name descname">disk_nmmdk</code><span class="sig-paren">(</span><em class="sig-param">xn</em>, <em class="sig-param">xpn</em>, <em class="sig-param">xppn</em>, <em class="sig-param">t</em>, <em class="sig-param">*p</em><span class="sig-paren">)</span><a class="reference internal" href="_modules/pylib/numerical/ode_model.html#disk_nmmdk"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pylib.numerical.ode_model.disk_nmmdk" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Rotation of an eccentric disk.</p>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Parameters</dt>
|
||||
<dd class="field-odd"><ul class="simple">
|
||||
<li><p><strong>xn</strong> (<em>list</em>) – values of the function</p></li>
|
||||
<li><p><strong>xpn</strong> (<em>list</em>) – derivative values of the function</p></li>
|
||||
<li><p><strong>xppn</strong> (<em>list</em>) – second derivative values of the function</p></li>
|
||||
<li><p><strong>t</strong> (<em>list</em>) – time</p></li>
|
||||
<li><p><strong>*p</strong> – <p>parameters of the function</p>
|
||||
<ul>
|
||||
<li><p>diameter</p></li>
|
||||
<li><p>eccentricity</p></li>
|
||||
<li><p>torque</p></li>
|
||||
</ul>
|
||||
</p></li>
|
||||
<dt class="field-even">Returns</dt>
|
||||
<dd class="field-even"><p><p>disk function. This function is independent of the time.</p>
|
||||
<ul class="simple">
|
||||
<li><p>For method = ‘’: f(x, t=0) -> (xp1, xp2, xp3, xp4, xp5, xp6).
|
||||
x is (x, y, phi, x’, y’, phi’) and the return values are (x’,
|
||||
y’, phi’, x’‘, y’‘, phi’‘)</p></li>
|
||||
<li><p>For method = ‘nm’: f(xn, xpn, xppn, t=0) -> (N, dN, dNp, dNpp).
|
||||
xn are the values of the function (x, y, phi), xpn are first
|
||||
derivative values of the function (x’, y’, phi’) and xppn are
|
||||
the second derivative values of the function (x’‘, y’‘, phi’‘).
|
||||
The return values are (N, dN, dNp, dNpp)</p></li>
|
||||
<li><p>For method = ‘nmmdk’: f(xn, xpn, xppn, t=0) ->
|
||||
(rm, rmx, rmxpp, rd, rdx, rdxp, rk, rkx, f).
|
||||
xn are the values of the function (x, y, phi), xpn are first
|
||||
derivative values of the function (x’, y’, phi’) and xppn are
|
||||
the second derivative values of the function (x’‘, y’‘, phi’‘).
|
||||
The return values are (rm, rmx, rmxpp, rd, rdx, rdxp, rk, rkx,
|
||||
f)</p></li>
|
||||
</ul>
|
||||
</p>
|
||||
</dd>
|
||||
<dt class="field-odd">Return type</dt>
|
||||
<dd class="field-odd"><p>function</p>
|
||||
</dd>
|
||||
</dl>
|
||||
<p>Model</p>
|
||||
<blockquote>
|
||||
<div><div class="math notranslate nohighlight">
|
||||
\[\begin{split}\begin{vmatrix}
|
||||
\ddot{x} + \cos(\varphi)\ddot{\varphi} + 2d \,\dot{x} - \sin(\varphi) \,\dot{\varphi}^2 + 2d\cos(\varphi)\, \dot{\varphi} + x &=&
|
||||
0 \\
|
||||
\ddot{y} - \sin(\varphi)\ddot{\varphi} + 2d \,\dot{y} - \cos(\varphi) \,\dot{\varphi}^2 + 2d\sin(\varphi)\, \dot{\varphi} + y &=&
|
||||
0 \\
|
||||
\ddot{\varphi} + e\,y\sin(\varphi) - e\,x\cos(\varphi) &=& t
|
||||
\end{vmatrix}
|
||||
\\
|
||||
\begin{vmatrix}
|
||||
\ddot{x} + \cos(\varphi)\ddot{\varphi} &=&
|
||||
-2d \,\dot{x} + \sin(\varphi) \,\dot{\varphi}^2 -2d\cos(\varphi)\, \dot{\varphi} - x \\
|
||||
\ddot{y} - \sin(\varphi)\ddot{\varphi} &=&
|
||||
-2d \,\dot{y} + \cos(\varphi) \,\dot{\varphi}^2 -2d\sin(\varphi)\, \dot{\varphi} - y \\
|
||||
\ddot{\varphi} &=& t - e\,y\sin(\varphi) + e\,x\cos(\varphi)
|
||||
\end{vmatrix}\end{split}\]</div>
|
||||
<div class="math notranslate nohighlight">
|
||||
\[\begin{split}\mathbf{M}(\mathbf{x}) \cdot \mathbf{\ddot{x}} &=
|
||||
\mathbf{f}(\mathbf{x}, \mathbf{\dot{x}})
|
||||
\\
|
||||
\begin{bmatrix}
|
||||
1 & 0 & \cos \varphi \\
|
||||
0 & 1 & -\sin \varphi \\
|
||||
0 & 0 & 1
|
||||
\end{bmatrix} \cdot
|
||||
\begin{bmatrix}
|
||||
\ddot{x} \\ \ddot{y} \\ \ddot{\varphi}
|
||||
\end{bmatrix} &= \begin{bmatrix}
|
||||
-2d \,\dot{x} + \sin(\varphi) \,\dot{\varphi}^2 -2d\cos(\varphi)\, \dot{\varphi} - x \\
|
||||
-2d \,\dot{y} + \cos(\varphi) \,\dot{\varphi}^2 -2d\sin(\varphi)\, \dot{\varphi} - y \\
|
||||
t - e\,y\sin(\varphi) + e\,x\cos(\varphi)
|
||||
\end{bmatrix}\end{split}\]</div>
|
||||
</div></blockquote>
|
||||
<p>returns</p>
|
||||
<blockquote>
|
||||
<div><div class="math notranslate nohighlight">
|
||||
\[\begin{split}x_1 &= x &\quad x_4 &= \dot{x}_1 = \dot{x} &\quad \dot{x}_4 &= \ddot{x} \\
|
||||
x_2 &= y &\quad x_5 &= \dot{x}_2 = \dot{y} &\quad \dot{x}_5 &= \ddot{y} \\
|
||||
x_3 &= \varphi &\quad x_6 &= \dot{x}_3 = \dot{\varphi} &\quad \dot{x}_6 &= \ddot{\varphi} \\\end{split}\]</div>
|
||||
<div class="math notranslate nohighlight">
|
||||
\[\begin{split}\dot{q} &= f(x) \\
|
||||
\begin{bmatrix}
|
||||
\dot{x}_1 \\
|
||||
\dot{x}_2 \\
|
||||
\dot{x}_3 \\
|
||||
\dot{x}_4 \\
|
||||
\dot{x}_5 \\
|
||||
\dot{x}_6
|
||||
\end{bmatrix} &= \begin{bmatrix}
|
||||
x_4 \\
|
||||
x_5 \\
|
||||
x_6 \\
|
||||
\begin{bmatrix}
|
||||
1 & 0 & \cos x_3 \\
|
||||
0 & 1 & -\sin x_3 \\
|
||||
0 & 0 & 1
|
||||
\end{bmatrix}^{-1} \cdot \begin{bmatrix}
|
||||
-2d \,x_4 + \sin(x_3) \,x_6^2 -2d\cos(x_3)\, x_6 - x_1 \\
|
||||
-2d \,x_5 + \cos(x_3) \,x_6^2 -2d\sin(x_3)\, x_6 - x_2 \\
|
||||
t - e\,x_2\sin(x_3) + e\,x_1\cos(x_3)
|
||||
\end{bmatrix}
|
||||
\end{bmatrix}\end{split}\]</div>
|
||||
</div></blockquote>
|
||||
<p>Three explicit differential equations of order 2 reducted to a
|
||||
system of 3x2 first-order differential equations.</p>
|
||||
<div class="admonition seealso">
|
||||
<p class="admonition-title">See also</p>
|
||||
<p><a class="reference internal" href="pylib.numerical.ode.html#pylib.numerical.ode.newmark_newtonraphson" title="pylib.numerical.ode.newmark_newtonraphson"><code class="xref py py-meth docutils literal notranslate"><span class="pre">pylib.numerical.ode.newmark_newtonraphson()</span></code></a> and
|
||||
<a class="reference internal" href="pylib.numerical.ode.html#pylib.numerical.ode.newmark_newtonraphson_mdk" title="pylib.numerical.ode.newmark_newtonraphson_mdk"><code class="xref py py-meth docutils literal notranslate"><span class="pre">pylib.numerical.ode.newmark_newtonraphson_mdk()</span></code></a></p>
|
||||
</div>
|
||||
</dd></dl>
|
||||
|
||||
</div>
|
||||
|
||||
2
docs/build/html/searchindex.js
vendored
2
docs/build/html/searchindex.js
vendored
File diff suppressed because one or more lines are too long
@@ -11,3 +11,10 @@ table.indextable tr.cap {
|
||||
position: relative;
|
||||
top: -1.5em;
|
||||
}
|
||||
/* sidebar_header is only set for normal screen size */
|
||||
@media screen and (max-width: 875px) {
|
||||
div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p,
|
||||
div.sphinxsidebar h3 a {
|
||||
color: #b2b2b2;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,7 +46,6 @@ templates_path = ['_templates']
|
||||
# This pattern also affects html_static_path and html_extra_path.
|
||||
exclude_patterns = []
|
||||
|
||||
|
||||
# -- Options for HTML output -------------------------------------------------
|
||||
|
||||
# The theme to use for HTML and HTML Help pages. See the documentation for
|
||||
@@ -64,12 +63,14 @@ html_context = {
|
||||
'css_files': ['_static/custom.css'],
|
||||
}
|
||||
|
||||
# https://alabaster.readthedocs.io/en/latest/customization.html
|
||||
html_theme_options = {
|
||||
'base_bg': '#292b2e',
|
||||
'base_text': '#b2b2b2',
|
||||
'body_text': '#b2b2b2',
|
||||
'viewcode_target_bg': '#292b2e',
|
||||
'pre_bg': '#25272c',
|
||||
'code_bg': '#25272c',
|
||||
'code_text': '#b2b2b2',
|
||||
'code_hover': 'transparent',
|
||||
'sidebar_text': '#b2b2b2',
|
||||
@@ -84,6 +85,8 @@ html_theme_options = {
|
||||
'seealso_border': '#2C2C2C',
|
||||
'note_bg': '#25272c',
|
||||
'note_border': '#2C2C2C',
|
||||
'warn_bg': 'rgb(82, 0, 0)',
|
||||
'warn_border': 'rgb(170, 0, 0)',
|
||||
}
|
||||
|
||||
autodoc_default_options = {
|
||||
|
||||
7
docs/source/pylib.data_step.rst
Normal file
7
docs/source/pylib.data_step.rst
Normal file
@@ -0,0 +1,7 @@
|
||||
pylib.data\_step module
|
||||
=======================
|
||||
|
||||
.. automodule:: pylib.data_step
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
7
docs/source/pylib.data_step_std.rst
Normal file
7
docs/source/pylib.data_step_std.rst
Normal file
@@ -0,0 +1,7 @@
|
||||
pylib.data\_step\_std module
|
||||
============================
|
||||
|
||||
.. automodule:: pylib.data_step_std
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
7
docs/source/pylib.helper.rst
Normal file
7
docs/source/pylib.helper.rst
Normal file
@@ -0,0 +1,7 @@
|
||||
pylib.helper module
|
||||
===================
|
||||
|
||||
.. automodule:: pylib.helper
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
@@ -19,6 +19,8 @@ Submodules
|
||||
.. toctree::
|
||||
|
||||
pylib.data
|
||||
pylib.data_step
|
||||
pylib.data_step_std
|
||||
pylib.date
|
||||
pylib.drawblock
|
||||
pylib.function
|
||||
@@ -27,5 +29,6 @@ Submodules
|
||||
pylib.geometry2d_plot
|
||||
pylib.geometry_plot
|
||||
pylib.geometry_plot_pylab
|
||||
pylib.helper
|
||||
pylib.mathematics
|
||||
pylib.time_of_day
|
||||
|
||||
378
examples/function_b_spline.py
Executable file
378
examples/function_b_spline.py
Executable file
@@ -0,0 +1,378 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
"""Example b-spline basis functions and curves.
|
||||
|
||||
:Date: 2020-01-02
|
||||
|
||||
.. module:: function_b_spline
|
||||
:platform: *nix, Windows
|
||||
:synopsis: Example b-spline basis functions and curves.
|
||||
|
||||
.. moduleauthor:: Daniel Weschke <daniel.weschke@directbox.de>
|
||||
"""
|
||||
from pylib.data import seq, unique_list
|
||||
from pylib.function import (
|
||||
sample_half_open, sample_half_open_seq,
|
||||
b_spline_basis, b_spline_knots, b_spline_curve_with_knots)
|
||||
from pylib.helper import timeit
|
||||
|
||||
from mpl_toolkits.mplot3d import Axes3D
|
||||
assert Axes3D
|
||||
import pylab
|
||||
|
||||
|
||||
def b_spline_basis_functions(knots, pmax=None):
|
||||
m = len(knots) - 1 # m = 3
|
||||
if pmax is None or pmax > m:
|
||||
pmax = m
|
||||
u = seq(knots[0], knots[-1], (knots[-1]-knots[0])/50)
|
||||
Nij = [[[b_spline_basis(knots, i, j)(uj) for uj in u] for
|
||||
i in range(m-j)] for j in range(pmax+1)]
|
||||
Nj = [[sum(i) for i in zip(*Nij[:][j])] for j in range(pmax+1)]
|
||||
return u, Nij, Nj
|
||||
|
||||
# @timeit('plot_matrix_seperate_single_sum')
|
||||
def plot_matrix_seperate_single_sum(u, Nij, Nj, pmax=None, figure_id=''):
|
||||
"""
|
||||
|
||||
::
|
||||
|
||||
i: knot span
|
||||
p: degree
|
||||
sum of all
|
||||
i=0 i=1 i=2 ... basis function
|
||||
+-----+-----+-----+-----+-----+
|
||||
p=0 | | | | | |
|
||||
+-----+-----+-----+-----+-----+
|
||||
p=1 | | | | | |
|
||||
+-----+-----+-----+-----+-----+
|
||||
... | | | | | |
|
||||
"""
|
||||
p = len(Nij[0]) - 1 # degree
|
||||
if pmax is None or pmax > p:
|
||||
pmax = p
|
||||
m = len(Nij[0]) # knot spans
|
||||
pylab.figure(figure_id)
|
||||
[([(pylab.subplot(pmax+1, m+1, i*(m+1)+j+1), pylab.plot(u, Nij[i][j])) for
|
||||
j in range(m-i)],
|
||||
pylab.subplot(pmax+1, m+1, (i+1)*(m+1)), pylab.plot(u, Nj[i])) for i in range(pmax+1)]
|
||||
|
||||
# @timeit('plot_matrix_joint_single_sum')
|
||||
def plot_matrix_joint_single_sum(u, Nij, Nj, pmax=None, figure_id=''):
|
||||
"""
|
||||
|
||||
::
|
||||
|
||||
p: degree
|
||||
p=0 p=1 p=2 ...
|
||||
+-----+-----+-----+-----
|
||||
singe basis functions | | | |
|
||||
+-----+-----+-----+-----
|
||||
sum of all basis functions | | | |
|
||||
+-----+-----+-----+-----
|
||||
"""
|
||||
m = len(Nij[0]) # knot spans
|
||||
p = m - 1 # degree
|
||||
n = len(Nij) - 1 # degrees calculated
|
||||
if pmax is None or pmax > p:
|
||||
pmax = p
|
||||
if n < pmax:
|
||||
pmax = n
|
||||
pylab.figure(figure_id)
|
||||
[(pylab.subplot(2, pmax+1, 0*(pmax+1)+j+1),[pylab.plot(u, Nij[j][i]) for
|
||||
i in range(p+1-j)],
|
||||
pylab.subplot(2, pmax+1, 1*(pmax+1)+j+1).plot(u, Nj[j])) for j in range(pmax+1)]
|
||||
|
||||
# @timeit('plot_b_spline_curve_with_knots')
|
||||
def plot_b_spline_curve_with_knots(
|
||||
Cu=None, C=None, U=None, CU=None, P=None, knots=True, figure_id='', ax=None):
|
||||
|
||||
if ax is None:
|
||||
fig = pylab.figure(figure_id)
|
||||
ax = fig.add_subplot(111, projection='3d')
|
||||
|
||||
# control points
|
||||
if P is not None:
|
||||
x, y, z = zip(*P)
|
||||
ax.plot(x, y, z, 'C1', linewidth=1)
|
||||
ax.plot(x, y, z, 'oC1', fillstyle='none')
|
||||
|
||||
# B-spline curve
|
||||
if Cu is None and C is not None and U is not None:
|
||||
Cu = sample_half_open(C, U[0], U[-1])
|
||||
if Cu is not None:
|
||||
ax.plot(*zip(*Cu))
|
||||
|
||||
if knots:
|
||||
# internal knots of clamped B-spline curve
|
||||
if CU is None and C is not None and U is not None:
|
||||
CU = sample_half_open_seq(C, unique_list(U))
|
||||
if CU is not None:
|
||||
ax.plot(*zip(*CU), '.C2')
|
||||
|
||||
return ax
|
||||
|
||||
def example1():
|
||||
# degree of basis functions
|
||||
# p = 0
|
||||
|
||||
# knots
|
||||
u0 = 0
|
||||
u1 = 1
|
||||
u2 = 2
|
||||
u3 = 3
|
||||
# knot vector
|
||||
U = (u0, u1, u2, u3)
|
||||
|
||||
# knot spans 0, 1 and 2 are [0,1), [1,2), [2,3)
|
||||
# m = len(U) - 1 = 3
|
||||
|
||||
# basis functions of degree 0 are
|
||||
# N_0,0(u) = 1 on [0,1) and 0 elsewhere,
|
||||
# N_1,0(u) = 1 on [1,2) and 0 elsewhere, and
|
||||
# N_2,0(u) = 1 on [2,3) and 0 elsewhere.
|
||||
|
||||
u, Nij, Nj = b_spline_basis_functions(U)
|
||||
plot_matrix_seperate_single_sum(u, Nij, Nj, figure_id='N1')
|
||||
|
||||
def example2():
|
||||
U = (0, 0.25, 0.5, 0.75, 1) # m = 4
|
||||
u, Nij, Nj = b_spline_basis_functions(U)
|
||||
plot_matrix_seperate_single_sum(u, Nij, Nj, pmax=3, figure_id='N2')
|
||||
|
||||
def example3():
|
||||
U = (0, 0, 0, 0.3, 0.5, 0.5, 0.6, 1, 1, 1)
|
||||
u, Nij, Nj = b_spline_basis_functions(U)
|
||||
plot_matrix_joint_single_sum(u, Nij, Nj, pmax=3, figure_id='N3')
|
||||
|
||||
def example4():
|
||||
# clamped B-spline curves
|
||||
U = (0, 0, 0, 0, 0.14, 0.28, 0.42, 0.57, 0.71, 0.85, 1, 1, 1, 1)
|
||||
m = len(U) - 1 # 13
|
||||
P = [[0,1], [.1,2], [.2,2], [.3,1], [.4,1],
|
||||
[.5,0], [.6,0], [.7,1], [.6,1], [.5,2]]
|
||||
P = [[0,1,0], [.1,2,0], [.2,2,0], [.3,1,1], [.4,1,0],
|
||||
[.5,0,0], [.6,0,0], [.7,1,0], [.6,1,0], [.5,2,0]]
|
||||
n = len(P) - 1 # 9
|
||||
|
||||
p = m - n - 1
|
||||
C = b_spline_curve_with_knots(p, P, U)
|
||||
# Cu = sample_half_open(C, U[0], U[-1])
|
||||
plot_b_spline_curve_with_knots(C=C, U=U, P=P, figure_id='N4')
|
||||
|
||||
def example5():
|
||||
P = [(48.0888108620491, 41.3794408583987, -0.372884555563078),
|
||||
(48.2156978454883, 41.4376819952444, -0.372981234249012),
|
||||
(48.3421249992392, 41.4949853259561, -0.373021507495587),
|
||||
(48.6647993346146, 41.6362394842807, -0.372960532155267),
|
||||
(48.8631931562637, 41.7184356658063, -0.372941685915525),
|
||||
(49.2627469867943, 41.8770863299231, -0.372965702682335),
|
||||
(49.4634735626356, 41.9533782153992, -0.37296977238557),
|
||||
(49.8669592828075, 42.1000733004711, -0.372963214968813),
|
||||
(50.0698102094774, 42.1705172272789, -0.372961547924453),
|
||||
(50.4773734605376, 42.3060584254141, -0.372966255857575),
|
||||
(50.6820075976044, 42.371132473348, -0.372964768740875),
|
||||
(51.0927404446479, 42.4960106864461, -0.37295550426811),
|
||||
(51.2989587087642, 42.5558597303533, -0.37296082550931),
|
||||
(51.7131511901618, 42.6711711778783, -0.372997134411391),
|
||||
(51.9206405900576, 42.7264781422536, -0.37297347298921),
|
||||
(52.3354542080309, 42.8306222566775, -0.372830008862485),
|
||||
(52.5444045251438, 42.8799268641912, -0.372905635604393),
|
||||
(52.7547311828766, 42.9295775362814, -0.373148784408123)]
|
||||
Uu = (0.0228378692889125,
|
||||
0.0649893839528174,
|
||||
0.130414237399236,
|
||||
0.195679174703882,
|
||||
0.260898113556269,
|
||||
0.326065686455556,
|
||||
0.391167888702703,
|
||||
0.456323551413636,
|
||||
0.521155975846261)
|
||||
mult = (4, 2, 2, 2, 2, 2, 2, 2, 4)
|
||||
U = [Uu[i] for i in range(len(Uu)) for j in range(mult[i])]
|
||||
|
||||
def basis():
|
||||
with timeit('b_spline_basis_functions'):
|
||||
u, Nij, Nj = b_spline_basis_functions(U, pmax=11)
|
||||
plot_matrix_joint_single_sum(u, Nij, Nj, figure_id='N5 N')
|
||||
|
||||
def curve(knots_cp=True):
|
||||
n = len(P) - 1
|
||||
m = len(U) - 1
|
||||
p = m - n - 1
|
||||
|
||||
with timeit('b_spline_curve_with_knots_sampled'):
|
||||
C = b_spline_curve_with_knots(p, P, U)
|
||||
Cu = sample_half_open(C, U[0], U[-1])
|
||||
plot_b_spline_curve_with_knots(
|
||||
Cu = Cu,
|
||||
CU = sample_half_open_seq(C, Uu) if knots_cp else None,
|
||||
P = P if knots_cp else None,
|
||||
figure_id='N5 C')
|
||||
|
||||
pylab.gca().set_zlim3d([-1, 0])
|
||||
|
||||
#basis()
|
||||
curve()
|
||||
#curve(False)
|
||||
|
||||
def example6():
|
||||
#
|
||||
# given data, data to compare with own generated data
|
||||
#
|
||||
P = [(48.0888108620491, 41.3794408583987, -0.372884555563078),
|
||||
(48.2156978454883, 41.4376819952444, -0.372981234249012),
|
||||
(48.3421249992392, 41.4949853259561, -0.373021507495587),
|
||||
(48.6647993346146, 41.6362394842807, -0.372960532155267),
|
||||
(48.8631931562637, 41.7184356658063, -0.372941685915525),
|
||||
(49.2627469867943, 41.8770863299231, -0.372965702682335),
|
||||
(49.4634735626356, 41.9533782153992, -0.37296977238557),
|
||||
(49.8669592828075, 42.1000733004711, -0.372963214968813),
|
||||
(50.0698102094774, 42.1705172272789, -0.372961547924453),
|
||||
(50.4773734605376, 42.3060584254141, -0.372966255857575),
|
||||
(50.6820075976044, 42.371132473348, -0.372964768740875),
|
||||
(51.0927404446479, 42.4960106864461, -0.37295550426811),
|
||||
(51.2989587087642, 42.5558597303533, -0.37296082550931),
|
||||
(51.7131511901618, 42.6711711778783, -0.372997134411391),
|
||||
(51.9206405900576, 42.7264781422536, -0.37297347298921),
|
||||
(52.3354542080309, 42.8306222566775, -0.372830008862485),
|
||||
(52.5444045251438, 42.8799268641912, -0.372905635604393),
|
||||
(52.7547311828766, 42.9295775362814, -0.373148784408123)]
|
||||
Uu = (0.0228378692889125,
|
||||
0.0649893839528174,
|
||||
0.130414237399236,
|
||||
0.195679174703882,
|
||||
0.260898113556269,
|
||||
0.326065686455556,
|
||||
0.391167888702703,
|
||||
0.456323551413636,
|
||||
0.521155975846261)
|
||||
mult = (4, 2, 2, 2, 2, 2, 2, 2, 4)
|
||||
U = [Uu[i] for i in range(len(Uu)) for j in range(mult[i])]
|
||||
|
||||
n = len(P) - 1 # number of control points - 1
|
||||
m = len(U) -1 # number of knot spans
|
||||
p = m - n - 1 # degree
|
||||
# print(p)
|
||||
|
||||
C = b_spline_curve_with_knots(p, P, U)
|
||||
Cu = sample_half_open(C, U[0], U[-1])
|
||||
ax = plot_b_spline_curve_with_knots(Cu=Cu, figure_id='N6')
|
||||
|
||||
#
|
||||
# now generate own knots
|
||||
#
|
||||
p = 3 # degree
|
||||
m = n + p + 1 # number of knot spans
|
||||
U = b_spline_knots(n, p)
|
||||
# U = (0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 14, 14, 14)
|
||||
# print(len(U), U)
|
||||
|
||||
C = b_spline_curve_with_knots(p, P, U)
|
||||
Cu = sample_half_open(C, U[0], U[-1])
|
||||
plot_b_spline_curve_with_knots(Cu=Cu, C=C, U=U, ax=ax)
|
||||
#pylab.gca().set_zlim3d([-1, 0])
|
||||
|
||||
def example7():
|
||||
P = [(-69.99999999999, 6.23746531921, 119.99999999999),
|
||||
(-69.99999999999, 5.72567326271, 120.0),
|
||||
(-70.0, 5.2192123782, 120.0),
|
||||
(-70.0, 4.718082665681, 120.0),
|
||||
(-70.0, 4.222284125153, 120.0),
|
||||
(-70.0, 3.731816756617, 120.0),
|
||||
(-70.0, 3.246680560071, 120.0),
|
||||
(-70.0, 2.766875535516, 120.0),
|
||||
(-70.0, 2.292401682953, 120.0),
|
||||
(-70.0, 1.82325900238, 120.0),
|
||||
(-70.0, 1.359447493799, 120.0),
|
||||
(-70.0, 0.900967157208, 120.0),
|
||||
(-70.0, 0.447817992609, 120.0),
|
||||
(-69.99999999999, -1.642767914458, 119.99999999999),
|
||||
(-69.95823302652, -3.284128624962, 119.96005936915),
|
||||
(-69.87482030195, -4.920567121601, 119.88028704462),
|
||||
(-69.7502001661, -6.548567099244, 119.76113869291),
|
||||
(-69.58513326705, -8.164660004507, 119.60341679526),
|
||||
(-69.38069590753, -9.765475979336, 119.40825949383),
|
||||
(-69.13826152984, -11.34779669959, 119.17711816806),
|
||||
(-68.85947036564, -12.90861011093, 118.91172378914),
|
||||
(-68.54618721656, -14.44516705927, 118.61404198996),
|
||||
(-68.20044740283, -15.95503981856, 118.28621691953),
|
||||
(-67.82439084537, -17.43618251348, 117.93050381741),
|
||||
(-67.42018430873, -18.88699343893, 117.54919035943),
|
||||
(-66.38758251206, -22.29350540161, 116.57795367665),
|
||||
(-65.73413448053, -24.21919416036, 115.96554908806),
|
||||
(-65.03556391343, -26.07956263873, 115.31370192302),
|
||||
(-64.29648522575, -27.87744521951, 114.62724902124),
|
||||
(-63.52042791056, -29.61397650413, 113.91024118834),
|
||||
(-62.71277001846, -31.2871331673, 113.16847249966),
|
||||
(-61.87901674025, -32.89613508726, 112.4077395496),
|
||||
(-61.02226890253, -34.44424317029, 111.63151855295),
|
||||
(-60.14386048877, -35.93622309031, 110.841629897),
|
||||
(-59.24623340527, -37.37387103089, 110.04091803203),
|
||||
(-58.33313678246, -38.756819007, 109.23340236149),
|
||||
(-57.40516397009, -40.08965381341, 108.42014822445),
|
||||
(-55.01642244455, -43.34968716212, 106.34685334397),
|
||||
(-53.53813210335, -45.21002358427, 105.08230356996),
|
||||
(-52.03458081272, -46.96355473328, 103.81650090025),
|
||||
(-50.50977333246, -48.61777575741, 102.55504546095),
|
||||
(-48.96692322622, -50.17949288551, 101.30260097008),
|
||||
(-47.40801072014, -51.65517742458, 100.06277532323),
|
||||
(-45.83395649691, -53.05076391735, 98.838417665337),
|
||||
(-44.24537288755, -54.37123987567, 97.632189028576),
|
||||
(-42.64319994423, -55.62048722024, 96.446976549361),
|
||||
(-41.02853017217, -56.80167054344, 95.285780596074),
|
||||
(-39.40157208613, -57.91802439479, 94.15110945761),
|
||||
(-37.76099941739, -58.97317114245, 93.044667943398),
|
||||
(-33.51657488475, -61.52870256173, 90.285109332808),
|
||||
(-30.89322834847, -62.94313830978, 88.677041723595),
|
||||
(-28.23238814008, -64.22251443102, 87.15321189152),
|
||||
(-25.55002271787, -65.36600940426, 85.732620462342),
|
||||
(-22.80465037824, -66.39367032451, 84.407541386373),
|
||||
(-20.07652968241, -67.27260606721, 83.231827543651),
|
||||
(-17.27816204332, -68.0519427367, 82.167075623263),
|
||||
(-14.44812618974, -68.69718956814, 81.25538726298),
|
||||
(-11.58521735637, -69.2186257426, 80.51004437835),
|
||||
(-8.697808521544, -69.60868640648, 79.943540692506),
|
||||
(-5.807821595725, -69.86923851767, 79.563401742733),
|
||||
(-2.906442029202, -70.00000000001, 79.372539331945),
|
||||
(0.372271370757, -69.99999999999, 79.372539331937),
|
||||
(0.762465017147, -69.99999999999, 79.372539331936),
|
||||
(1.17058093917, -69.99999999999, 79.372539331935),
|
||||
(1.596619136825, -69.99999999999, 79.372539331934),
|
||||
(2.040579610114, -69.99999999999, 79.372539331932),
|
||||
(2.502462359036, -69.99999999999, 79.372539331931),
|
||||
(2.982267383591, -69.99999999998, 79.37253933193),
|
||||
(3.479994683778, -69.99999999998, 79.372539331929),
|
||||
(3.995644259599, -69.99999999998, 79.372539331927),
|
||||
(4.529216111052, -69.99999999998, 79.372539331926),
|
||||
(5.080710238139, -69.99999999998, 79.372539331925),
|
||||
(5.650126640858, -69.99999999997, 79.372539331923),
|
||||
(6.23746531921, -69.99999999997, 79.372539331922)]
|
||||
Uu = (-3.932977778518,
|
||||
1.445001333941e-14,
|
||||
14.427668850884,
|
||||
34.626262491172,
|
||||
65.717581403178,
|
||||
114.40570375563,
|
||||
120.64191760942)
|
||||
mult = (14, 12, 12, 12, 12, 12, 14)
|
||||
U = [Uu[i] for i in range(len(Uu)) for j in range(mult[i])]
|
||||
|
||||
n = len(P) - 1 # number of control points - 1
|
||||
m = len(U) -1 # number of knot spans
|
||||
p = m - n - 1 # degree
|
||||
# print(p)
|
||||
|
||||
with timeit('b_spline_curve_with_knots'):
|
||||
C = b_spline_curve_with_knots(p, P, U)
|
||||
with timeit('sampling'):
|
||||
Cu = sample_half_open(C, U[0], U[-1])
|
||||
with timeit('plotting'):
|
||||
plot_b_spline_curve_with_knots(Cu=Cu, figure_id='N7')
|
||||
|
||||
# b_spline_curve_with_knots took 0.005 ms, 0.004 ms, 0.002 ms
|
||||
# sampling took 20542.242 ms, 21172.614 ms, 21136.981 ms
|
||||
# plotting took 29.950 ms, 28.201 ms, 26.364 ms
|
||||
|
||||
if __name__ == "__main__":
|
||||
example7()
|
||||
142
pylib/data.py
142
pylib/data.py
@@ -1,8 +1,9 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
"""Read and write data to or from file and manipulate data structures.
|
||||
"""Read and write data to or from file and manipulate data
|
||||
structures.
|
||||
|
||||
:Date: 2019-10-11
|
||||
:Date: 2019-12-28
|
||||
|
||||
.. module:: data
|
||||
:platform: *nix, Windows
|
||||
@@ -13,6 +14,7 @@
|
||||
import math
|
||||
import pickle
|
||||
import collections
|
||||
import re
|
||||
|
||||
def issequence(obj):
|
||||
"""
|
||||
@@ -43,11 +45,25 @@ def issequence(obj):
|
||||
"""
|
||||
return isinstance(obj, collections.abc.Sequence)
|
||||
|
||||
def read(file_name, x_column, y_column, default=None, verbose=False):
|
||||
def read(file_name):
|
||||
"""Read ascii data file.
|
||||
|
||||
:param filename: file to read
|
||||
:type filename: str
|
||||
|
||||
:returns: file content
|
||||
:rtype: str
|
||||
"""
|
||||
file_str = ''
|
||||
with open(file_name) as file:
|
||||
file_str = file.read()
|
||||
return file_str
|
||||
|
||||
def read_columns(file_name, x_column, y_column, default=None, verbose=False):
|
||||
"""Read ascii data file.
|
||||
|
||||
:param file_name: file to read
|
||||
:type file_name: str
|
||||
:param x_column: column index for the x data (first column is 0)
|
||||
:type x_column: int
|
||||
:param y_column: column index for the y data (first column is 0)
|
||||
@@ -60,8 +76,6 @@ def read(file_name, x_column, y_column, default=None, verbose=False):
|
||||
:returns: x and y
|
||||
:rtype: tuple(list, list)
|
||||
"""
|
||||
import re
|
||||
|
||||
x = default
|
||||
y = default
|
||||
|
||||
@@ -132,6 +146,14 @@ def store(file_name, object_data):
|
||||
# every dump needs a load
|
||||
pickle.dump(object_data, output, pickle.HIGHEST_PROTOCOL)
|
||||
|
||||
def print_list(lst):
|
||||
"""Print list, one list element per line.
|
||||
|
||||
:param lst: list to print
|
||||
:type lst: list
|
||||
"""
|
||||
[print(row) for row in lst]
|
||||
|
||||
def fold_list(lst, n):
|
||||
"""Convert one-dimensional kx1 array (list) to two-dimensional mxn
|
||||
array. m = k / n
|
||||
@@ -203,6 +225,24 @@ def seq(start, stop=None, step=1):
|
||||
lst = [round(start + step*i, exponent) for i in range(n)]
|
||||
return lst
|
||||
|
||||
def unique_list_hashable(sequence):
|
||||
"""
|
||||
faster using set() but elements of the sequence must be hashable.
|
||||
unhashable types: 'list'
|
||||
"""
|
||||
# https://stackoverflow.com/a/37163210
|
||||
used = set()
|
||||
# .add(x) will always be falsy
|
||||
return [x for x in sequence if x not in used and (used.add(x) or True)]
|
||||
|
||||
def unique_list(sequence):
|
||||
"""
|
||||
"""
|
||||
# https://stackoverflow.com/a/37163210
|
||||
used = []
|
||||
# .append(x) will always be falsy
|
||||
return [x for x in sequence if x not in used and (used.append(x) or True)]
|
||||
|
||||
def unique_ending(ids, n=1):
|
||||
"""From id list get list with unique ending.
|
||||
|
||||
@@ -214,12 +254,11 @@ def unique_ending(ids, n=1):
|
||||
:returns: unique ending of ids
|
||||
:rtype: list
|
||||
"""
|
||||
if ids is not None:
|
||||
x = [idi[-n:] for idi in ids]
|
||||
if len(x) > len(set(x)):
|
||||
return unique_ending(ids, n+1)
|
||||
else:
|
||||
return x
|
||||
x = [idi[-n:] for idi in ids]
|
||||
if len(x) > len(set(x)):
|
||||
return unique_ending(ids, n+1)
|
||||
else:
|
||||
return x
|
||||
|
||||
def get_id(ids, uide):
|
||||
"""Get full id from unique id ending.
|
||||
@@ -234,3 +273,84 @@ def get_id(ids, uide):
|
||||
"""
|
||||
# take first element, because we know it is a unique ending
|
||||
return [idi for idi in ids if idi.endswith(uide)][0]
|
||||
|
||||
def find_last(sequence, pattern):
|
||||
"""Find last last occurance in sequence (text)
|
||||
|
||||
:param sequence: text to search in
|
||||
:type sequence: str
|
||||
:param pattern: search pattern
|
||||
:type pattern: str
|
||||
|
||||
:returns: index (-1 if pattern not in sequence)
|
||||
:rtype: int
|
||||
"""
|
||||
if pattern in sequence:
|
||||
return len(sequence)-1 - sequence[::-1].find(pattern)
|
||||
return -1
|
||||
|
||||
def str_between(text, left, right):
|
||||
"""Get text between two pattern.
|
||||
|
||||
Text can be multi-line.
|
||||
|
||||
:param text: text to search in
|
||||
:type text: str
|
||||
:param left: left pattern
|
||||
:type left: str
|
||||
:param right: right pattern
|
||||
:type right: str
|
||||
|
||||
:returns: text between the left and right pattern
|
||||
:rtype: str
|
||||
"""
|
||||
try:
|
||||
return re.search(left+'(.+?)'+right, text, re.DOTALL).group(1)
|
||||
except:
|
||||
return ''
|
||||
|
||||
def str_to_list(string, delimiter=';\n', newline_replacement=''):
|
||||
r"""Converts a string with block information into a list.
|
||||
|
||||
This function un-wraps multi-line block information into one line.
|
||||
|
||||
:param string: string with block information
|
||||
:type string: str
|
||||
:param delimiter: block delimiter (default = ';\n'). This will be
|
||||
removed from the resulting list.
|
||||
:type delimiter: str
|
||||
:param newline_replacement: block lines replacement (default = '')
|
||||
:type newline_replacement: str
|
||||
|
||||
:returns: list of block information
|
||||
:rtype: list
|
||||
|
||||
.. note:: Every line is left striped. Empty line are ignored.
|
||||
|
||||
:Example:
|
||||
|
||||
::
|
||||
|
||||
before (string):
|
||||
FILE_DESCRIPTION(('Open CASCADE Model'),'2;1');
|
||||
FILE_NAME('Open CASCADE Shape Model','2019-10-14T14:32:20',('Author'),(
|
||||
'Open CASCADE'),'Open CASCADE STEP processor 7.1','Open CASCADE 7.1'
|
||||
,'Unknown');
|
||||
FILE_SCHEMA(('AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }'));
|
||||
|
||||
after (list elements one per line):
|
||||
FILE_DESCRIPTION(('Open CASCADE Model'),'2;1')
|
||||
FILE_NAME('Open CASCADE Shape Model','2019-10-14T14:32:20',('Author'),('Open CASCADE'),'Open CASCADE STEP processor 7.1','Open CASCADE 7.1','Unknown')
|
||||
FILE_SCHEMA(('AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }'))
|
||||
"""
|
||||
# for example blocks are seperated by ;\n
|
||||
blocks = string.split(delimiter)
|
||||
lines = []
|
||||
for block in blocks:
|
||||
# un-wrap block to single line
|
||||
# remove \n and replace with newline_replacement
|
||||
line = newline_replacement.join([row.lstrip() for
|
||||
row in block.split('\n')])
|
||||
# append line if True (if it has some content)
|
||||
lines.append(line) if bool(line) else False
|
||||
return lines
|
||||
|
||||
682
pylib/data_step.py
Normal file
682
pylib/data_step.py
Normal file
@@ -0,0 +1,682 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
"""STEP reader.
|
||||
|
||||
:Date: 2020-01-03
|
||||
|
||||
.. module:: data_step
|
||||
:platform: *nix, Windows
|
||||
:synopsis: STEP reader.
|
||||
|
||||
.. moduleauthor:: Daniel Weschke <daniel.weschke@directbox.de>
|
||||
"""
|
||||
from .data import read, find_last, str_between, str_to_list
|
||||
from .data_step_std import (
|
||||
CARTESIAN_POINT, VERTEX_POINT, DIRECTION, VECTOR, LINE,
|
||||
AXIS2_PLACEMENT_2D, AXIS2_PLACEMENT_3D, CIRCLE, SURFACE_CURVE,
|
||||
SEAM_CURVE, EDGE_CURVE, B_SPLINE_CURVE_WITH_KNOTS,
|
||||
ORIENTED_EDGE, EDGE_LOOP, ELLIPSE
|
||||
)
|
||||
from .mathematics import vector
|
||||
from .geometry import (
|
||||
World, Line, Point, Circle, CS, ArcCircle, ArcEllipse, Direction,
|
||||
Polyline, Ellipse, B_spline_curve_with_knots, ArcBSplineCurveWithKnots
|
||||
)
|
||||
|
||||
class step:
|
||||
r"""STEP reader class.
|
||||
|
||||
1st read a STEP file.
|
||||
2nd convert header and data section string to list of commands.
|
||||
|
||||
The STEP file string can have commands distributed over several
|
||||
lines, the commands are seperated by ``;\n``. This class un-wraps
|
||||
each command into one line (remove ``\n``) and removes empty lines.
|
||||
|
||||
:Example:
|
||||
|
||||
::
|
||||
|
||||
header part of a step file (between HEADER; and ENDSEC;):
|
||||
FILE_DESCRIPTION(('Open CASCADE Model'),'2;1');
|
||||
FILE_NAME('Open CASCADE Shape Model','2019-10-14T14:32:20',('Author'),(
|
||||
'Open CASCADE'),'Open CASCADE STEP processor 7.1','Open CASCADE 7.1'
|
||||
,'Unknown');
|
||||
FILE_SCHEMA(('AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }'));
|
||||
|
||||
will result in (but as a list):
|
||||
FILE_DESCRIPTION(('Open CASCADE Model'),'2;1')
|
||||
FILE_NAME('Open CASCADE Shape Model','2019-10-14T14:32:20',('Author'),('Open CASCADE'),'Open CASCADE STEP processor 7.1','Open CASCADE 7.1','Unknown')
|
||||
FILE_SCHEMA(('AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }'))
|
||||
"""
|
||||
def __init__(self, file_name):
|
||||
self.file_str = read(file_name)
|
||||
|
||||
step_str = str_between(self.file_str, 'ISO-10303-21;',
|
||||
'END-ISO-10303-21;')
|
||||
if not step_str:
|
||||
raise ValueError('File is not a step file')
|
||||
|
||||
header_str = str_between(step_str, 'HEADER;', 'ENDSEC;')
|
||||
self.header = str_to_list(string=header_str, delimiter=';\n',
|
||||
newline_replacement='')
|
||||
data_str = str_between(step_str, 'DATA;', 'ENDSEC;')
|
||||
self.data = str_to_list(string=data_str, delimiter=';\n',
|
||||
newline_replacement='')
|
||||
|
||||
def str_to_cmd_args(cmd_str):
|
||||
"""
|
||||
Using negative lookahead to match all the commas which are not
|
||||
inside a parenthesis and then split the string at the commas.
|
||||
|
||||
:Example:
|
||||
|
||||
::
|
||||
|
||||
CARTESIAN_POINT('',(0.E+000,0.E+000,0.E+000))
|
||||
will become
|
||||
command = 'CARTESIAN_POINT'
|
||||
arguments = ['', '(0.E+000,0.E+000,0.E+000)']
|
||||
"""
|
||||
import re
|
||||
|
||||
command = cmd_str[0:cmd_str.find('(')]
|
||||
inside_parenthesis = cmd_str[(cmd_str.find('(')+1):find_last(cmd_str, ')')]
|
||||
arguments = re.split(r',\s*(?![^()]*\))', inside_parenthesis)
|
||||
# arguments = [i.strip() for i in inside_parenthesis.split(',')] # does not work for arguments with commas inside the parenthsis
|
||||
return command, arguments
|
||||
|
||||
def data_cmds_to_data_dict(data_cmds, verbose=False):
|
||||
"""Create dict with step objects
|
||||
|
||||
1st it creats keys equal to the number id string and values with
|
||||
the command string.
|
||||
|
||||
2nd it creats keys for different step object types to dict all
|
||||
commands as new created objects of that type.
|
||||
|
||||
:Example:
|
||||
|
||||
::
|
||||
|
||||
from:
|
||||
["#12 = CARTESIAN_POINT('',(0.E+000,0.E+000,0.E+000))",
|
||||
"#22 = VERTEX_POINT('',#23)"]
|
||||
to:
|
||||
{'#12': 'CARTESIAN_POINT('',(0.E+000,0.E+000,0.E+000))',
|
||||
'#22': 'VERTEX_POINT('',#23)'}
|
||||
|
||||
additional
|
||||
{
|
||||
'cartesian_points': {
|
||||
'#12': pointer_to_new_created_point_object,
|
||||
...
|
||||
},
|
||||
'vertex_points': {
|
||||
'#22': pointer_to_new_created_vertex_object,
|
||||
...
|
||||
},
|
||||
...
|
||||
}
|
||||
"""
|
||||
data_dict = {}
|
||||
data_dict['cmds'] = {}
|
||||
data_dict['cartesian_point'] = {}
|
||||
data_dict['vertex_point'] = {}
|
||||
data_dict['direction'] = {}
|
||||
data_dict['vector'] = {}
|
||||
data_dict['line'] = {}
|
||||
data_dict['circle'] = {}
|
||||
data_dict['ellipse'] = {}
|
||||
data_dict['axis2_placement_2d'] = {}
|
||||
data_dict['axis2_placement_3d'] = {}
|
||||
data_dict['surface_curve'] = {}
|
||||
data_dict['seam_curve'] = {}
|
||||
data_dict['b_spline_curve_with_knots'] = {}
|
||||
data_dict['edge_curve'] = {}
|
||||
data_dict['oriented_edge'] = {}
|
||||
data_dict['edge_loop'] = {}
|
||||
processed_cmds = 0
|
||||
ignored_cmds = 0
|
||||
for data_cmd in data_cmds:
|
||||
#print(data_cmd)
|
||||
key, value = data_cmd.split('=')
|
||||
key, value = key.strip(), value.strip()
|
||||
command, arguments = str_to_cmd_args(value)
|
||||
data_dict['cmds'][key] = (command, arguments)
|
||||
# command can be empty (empty string: '')
|
||||
# #2052 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','') )
|
||||
try: # do if command.lower() is in data_dict else do nothing
|
||||
data_dict[command.lower()][key] = None
|
||||
processed_cmds += 1
|
||||
except:
|
||||
ignored_cmds += 1
|
||||
print('processed_cmds', processed_cmds)
|
||||
print('ignored_cmds', ignored_cmds)
|
||||
|
||||
#
|
||||
# Order is important!
|
||||
#
|
||||
|
||||
#
|
||||
# POINT objects
|
||||
#
|
||||
# create point objects, these will be referenced by vertex_points
|
||||
# #12 = CARTESIAN_POINT('',(0.E+000,0.E+000,0.E+000));
|
||||
for key in data_dict['cartesian_point']:
|
||||
command, arguments = data_dict['cmds'][key]
|
||||
data_dict['cartesian_point'][key] = CARTESIAN_POINT(
|
||||
arguments[0],
|
||||
eval(arguments[1])) # tuple of floats # TODO: not use eval!
|
||||
# vertex_points references to cartesian_points
|
||||
# #22 = VERTEX_POINT('',#23);
|
||||
# #23 = CARTESIAN_POINT('',(0.E+000,0.E+000,0.E+000));
|
||||
for key in data_dict['vertex_point']:
|
||||
command, arguments = data_dict['cmds'][key]
|
||||
data_dict['vertex_point'][key] = VERTEX_POINT(
|
||||
arguments[0],
|
||||
data_dict['cartesian_point'][arguments[1]])
|
||||
|
||||
#
|
||||
# EDGE objects
|
||||
#
|
||||
# DIRECTIONs
|
||||
# #30 = DIRECTION('',(0.E+000,0.E+000,1.));
|
||||
for key in data_dict['direction']:
|
||||
command, arguments = data_dict['cmds'][key]
|
||||
data_dict['direction'][key] = DIRECTION(
|
||||
arguments[0],
|
||||
eval(arguments[1])) # tuple of floats # TODO: not use eval!
|
||||
# VECTORs references to DIRECTIONs
|
||||
# #29 = VECTOR('',#30,1.);
|
||||
# #30 = DIRECTION('',(0.E+000,0.E+000,1.));
|
||||
for key in data_dict['vector']:
|
||||
command, arguments = data_dict['cmds'][key]
|
||||
data_dict['vector'][key] = VECTOR(
|
||||
arguments[0],
|
||||
data_dict['direction'][arguments[1]],
|
||||
eval(arguments[2])) # TODO: not use eval!
|
||||
# LINEs references to cartesian_point and vector
|
||||
# #27 = LINE('',#28,#29);
|
||||
# #28 = CARTESIAN_POINT('',(0.E+000,0.E+000,0.E+000));
|
||||
# #29 = VECTOR('',#30,1.);
|
||||
for key in data_dict['line']:
|
||||
command, arguments = data_dict['cmds'][key]
|
||||
data_dict['line'][key] = LINE(
|
||||
arguments[0],
|
||||
data_dict['cartesian_point'][arguments[1]],
|
||||
data_dict['vector'][arguments[2]])
|
||||
# AXIS2_PLACEMENT_2Ds references to location (CARTESIAN_POINT) and ref_direction (DIRECTION)
|
||||
# #50 = AXIS2_PLACEMENT_2D('',#51,#52);
|
||||
# #51 = CARTESIAN_POINT('',(0.,0.));
|
||||
# #52 = DIRECTION('',(1.,0.));
|
||||
for key in data_dict['axis2_placement_2d']:
|
||||
command, arguments = data_dict['cmds'][key]
|
||||
data_dict['axis2_placement_2d'][key] = AXIS2_PLACEMENT_2D(
|
||||
arguments[0],
|
||||
data_dict['cartesian_point'][arguments[1]],
|
||||
data_dict['direction'][arguments[2]])
|
||||
# AXIS2_PLACEMENT_3Ds references to location (CARTESIAN_POINT), axis (DIRECTION) and ref_direction (DIRECTION)
|
||||
# #26 = AXIS2_PLACEMENT_3D('',#27,#28,#29);
|
||||
# #27 = CARTESIAN_POINT('',(0.,0.,10.));
|
||||
# #28 = DIRECTION('',(0.,0.,1.));
|
||||
# #29 = DIRECTION('',(1.,0.,-0.));
|
||||
for key in data_dict['axis2_placement_3d']:
|
||||
command, arguments = data_dict['cmds'][key]
|
||||
data_dict['axis2_placement_3d'][key] = AXIS2_PLACEMENT_3D(
|
||||
arguments[0],
|
||||
data_dict['cartesian_point'][arguments[1]],
|
||||
data_dict['direction'][arguments[2]],
|
||||
data_dict['direction'][arguments[3]])
|
||||
# CIRCLE references to AXIS2_PLACEMENT_3D and radius
|
||||
# #25 = CIRCLE('',#26,5.);
|
||||
# #26 = AXIS2_PLACEMENT_3D('',#27,#28,#29);
|
||||
for key in data_dict['circle']:
|
||||
command, arguments = data_dict['cmds'][key]
|
||||
axis2_placement_cmd, axis2_placement_args = data_dict['cmds'][arguments[1]]
|
||||
if axis2_placement_cmd == 'AXIS2_PLACEMENT_3D':
|
||||
axis2_placement = data_dict['axis2_placement_3d'][arguments[1]]
|
||||
elif axis2_placement_cmd == 'AXIS2_PLACEMENT_2D':
|
||||
axis2_placement = data_dict['axis2_placement_2d'][arguments[1]]
|
||||
data_dict['circle'][key] = CIRCLE(
|
||||
arguments[0],
|
||||
axis2_placement,
|
||||
eval(arguments[2])) # TODO: not use eval!
|
||||
# ELLIPSE references to AXIS2_PLACEMENT_3D and both semi axes
|
||||
# #1049 = ELLIPSE('',#1050,176.13914953808,100.);
|
||||
# #1050 = AXIS2_PLACEMENT_3D('',#1051,#1052,#1053);
|
||||
for key in data_dict['ellipse']:
|
||||
command, arguments = data_dict['cmds'][key]
|
||||
axis2_placement_cmd, axis2_placement_args = data_dict['cmds'][arguments[1]]
|
||||
if axis2_placement_cmd == 'AXIS2_PLACEMENT_3D':
|
||||
axis2_placement = data_dict['axis2_placement_3d'][arguments[1]]
|
||||
elif axis2_placement_cmd == 'AXIS2_PLACEMENT_2D':
|
||||
axis2_placement = data_dict['axis2_placement_2d'][arguments[1]]
|
||||
data_dict['ellipse'][key] = ELLIPSE(
|
||||
arguments[0],
|
||||
axis2_placement,
|
||||
eval(arguments[2]), # TODO: not use eval!
|
||||
eval(arguments[3])) # TODO: not use eval!
|
||||
# B_SPLINE_CURVE_WITH_KNOTS references to list of CARTESIAN_POINTs
|
||||
# #2195=B_SPLINE_CURVE_WITH_KNOTS('',3,(#43614,#43615,#43616,#43617,#43618,
|
||||
# #43619,#43620,#43621,#43622,#43623,#43624,#43625,#43626,#43627,#43628,#43629,
|
||||
# #43630,#43631,#43632,#43633),.UNSPECIFIED.,.F.,.F.,(4,2,2,2,2,2,2,2,2,4),
|
||||
# (-0.540362356556626,-0.521155983847334,-0.45632355837375,-0.391167894616668,
|
||||
# -0.32606569132423,-0.260898117378603,-0.19567917747905,-0.130414239126491,
|
||||
# -0.0649893846296135,-0.0228378692889149),.UNSPECIFIED.);
|
||||
# #43614=CARTESIAN_POINT('Ctrl Pts',(-0.852590969048745,68.3094592905054,1.00613961606655E-15));
|
||||
# #43615=CARTESIAN_POINT('Ctrl Pts',(-0.879956199816603,68.2515804555212,8.67420237522527E-16));
|
||||
# ...
|
||||
for key in data_dict['b_spline_curve_with_knots']:
|
||||
command, arguments = data_dict['cmds'][key]
|
||||
data_dict['b_spline_curve_with_knots'][key] = B_SPLINE_CURVE_WITH_KNOTS(
|
||||
arguments[0],
|
||||
int(arguments[1]),
|
||||
tuple(data_dict['cartesian_point'][i] for
|
||||
i in str_to_cmd_args(arguments[2])[1]),
|
||||
arguments[3],
|
||||
arguments[4],
|
||||
arguments[5],
|
||||
eval(arguments[6]), # TODO: not use eval!
|
||||
eval(arguments[7]), # TODO: not use eval!
|
||||
arguments[8]
|
||||
)
|
||||
# SURFACE_CURVE references to a LINE and a list of (two) PCURVEs and a ?
|
||||
# #26 = SURFACE_CURVE('',#27,(#31,#43),.PCURVE_S1.);
|
||||
# #27 = LINE('',#28,#29);
|
||||
# #31 = PCURVE('',#32,#37);
|
||||
# #32 = PLANE('',#33);
|
||||
# #33 = AXIS2_PLACEMENT_3D('',#34,#35,#36);
|
||||
# #37 = DEFINITIONAL_REPRESENTATION('',(#38),#42);
|
||||
# #38 = LINE('',#39,#40);
|
||||
# #42 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','') );
|
||||
# #43 = PCURVE('',#44,#49);
|
||||
# #44 = PLANE('',#45);
|
||||
# #45 = AXIS2_PLACEMENT_3D('',#46,#47,#48);
|
||||
# #49 = DEFINITIONAL_REPRESENTATION('',(#50),#54);
|
||||
# #50 = LINE('',#51,#52);
|
||||
# #54 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','') );
|
||||
# #24 = SURFACE_CURVE('',#25,(#30,#42),.PCURVE_S1.);
|
||||
# #25 = CIRCLE('',#26,5.);
|
||||
# #30 = PCURVE('',#31,#36);
|
||||
# #31 = CONICAL_SURFACE('',#32,10.,0.463647609001);
|
||||
# #32 = AXIS2_PLACEMENT_3D('',#33,#34,#35);
|
||||
# #36 = DEFINITIONAL_REPRESENTATION('',(#37),#41);
|
||||
# #37 = LINE('',#38,#39);
|
||||
# #41 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','') );
|
||||
# #42 = PCURVE('',#43,#48);
|
||||
# #43 = PLANE('',#44);
|
||||
# #44 = AXIS2_PLACEMENT_3D('',#45,#46,#47);
|
||||
# #48 = DEFINITIONAL_REPRESENTATION('',(#49),#53);
|
||||
# #49 = CIRCLE('',#50,5.);
|
||||
# #50 = AXIS2_PLACEMENT_2D('',#51,#52);
|
||||
# #51 = CARTESIAN_POINT('',(0.,0.));
|
||||
# #52 = DIRECTION('',(1.,0.));
|
||||
# #53 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','') );
|
||||
# #243 = SURFACE_CURVE('',#244,(#319,#415),.PCURVE_S1.);
|
||||
# #244 = B_SPLINE_CURVE_WITH_KNOTS();
|
||||
for key in data_dict['surface_curve']:
|
||||
command, arguments = data_dict['cmds'][key]
|
||||
curve_3d_cmd, curve3d_args = data_dict['cmds'][arguments[1]]
|
||||
if curve_3d_cmd == 'LINE':
|
||||
curve_3d = data_dict['line'][arguments[1]]
|
||||
elif curve_3d_cmd == 'CIRCLE':
|
||||
curve_3d = data_dict['circle'][arguments[1]]
|
||||
elif curve_3d_cmd == 'ELLIPSE':
|
||||
curve_3d = data_dict['ellipse'][arguments[1]]
|
||||
elif curve_3d_cmd == 'B_SPLINE_CURVE_WITH_KNOTS':
|
||||
curve_3d = data_dict['b_spline_curve_with_knots'][arguments[1]]
|
||||
else:
|
||||
curve_3d = arguments[1]
|
||||
if verbose:
|
||||
print('surface_curve', key, 'unknown curve_3d', curve_3d)
|
||||
data_dict['surface_curve'][key] = SURFACE_CURVE(
|
||||
arguments[0],
|
||||
curve_3d,
|
||||
arguments[2],
|
||||
arguments[3])
|
||||
# SEAM_CURVE references to a Line and a list of (two) PCURVEs and a ?
|
||||
# #58 = SEAM_CURVE('',#59,(#63,#70),.PCURVE_S1.);
|
||||
# #59 = LINE('',#60,#61);
|
||||
# #63 = PCURVE('',#31,#64);
|
||||
# #31 = CONICAL_SURFACE('',#32,10.,0.463647609001);
|
||||
# #32 = AXIS2_PLACEMENT_3D('',#33,#34,#35);
|
||||
# #33 = CARTESIAN_POINT('',(0.,0.,0.));
|
||||
# #34 = DIRECTION('',(-0.,-0.,-1.));
|
||||
# #35 = DIRECTION('',(1.,0.,-0.));
|
||||
# #64 = DEFINITIONAL_REPRESENTATION('',(#65),#69);
|
||||
# #65 = LINE('',#66,#67);
|
||||
# #69 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','') );
|
||||
# #70 = PCURVE('',#31,#71);
|
||||
# #31 = CONICAL_SURFACE('',#32,10.,0.463647609001);
|
||||
# #32 = AXIS2_PLACEMENT_3D('',#33,#34,#35);
|
||||
# #33 = CARTESIAN_POINT('',(0.,0.,0.));
|
||||
# #34 = DIRECTION('',(-0.,-0.,-1.));
|
||||
# #35 = DIRECTION('',(1.,0.,-0.));
|
||||
# #71 = DEFINITIONAL_REPRESENTATION('',(#72),#76);
|
||||
# #72 = LINE('',#73,#74);
|
||||
# #76 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','') );
|
||||
for key in data_dict['seam_curve']:
|
||||
command, arguments = data_dict['cmds'][key]
|
||||
curve_3d_cmd, curve3d_args = data_dict['cmds'][arguments[1]]
|
||||
if curve_3d_cmd == 'LINE':
|
||||
curve_3d = data_dict['line'][arguments[1]]
|
||||
elif curve_3d_cmd == 'CIRCLE':
|
||||
curve_3d = data_dict['circle'][arguments[1]]
|
||||
else:
|
||||
curve_3d = arguments[1]
|
||||
if verbose:
|
||||
print('seam_curve', key, 'unknown curve_3d', curve_3d)
|
||||
data_dict['seam_curve'][key] = SEAM_CURVE(
|
||||
arguments[0],
|
||||
curve_3d,
|
||||
arguments[2],
|
||||
arguments[3])
|
||||
# EDGE_CURVE references to two VERTEX_POINTs, a CURVE and a BOOLEAN
|
||||
# #21 = EDGE_CURVE('',#22,#24,#26,.T.);
|
||||
# #22 = VERTEX_POINT('',#23);
|
||||
# #24 = VERTEX_POINT('',#25);
|
||||
# #26 = SURFACE_CURVE('',#27,(#31,#43),.PCURVE_S1.);
|
||||
# #55 = EDGE_CURVE('',#56,#22,#58,.T.);
|
||||
# #56 = VERTEX_POINT('',#57);
|
||||
# #22 = VERTEX_POINT('',#23);
|
||||
# #58 = SEAM_CURVE('',#59,(#63,#70),.PCURVE_S1.);
|
||||
# #21187=EDGE_CURVE('',#15685,#15685,#12509,.T.);
|
||||
# #15685=VERTEX_POINT('',#230114);
|
||||
# #15685=VERTEX_POINT('',#230114);
|
||||
# #12509=CIRCLE('',#37712,11.1464466094067);
|
||||
# #15689=EDGE_CURVE('',#12514,#12512,#2195,.T.);
|
||||
# #12514=VERTEX_POINT('',#43613);
|
||||
# #12512=VERTEX_POINT('',#43610);
|
||||
# #2195=B_SPLINE_CURVE_WITH_KNOTS(...)
|
||||
for key in data_dict['edge_curve']:
|
||||
command, arguments = data_dict['cmds'][key]
|
||||
geometry_cmd, geometry_args = data_dict['cmds'][arguments[3]]
|
||||
if geometry_cmd == 'SURFACE_CURVE':
|
||||
edge_geometry = data_dict['surface_curve'][arguments[3]]
|
||||
elif geometry_cmd == 'SEAM_CURVE':
|
||||
edge_geometry = data_dict['seam_curve'][arguments[3]]
|
||||
elif geometry_cmd == 'LINE':
|
||||
edge_geometry = data_dict['line'][arguments[3]]
|
||||
elif geometry_cmd == 'CIRCLE':
|
||||
edge_geometry = data_dict['circle'][arguments[3]]
|
||||
elif geometry_cmd == 'B_SPLINE_CURVE_WITH_KNOTS':
|
||||
edge_geometry = data_dict['b_spline_curve_with_knots'][arguments[3]]
|
||||
else:
|
||||
edge_geometry = arguments[3]
|
||||
if verbose:
|
||||
print('edge_curve', key, 'unknown edge_geometry', geometry_cmd)
|
||||
data_dict['edge_curve'][key] = EDGE_CURVE(
|
||||
arguments[0],
|
||||
data_dict['vertex_point'][arguments[1]],
|
||||
data_dict['vertex_point'][arguments[2]],
|
||||
edge_geometry,
|
||||
arguments[4]
|
||||
)
|
||||
|
||||
#
|
||||
# poly-curve objects
|
||||
# to speed things up use EDGE_LOOP to create wireframes instead
|
||||
# of plotting every single EDGE_CURVE in it's own plot cmd
|
||||
#
|
||||
# ORIENTED_EDGE references to two re-declared attributes from a CURVE, a CURVE and a BOOLEAN
|
||||
# 83 = ORIENTED_EDGE('',*,*,#84,.F.);
|
||||
# #84 = EDGE_CURVE('',#85,#87,#89,.T.);
|
||||
# ORIENTED_EDGE will have multiple same edges, because connected faces
|
||||
# use the same curve (about double as EDGE_CURVE)
|
||||
# BUT combined with EDGE_LOOP the number of concatenated curves decrease.
|
||||
# (about half to 2/3 of EDGE_CURVE)
|
||||
for key in data_dict['oriented_edge']:
|
||||
command, arguments = data_dict['cmds'][key]
|
||||
edge_element_cmd, edge_element_args = data_dict['cmds'][arguments[3]]
|
||||
if edge_element_cmd == 'EDGE_CURVE':
|
||||
edge_element = data_dict['edge_curve'][arguments[3]]
|
||||
else:
|
||||
edge_element = arguments[3]
|
||||
if verbose:
|
||||
print('oriented_edge', key, 'unknown edge_element', edge_element_cmd)
|
||||
data_dict['oriented_edge'][key] = ORIENTED_EDGE(
|
||||
arguments[0],
|
||||
arguments[1],
|
||||
arguments[2],
|
||||
edge_element,
|
||||
arguments[4]
|
||||
)
|
||||
# EDGE_LOOP
|
||||
# #82 = EDGE_LOOP('',(#83,#118,#146,#174));
|
||||
# #83 = ORIENTED_EDGE('',*,*,#84,.F.);
|
||||
# #118 = ORIENTED_EDGE('',*,*,#119,.T.);
|
||||
# #146 = ORIENTED_EDGE('',*,*,#147,.T.);
|
||||
# #174 = ORIENTED_EDGE('',*,*,#175,.F.);
|
||||
for key in data_dict['edge_loop']:
|
||||
command, arguments = data_dict['cmds'][key]
|
||||
data_dict['edge_loop'][key] = EDGE_LOOP(
|
||||
arguments[0],
|
||||
tuple(data_dict['oriented_edge'][i] for
|
||||
i in str_to_cmd_args(arguments[1])[1]),
|
||||
)
|
||||
|
||||
return data_dict
|
||||
|
||||
|
||||
def data_section_dict(step, verbose=False):
|
||||
return data_cmds_to_data_dict(step.data, verbose)
|
||||
|
||||
def line_geometry(p1, p2):
|
||||
# (normally)
|
||||
# edge_curve.edge_geometry.curve_3d.pnt.coordinates is
|
||||
# equal to p1 (see above) this is
|
||||
# edge_curve.edge_start.vertex_geometry.coordinates
|
||||
# p2 could be calculated from
|
||||
# edge_curve.edge_geometry.curve_3d.dir.orientation.direction_ratios
|
||||
# and edge_curve.edge_geometry.curve_3d.dir.magnitude
|
||||
# vector = [i*edge_curve.edge_geometry.curve_3d.dir.magnitude for
|
||||
# i in edge_curve.edge_geometry.curve_3d.dir.orientation.direction_ratios]
|
||||
return Line(point1=p1, point2=p2)
|
||||
|
||||
import math
|
||||
def arc_circle_geometry(conic, p1, p2, ellipse=False):
|
||||
|
||||
z = Direction(*conic.position.axis.direction_ratios)
|
||||
x = Direction(*conic.position.ref_direction.direction_ratios)
|
||||
y = Direction.cross(z, x)
|
||||
cs_gl = CS(x, y, z) # transform from global to local
|
||||
cs_lg = CS.transposed(cs_gl) # transform from local to global
|
||||
|
||||
location = vector(conic.position.location.coordinates)
|
||||
|
||||
if p1 == p2: # Full Circle or Ellipse
|
||||
if ellipse:
|
||||
a = conic.semi_axis_1
|
||||
b = conic.semi_axis_2
|
||||
return Ellipse(a, b).ch_cs(cs_lg).translate(*location)
|
||||
# else Circle
|
||||
radius = conic.radius
|
||||
return Circle(radius).ch_cs(cs_lg).translate(*location)
|
||||
# else Arc
|
||||
# points relative to the location
|
||||
v1, v2 = p1 - location, p2 - location
|
||||
#ang1, ang2 = vector.ang(x, v1), vector.ang(x, v2)
|
||||
# relative points transformed into circle coordinate system
|
||||
# relative point lay in local xy-plane
|
||||
vl1, vl2 = vector(v1).ch_cs(cs_gl), vector(v2).ch_cs(cs_gl)
|
||||
ang1, ang2 = math.atan2(*vl1[:2][::-1]), math.atan2(*vl2[:2][::-1])
|
||||
|
||||
if ellipse:
|
||||
a = conic.semi_axis_1
|
||||
b = conic.semi_axis_2
|
||||
return ArcEllipse(a, b, ang1, ang2).ch_cs(cs_lg).translate(*location)
|
||||
radius = conic.radius
|
||||
return ArcCircle(radius, ang1, ang2).ch_cs(cs_lg).translate(*location)
|
||||
|
||||
import copy
|
||||
def b_spline_curve_with_knots_geometry(b_spline, p1, p2):
|
||||
"""
|
||||
|
||||
Currently only clamped b_spline curves and assumed, i. e. closed
|
||||
= False.
|
||||
"""
|
||||
control_points = [i.coordinates for i in b_spline.control_points]
|
||||
# es_near = [vector.isclose(p1, i.coordinates, abs_tol=2.1) for i in b_spline.control_points].index(True)
|
||||
es_near = len(b_spline.control_points) - 1 - [vector.isclose(p1, i.coordinates, abs_tol=2.1) for i in b_spline.control_points[::-1]].index(True)
|
||||
# ee_near = len(b_spline.control_points) - 1 - [vector.isclose(p2, i.coordinates, abs_tol=2.1) for i in b_spline.control_points[::-1]].index(True)
|
||||
ee_near = [vector.isclose(p2, i.coordinates, abs_tol=2.1) for i in b_spline.control_points].index(True)
|
||||
|
||||
knots = [b_spline.knots[i] for i in range(len(b_spline.knots)) for
|
||||
j in range(b_spline.knot_multiplicities[i])]
|
||||
# print('bs es, ee in:', es_near, ee_near,
|
||||
# knots[es_near], knots[ee_near+b_spline.degree])
|
||||
# print(' knots, knote:', knots[0], knots[-1], len(knots))
|
||||
if es_near is not None and ee_near is not None:
|
||||
#print('yes')
|
||||
bs = ArcBSplineCurveWithKnots(
|
||||
b_spline.degree, control_points, b_spline.knot_multiplicities,
|
||||
b_spline.knots, knots[es_near+1], knots[ee_near+b_spline.degree-1])
|
||||
bs._points = [copy.copy(p1)] + bs._points + [copy.copy(p2)]
|
||||
return bs
|
||||
# +1 so not the last near point but the following, also -1
|
||||
print('error')
|
||||
return B_spline_curve_with_knots(
|
||||
b_spline.degree, control_points, b_spline.knot_multiplicities,
|
||||
b_spline.knots)
|
||||
|
||||
# TODO: backup solution to draw each edge_curve,
|
||||
# new is to put edge_curves to edge_loops and draw these loops
|
||||
# see data_dict_to_geometry_world
|
||||
def data_dict_to_geometry_world_edge_curve(data_dict):
|
||||
w = World()
|
||||
data_dict_edge_curve_to_geometry(data_dict)
|
||||
edges = data_dict['geometry_edge_curves']
|
||||
for i in edges.values():
|
||||
w.add(i)
|
||||
return w
|
||||
|
||||
def data_dict_edge_curve_to_geometry(data_dict):
|
||||
edges = {}
|
||||
for key, edge_curve in data_dict['edge_curve'].items():
|
||||
p1 = Point(*edge_curve.edge_start.vertex_geometry.coordinates)
|
||||
p2 = Point(*edge_curve.edge_end.vertex_geometry.coordinates)
|
||||
idn = edge_curve.idn
|
||||
|
||||
# if SURFACE_CURVE or SEAM_CURVE, b/c SEAM_CURVE(SURFACE_CURVE)
|
||||
if isinstance(edge_curve.edge_geometry, SURFACE_CURVE):
|
||||
if isinstance(edge_curve.edge_geometry.curve_3d, LINE):
|
||||
edges[idn] = line_geometry(p1, p2)
|
||||
elif isinstance(edge_curve.edge_geometry.curve_3d, CIRCLE):
|
||||
circle = edge_curve.edge_geometry.curve_3d
|
||||
edges[idn] = arc_circle_geometry(circle, p1, p2)
|
||||
elif isinstance(edge_curve.edge_geometry.curve_3d, ELLIPSE):
|
||||
ellipse = edge_curve.edge_geometry.curve_3d
|
||||
edges[idn] = arc_circle_geometry(ellipse, p1, p2, True)
|
||||
elif isinstance(edge_curve.edge_geometry.curve_3d, B_SPLINE_CURVE_WITH_KNOTS):
|
||||
b_spline = edge_curve.edge_geometry.curve_3d
|
||||
edges[idn] = b_spline_curve_with_knots_geometry(b_spline, p1, p2)
|
||||
else:
|
||||
print('edge_curve', key, 'unknown SURFACE_CURVE',
|
||||
type(edge_curve.edge_geometry.curve_3d))
|
||||
elif isinstance(edge_curve.edge_geometry, LINE):
|
||||
edges[idn] = line_geometry(p1, p2)
|
||||
elif isinstance(edge_curve.edge_geometry, CIRCLE):
|
||||
circle = edge_curve.edge_geometry
|
||||
edges[idn] = arc_circle_geometry(circle, p1, p2)
|
||||
elif isinstance(edge_curve.edge_geometry, B_SPLINE_CURVE_WITH_KNOTS):
|
||||
b_spline = edge_curve.edge_geometry
|
||||
edges[idn] = b_spline_curve_with_knots_geometry(b_spline, p1, p2)
|
||||
else: # fallback to straight line
|
||||
edges[idn] = line_geometry(p1, p2)
|
||||
print('edge_curve', key, 'unknown type', type(edge_curve))
|
||||
data_dict['geometry_edge_curves'] = edges
|
||||
|
||||
def data_dict_to_geometry_world(data_dict):
|
||||
w = World()
|
||||
|
||||
data_dict_edge_curve_to_geometry(data_dict)
|
||||
edges = data_dict['geometry_edge_curves']
|
||||
|
||||
# add all but the last point, it is a path.
|
||||
import math
|
||||
iter = 0
|
||||
for key, edge_loop in data_dict['edge_loop'].items():
|
||||
points = []
|
||||
last_end_point = None
|
||||
for oriented_edge in edge_loop.edge_list:
|
||||
edge_curve = oriented_edge.edge_element
|
||||
idn = edge_curve.idn
|
||||
if idn in edges:
|
||||
pts = edges[idn].points()
|
||||
if oriented_edge.orientation:
|
||||
#[points.append(i) for i in pts[:-1]]
|
||||
[points.append(i) for i in pts]
|
||||
start_point = pts[0]
|
||||
end_point = pts[-1]
|
||||
else:
|
||||
#[points.append(i) for i in pts[:0:-1]]
|
||||
[points.append(i) for i in pts[::-1]]
|
||||
start_point = pts[-1]
|
||||
end_point = pts[0]
|
||||
if last_end_point is not None:
|
||||
# TODO: some points are only near because of the current
|
||||
# b-spline cut in b_spline_curve_with_knots_geometry
|
||||
isclose = all([math.isclose(i, j, abs_tol=1e-3) for i, j in zip(start_point, last_end_point)])
|
||||
if isclose:
|
||||
pass
|
||||
else:
|
||||
pass
|
||||
print(isclose, start_point, last_end_point)
|
||||
else:
|
||||
pass
|
||||
#print('start of loop')
|
||||
last_end_point = end_point
|
||||
else:
|
||||
pass
|
||||
print('error')
|
||||
if points:
|
||||
# add last end point of path
|
||||
# if oriented_edge.orientation:
|
||||
# points.append(Point(*edge_curve.edge_end.vertex_geometry.coordinates))
|
||||
# else:
|
||||
# points.append(Point(*edge_curve.edge_start.vertex_geometry.coordinates))
|
||||
#points.append(Point(*oriented_edge.edge_end.vertex_geometry.coordinates))
|
||||
w.add(Polyline(*points))
|
||||
# if iter == 4:
|
||||
# print()
|
||||
# print(key)
|
||||
# break
|
||||
# iter += 1
|
||||
return w
|
||||
|
||||
# TODO: delete this testing def
|
||||
def print_edge_loop(data_dict, instance_name):
|
||||
from pylib.mathematics import vector
|
||||
from pylib.data_step_std import LINE, B_SPLINE_CURVE_WITH_KNOTS
|
||||
print('edge_loop:', instance_name, data_dict['edge_loop'][instance_name].idn)
|
||||
for oriented_edge in data_dict['edge_loop'][instance_name].edge_list:
|
||||
print(' orientation: ', oriented_edge.orientation)
|
||||
print(' edge_start: ', oriented_edge.edge_start.vertex_geometry.coordinates)
|
||||
print(' edge_end: ', oriented_edge.edge_end.vertex_geometry.coordinates)
|
||||
edge_element = oriented_edge.edge_element
|
||||
print(' edge_element')
|
||||
print(' same_sense: ', edge_element.same_sense)
|
||||
print(' edge_start: ', edge_element.edge_start.vertex_geometry.coordinates)
|
||||
print(' edge_end: ', edge_element.edge_end.vertex_geometry.coordinates)
|
||||
curve_3d = edge_element.edge_geometry.curve_3d
|
||||
print(' edge_geometry.curve_3d')
|
||||
print(' type: ', type(curve_3d))
|
||||
if isinstance(curve_3d, LINE):
|
||||
print(' es in: ',
|
||||
vector.isclose(edge_element.edge_start.vertex_geometry.coordinates, curve_3d.pnt.coordinates))
|
||||
print(' ee in: ',
|
||||
vector.isclose(edge_element.edge_end.vertex_geometry.coordinates, curve_3d.pnt.coordinates))
|
||||
print(' pnt: ', curve_3d.pnt.coordinates)
|
||||
print(' pnt2: ', [curve_3d.dir.magnitude*i+j for i,j in zip(curve_3d.dir.orientation.direction_ratios, curve_3d.pnt.coordinates)])
|
||||
if isinstance(curve_3d, B_SPLINE_CURVE_WITH_KNOTS):
|
||||
print(' es in: ',
|
||||
any([vector.isclose(edge_element.edge_start.vertex_geometry.coordinates, i.coordinates, abs_tol=2.1) for i in curve_3d.control_points]))
|
||||
print(' ee in: ',
|
||||
any([vector.isclose(edge_element.edge_end.vertex_geometry.coordinates, i.coordinates, abs_tol=2.1) for i in curve_3d.control_points]))
|
||||
print(' control_points')
|
||||
print(' ', curve_3d.control_points[0].coordinates, '...')
|
||||
print(' ', curve_3d.control_points[-1].coordinates)
|
||||
# print()
|
||||
# print_edge_loop(data_dict, '#1306')
|
||||
|
||||
999
pylib/data_step_std.py
Executable file
999
pylib/data_step_std.py
Executable file
@@ -0,0 +1,999 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
"""STEP Standard structure.
|
||||
|
||||
:Date: 2020-01-03
|
||||
|
||||
.. module:: data_step_std
|
||||
:platform: *nix, Windows
|
||||
:synopsis: STEP Standard structure.
|
||||
|
||||
.. moduleauthor:: Daniel Weschke <daniel.weschke@directbox.de>
|
||||
|
||||
.. seealso::
|
||||
STEP, ISO 10303-21, AP 232 (Application Protocol)
|
||||
http://www.steptools.com/stds/step/ and
|
||||
https://www.steptools.com/stds/stp_aim/html/schema.html
|
||||
|
||||
ISO 10303-21:2002. Industrial automation systems and integration --
|
||||
Product data representation and exchange -- Part 21:
|
||||
Implementation methods: Clear text encoding of the exchange
|
||||
structure
|
||||
|
||||
ISO 10303-21:2016. Industrial automation systems and integration --
|
||||
Product data representation and exchange -- Part 21:
|
||||
Implementation methods: Clear text encoding of the exchange
|
||||
structure
|
||||
"""
|
||||
# DATA section
|
||||
# - Format: Instance name = Entity instance
|
||||
# - Example: #4 = PRODUCT_DEFINITION_SHAPE('','',#5);
|
||||
# - Instance name
|
||||
# - unique name in the form "#1234"
|
||||
# - must consist of a positive number
|
||||
# - only valid locally within the STEP-file
|
||||
# - Entity instance: name of the entity in capital letters followed
|
||||
# by attribute values in defined order within parentheses
|
||||
# - Attributes
|
||||
# - Only explicit attributes get mapped (are listed)
|
||||
# - Inverse, Derived and re-declared attributes are not listed
|
||||
# since their values can be deduced from the other ones.
|
||||
# - Unset attribute values are given as: $
|
||||
# - Re-declared attributes as derived in a subtype are encoded: *
|
||||
# - Enumeration (ENUM), boolean (BOOLEAN) and logical (LOGICAL)
|
||||
# values are given in capital letters with a leading and
|
||||
# trailing dot, e. g.: .TRUE.
|
||||
# - String values are given as: ''
|
||||
# - Integers (INTEGER) and real (REAL) values are used identical
|
||||
# to typical programming languages
|
||||
# - elements of aggregates (SET, BAG, LIST, ARRAY) are given in
|
||||
# parentheses, separated by comma ",":
|
||||
# STEP Standard TYPE LIST: first index is 1.
|
||||
# STEP Standard TYPE ARRAY: first index is 0.
|
||||
|
||||
def BOOLEAN_to_bool(boolean):
|
||||
if boolean == ".T.":
|
||||
return True
|
||||
elif boolean == ".F.":
|
||||
return False
|
||||
return boolean
|
||||
|
||||
def dimension_of(item):
|
||||
"""STEP Standard FUNCTION dimension_of
|
||||
|
||||
:param item: STEP Standard TYPE GEOMETRIC_REPRESENTATION_ITEM
|
||||
:type item: GEOMETRIC_REPRESENTATION_ITEM
|
||||
|
||||
:returns: dim
|
||||
:rtype: int or None
|
||||
|
||||
:ivar dim: STEP Standard TYPE dimension_count (INTEGER).
|
||||
dimension_count > 0
|
||||
:vartype dim: int
|
||||
|
||||
.. seealso::
|
||||
https://www.steptools.com/stds/stp_aim/html/t_dimension_of.html
|
||||
"""
|
||||
# (* SCHEMA step_merged_ap_schema; *)
|
||||
#
|
||||
# -- DIFF IN AP214
|
||||
# -- DIFF IN AP203e2
|
||||
# -- DIFF IN AP238 STEP-NC
|
||||
# -- DIFF IN AP224
|
||||
# -- DIFF IN AP232
|
||||
# FUNCTION dimension_of
|
||||
# (item : geometric_representation_item ) : dimension_count;
|
||||
# LOCAL
|
||||
# x : SET OF representation;
|
||||
# y : representation_context;
|
||||
# dim : dimension_count;
|
||||
# END_LOCAL;
|
||||
# IF 'STEP_MERGED_AP_SCHEMA.CARTESIAN_POINT' IN TYPEOF(item) THEN
|
||||
# dim := SIZEOF(item\cartesian_point.coordinates);
|
||||
# RETURN (dim);
|
||||
# END_IF;
|
||||
# IF 'STEP_MERGED_AP_SCHEMA.DIRECTION' IN TYPEOF(item) THEN
|
||||
# dim := SIZEOF(item\direction.direction_ratios);
|
||||
# RETURN (dim);
|
||||
# END_IF;
|
||||
# IF 'STEP_MERGED_AP_SCHEMA.VECTOR' IN TYPEOF(item) THEN
|
||||
# dim := SIZEOF(item\vector.orientation\direction.direction_ratios);
|
||||
# RETURN (dim);
|
||||
# END_IF;
|
||||
# x := using_representations(item);
|
||||
# IF SIZEOF(x) > 0 THEN
|
||||
# y := x[1].context_of_items;
|
||||
# dim := y\geometric_representation_context.coordinate_space_dimension;
|
||||
# RETURN (dim);
|
||||
# ELSE
|
||||
# RETURN (?);
|
||||
# END_IF;
|
||||
# END_FUNCTION;
|
||||
if isinstance(item, CARTESIAN_POINT):
|
||||
dim = len(item.coordinates)
|
||||
return dim
|
||||
if isinstance(item, DIRECTION):
|
||||
dim = len(item.direction_ratios)
|
||||
return dim
|
||||
if isinstance(item, VECTOR):
|
||||
dim = len(item.orientation.direction_ratios)
|
||||
return dim
|
||||
|
||||
# TODO: x, y
|
||||
# x := using_representations(item);
|
||||
# IF SIZEOF(x) > 0 THEN
|
||||
# y := x[1].context_of_items;
|
||||
# dim := y\geometric_representation_context.coordinate_space_dimension;
|
||||
# RETURN (dim);
|
||||
# ELSE
|
||||
# RETURN (?);
|
||||
# END_IF;
|
||||
|
||||
return None
|
||||
|
||||
def list_to_array(lis, low, u):
|
||||
"""STEP Standard FUNCTION list_to_array
|
||||
|
||||
:param lis: STEP Standard TYPE LIST [0:?] OF GENERIC
|
||||
:type lis: tuple
|
||||
:param low: STEP Standard TYPE INTEGER
|
||||
:type low: int
|
||||
:param u: STEP Standard TYPE INTEGER
|
||||
:type u: int
|
||||
|
||||
:returns: res
|
||||
:rtype: tuple or None
|
||||
|
||||
:param n: STEP Standard TYPE INTEGER
|
||||
:type n: int
|
||||
:ivar res: STEP Standard TYPE ARRAY [low:u] OF GENERIC
|
||||
:vartype res: tuple
|
||||
|
||||
.. seealso::
|
||||
https://www.steptools.com/stds/stp_aim/html/t_list_to_array.html
|
||||
"""
|
||||
# (* SCHEMA step_merged_ap_schema; *)
|
||||
|
||||
# -- DIFF IN AP214
|
||||
# -- DIFF IN AP203e2
|
||||
# -- DIFF IN AP238 STEP-NC
|
||||
# -- DIFF IN AP224
|
||||
# -- DIFF IN AP232
|
||||
# FUNCTION list_to_array
|
||||
# (lis : LIST [0:?] OF GENERIC : t;
|
||||
# low : INTEGER;
|
||||
# u : INTEGER ) : ARRAY [low:u] OF GENERIC : t;
|
||||
# LOCAL
|
||||
# n : INTEGER;
|
||||
# res : ARRAY [low:u] OF GENERIC : t;
|
||||
# END_LOCAL;
|
||||
# n := SIZEOF(lis);
|
||||
# IF n <> u - low + 1 THEN
|
||||
# RETURN (?);
|
||||
# ELSE
|
||||
# res := [ lis[1]:0 ];
|
||||
# REPEAT i := 2 TO n BY 1;
|
||||
# res[(low + i - 1)] := lis[i];
|
||||
# END_REPEAT;
|
||||
# RETURN (res);
|
||||
# END_IF;
|
||||
# END_FUNCTION;
|
||||
n = len(lis)
|
||||
# length of new array and old list must be equal
|
||||
if n != u - low + 1: # len(lis) != len(range(low, u+1))
|
||||
return None
|
||||
|
||||
# TODO: new list?
|
||||
#res = [i for i in lis]
|
||||
res = lis
|
||||
return res
|
||||
|
||||
def boolean_choose(b, choice1, choice2):
|
||||
"""STEP Standard FUNCTION boolean_choose
|
||||
|
||||
:param b: STEP Standard TYPE BOOLEAN
|
||||
:type b: bool
|
||||
:param choice1: STEP Standard TYPE GENERIC
|
||||
:type choice1: object
|
||||
:param choice2: STEP Standard TYPE GENERIC
|
||||
:type choice2: object
|
||||
|
||||
:returns: STEP STEP Standard TYPE GENERIC
|
||||
:rtype: object
|
||||
|
||||
.. seealso::
|
||||
https://www.steptools.com/stds/stp_aim/html/t_boolean_choose.html
|
||||
"""
|
||||
# (* SCHEMA step_merged_ap_schema; *)
|
||||
#
|
||||
# FUNCTION boolean_choose
|
||||
# (b : BOOLEAN;
|
||||
# choice1 : GENERIC : item;
|
||||
# choice2 : GENERIC : item ) : GENERIC : item;
|
||||
# IF b THEN
|
||||
# RETURN (choice1);
|
||||
# ELSE
|
||||
# RETURN (choice2);
|
||||
# END_IF;
|
||||
# END_FUNCTION;
|
||||
return choice1 if b else choice2
|
||||
|
||||
def path_head_to_tail(a_path):
|
||||
"""STEP Standard FUNCTION path_head_to_tail
|
||||
|
||||
Check if the path is a connected curve set.
|
||||
|
||||
:param a_path: STEP Standard TYPE path
|
||||
:type a_path: PATH
|
||||
|
||||
:returns: p
|
||||
:rtype: object
|
||||
|
||||
:ivar p: STEP STEP Standard TYPE LOGICAL
|
||||
:vartype item: bool
|
||||
|
||||
.. seealso::
|
||||
https://www.steptools.com/stds/stp_aim/html/t_path_head_to_tail.html
|
||||
"""
|
||||
# (* SCHEMA step_merged_ap_schema; *)
|
||||
|
||||
# -- DIFF IN AP214
|
||||
# -- DIFF IN AP203e2
|
||||
# -- DIFF IN AP238 STEP-NC
|
||||
# -- DIFF IN AP224
|
||||
# -- DIFF IN AP232
|
||||
# FUNCTION path_head_to_tail
|
||||
# (a_path : path ) : LOGICAL;
|
||||
# LOCAL
|
||||
# n : INTEGER;
|
||||
# p : LOGICAL := TRUE;
|
||||
# END_LOCAL;
|
||||
# n := SIZEOF(a_path.edge_list);
|
||||
# REPEAT i := 2 TO n BY 1;
|
||||
# p := p AND (a_path.edge_list[(i - 1)].edge_end :=: a_path.edge_list[i].edge_start);
|
||||
# END_REPEAT;
|
||||
# RETURN (p);
|
||||
# END_FUNCTION;
|
||||
n = len(a_path.edge_list)
|
||||
p = all([a_path.edge_list[i-1].edge_end == a_path.edge_list[i].edge_start for i in range(1, n)])
|
||||
return p
|
||||
|
||||
|
||||
class REPRESENTATION_ITEM():
|
||||
"""STEP Standard ENTITY representation_item
|
||||
|
||||
Explicit Attributes
|
||||
|
||||
:param name: STEP Standard TYPE label (STRING)
|
||||
:type name: str
|
||||
|
||||
Additional attributes
|
||||
|
||||
:ivar idn: for the instance the instance id and for the class the
|
||||
total number of instances
|
||||
:vartype idn: int
|
||||
|
||||
.. seealso::
|
||||
https://www.steptools.com/stds/stp_aim/html/t_representation_item.html
|
||||
"""
|
||||
idn = 0 # equal to total numbers of instances
|
||||
|
||||
def __init__(self, name):
|
||||
self.name = name
|
||||
REPRESENTATION_ITEM.idn += 1
|
||||
self.idn = REPRESENTATION_ITEM.idn # instance id
|
||||
|
||||
class GEOMETRIC_REPRESENTATION_ITEM(REPRESENTATION_ITEM):
|
||||
"""STEP Standard ENTITY geometric_representation_item
|
||||
|
||||
Explicit Attributes
|
||||
|
||||
:param name: STEP Standard TYPE label (STRING)
|
||||
:type name: str
|
||||
|
||||
Derived Attributes
|
||||
|
||||
:param dim: STEP Standard TYPE dimension_count (INTEGER)
|
||||
:type dim: int
|
||||
|
||||
.. seealso::
|
||||
https://www.steptools.com/stds/stp_aim/html/t_geometric_representation_item.html
|
||||
"""
|
||||
def __init__(self, name):
|
||||
# TODO: or dim rather in a method (or property) so that it is
|
||||
# conducted only on demand?
|
||||
self.dim = dimension_of(self)
|
||||
super().__init__(name)
|
||||
|
||||
class POINT(GEOMETRIC_REPRESENTATION_ITEM):
|
||||
"""STEP Standard ENTITY point
|
||||
|
||||
Explicit Attributes
|
||||
|
||||
:param name: STEP Standard TYPE label (STRING)
|
||||
:type name: str
|
||||
|
||||
Derived Attributes
|
||||
|
||||
:param dim: STEP Standard TYPE dimension_count (INTEGER)
|
||||
:type dim: int
|
||||
|
||||
.. seealso::
|
||||
https://www.steptools.com/stds/stp_aim/html/t_point.html
|
||||
"""
|
||||
def __init__(self, name):
|
||||
super().__init__(name)
|
||||
|
||||
class CARTESIAN_POINT(POINT):
|
||||
"""STEP Standard ENTITY cartesian_point
|
||||
|
||||
Explicit Attributes
|
||||
|
||||
:param name: STEP Standard TYPE label (STRING)
|
||||
:type name: str
|
||||
:param coordinates: list of length_measure (floats)
|
||||
:type coordinates: tuple
|
||||
|
||||
Derived Attributes
|
||||
|
||||
:param dim: STEP Standard TYPE dimension_count (INTEGER)
|
||||
:type dim: int
|
||||
|
||||
.. seealso::
|
||||
https://www.steptools.com/stds/stp_aim/html/t_cartesian_point.html
|
||||
"""
|
||||
def __init__(self, name, coordinates):
|
||||
self.coordinates = coordinates
|
||||
super().__init__(name)
|
||||
|
||||
def __str__(self):
|
||||
return "#"+str(self.idn)+" = CARTESIAN_POINT('"+self.name+"', "+str(self.coordinates)+")"
|
||||
|
||||
class TOPOLOGICAL_REPRESENTATION_ITEM(REPRESENTATION_ITEM):
|
||||
"""STEP Standard ENTITY topological_representation_item
|
||||
|
||||
Explicit Attributes
|
||||
|
||||
:param name: STEP Standard TYPE label (STRING)
|
||||
:type name: str
|
||||
|
||||
.. seealso::
|
||||
https://www.steptools.com/stds/stp_aim/html/t_topological_representation_item.html
|
||||
"""
|
||||
def __init__(self, name):
|
||||
super().__init__(name)
|
||||
|
||||
class VERTEX(TOPOLOGICAL_REPRESENTATION_ITEM):
|
||||
"""STEP Standard ENTITY vertex
|
||||
|
||||
Explicit Attributes
|
||||
|
||||
:param name: STEP Standard TYPE label (STRING)
|
||||
:type name: str
|
||||
|
||||
.. seealso::
|
||||
https://www.steptools.com/stds/stp_aim/html/t_vertex.html
|
||||
"""
|
||||
def __init__(self, name):
|
||||
super().__init__(name)
|
||||
|
||||
class VERTEX_POINT(VERTEX):
|
||||
"""STEP Standard ENTITY vertex_point
|
||||
|
||||
Explicit Attributes
|
||||
|
||||
:param name: STEP Standard TYPE label (STRING)
|
||||
:type name: str
|
||||
:param vertex_geometry: point
|
||||
:type vertex_geometry: POINT
|
||||
|
||||
Derived Attributes
|
||||
|
||||
:param dim: STEP Standard TYPE dimension_count (INTEGER)
|
||||
:type dim: int
|
||||
|
||||
.. seealso::
|
||||
https://www.steptools.com/stds/stp_aim/html/t_vertex_point.html
|
||||
"""
|
||||
def __init__(self, name, vertex_geometry):
|
||||
self.vertex_geometry = vertex_geometry
|
||||
super().__init__(name)
|
||||
|
||||
def __str__(self):
|
||||
return "#"+str(self.idn)+" = VERTEX_POINT('"+self.name+"', #"+str(self.vertex_geometry.idn)+")"
|
||||
|
||||
class DIRECTION(GEOMETRIC_REPRESENTATION_ITEM):
|
||||
"""STEP Standard ENTITY direction
|
||||
|
||||
Explicit Attributes
|
||||
|
||||
:param name: STEP Standard TYPE label (STRING)
|
||||
:type name: str
|
||||
:param direction_ratios: STEP Standard LIST OF REAL
|
||||
:type direction_ratios: tuple
|
||||
|
||||
Derived Attributes
|
||||
|
||||
:param dim: STEP Standard TYPE dimension_count (INTEGER)
|
||||
:type dim: int
|
||||
|
||||
.. seealso::
|
||||
https://www.steptools.com/stds/stp_aim/html/t_direction.html
|
||||
"""
|
||||
def __init__(self, name, direction_ratios):
|
||||
self.direction_ratios = direction_ratios
|
||||
super().__init__(name)
|
||||
|
||||
class VECTOR(GEOMETRIC_REPRESENTATION_ITEM):
|
||||
"""STEP Standard ENTITY vector
|
||||
|
||||
Explicit Attributes
|
||||
|
||||
:param name: STEP Standard TYPE label (STRING)
|
||||
:type name: str
|
||||
:param orientation:
|
||||
:type orientation: DIRECTION
|
||||
:param magnitude: length_measure
|
||||
:type magnitude: float
|
||||
|
||||
Derived Attributes
|
||||
|
||||
:param dim: STEP Standard TYPE dimension_count (INTEGER)
|
||||
:type dim: int
|
||||
|
||||
.. seealso::
|
||||
https://www.steptools.com/stds/stp_aim/html/t_vector.html
|
||||
"""
|
||||
def __init__(self, name, orientation, magnitude):
|
||||
self.orientation = orientation
|
||||
self.magnitude = magnitude
|
||||
super().__init__(name)
|
||||
|
||||
class EDGE(TOPOLOGICAL_REPRESENTATION_ITEM):
|
||||
"""STEP Standard ENTITY edge
|
||||
|
||||
Explicit Attributes
|
||||
|
||||
:param name: STEP Standard TYPE label (STRING)
|
||||
:type name: str
|
||||
:param edge_start: start point
|
||||
:type edge_start: VERTEX
|
||||
:param edge_end: end point
|
||||
:type edge_end: VERTEX
|
||||
|
||||
.. seealso::
|
||||
https://www.steptools.com/stds/stp_aim/html/t_edge.html
|
||||
"""
|
||||
def __init__(self, name, edge_start, edge_end):
|
||||
self.edge_start = edge_start
|
||||
self.edge_end = edge_end
|
||||
super().__init__(name)
|
||||
|
||||
class CURVE(GEOMETRIC_REPRESENTATION_ITEM):
|
||||
"""STEP Standard ENTITY curve
|
||||
|
||||
Explicit Attributes
|
||||
|
||||
:param name: STEP Standard TYPE label (STRING)
|
||||
:type name: str
|
||||
|
||||
Derived Attributes
|
||||
|
||||
:param dim: STEP Standard TYPE dimension_count (INTEGER)
|
||||
:type dim: int
|
||||
|
||||
.. seealso::
|
||||
https://www.steptools.com/stds/stp_aim/html/t_curve.html
|
||||
"""
|
||||
def __init__(self, name):
|
||||
super().__init__(name)
|
||||
|
||||
class LINE(CURVE):
|
||||
"""STEP Standard ENTITY line
|
||||
|
||||
Explicit Attributes
|
||||
|
||||
:param name: STEP Standard TYPE label (STRING)
|
||||
:type name: str
|
||||
:param pnt:
|
||||
:type pnt: CARTESIAN_POINT
|
||||
:param dir:
|
||||
:type dir: VECTOR
|
||||
|
||||
Derived Attributes
|
||||
|
||||
:param dim: STEP Standard TYPE dimension_count (INTEGER)
|
||||
:type dim: int
|
||||
|
||||
.. seealso::
|
||||
https://www.steptools.com/stds/stp_aim/html/t_line.html
|
||||
"""
|
||||
def __init__(self, name, pnt, dir):
|
||||
self.pnt = pnt
|
||||
self.dir = dir
|
||||
super().__init__(name)
|
||||
|
||||
class SURFACE_CURVE(CURVE):
|
||||
"""STEP Standard ENTITY surface_curve
|
||||
|
||||
Explicit Attributes
|
||||
|
||||
:param name: STEP Standard TYPE label (STRING)
|
||||
:type name: str
|
||||
:param curve_3d:
|
||||
:type curve_3d: CURVE
|
||||
:param associated_geometry:
|
||||
:type associated_geometry: list of pcurve_or_surface
|
||||
:param master_representation:
|
||||
:type master_representation: preferred_surface_curve_representation
|
||||
|
||||
Derived Attributes
|
||||
|
||||
:param dim: STEP Standard TYPE dimension_count (INTEGER)
|
||||
:type dim: int
|
||||
:param basis_surface:
|
||||
:type basis_surface: SET OF surface
|
||||
|
||||
.. seealso::
|
||||
https://www.steptools.com/stds/stp_aim/html/t_surface_curve.html
|
||||
"""
|
||||
def __init__(self, name, curve_3d, associated_geometry, master_representation):
|
||||
self.curve_3d = curve_3d
|
||||
self.associated_geometry = associated_geometry
|
||||
self.master_representation = master_representation
|
||||
super().__init__(name)
|
||||
|
||||
class SEAM_CURVE(SURFACE_CURVE):
|
||||
"""STEP Standard ENTITY seam_curve
|
||||
|
||||
Explicit Attributes
|
||||
|
||||
:param name: STEP Standard TYPE label (STRING)
|
||||
:type name: str
|
||||
:param curve_3d:
|
||||
:type curve_3d: CURVE
|
||||
:param associated_geometry:
|
||||
:type associated_geometry: list of pcurve_or_surface
|
||||
:param master_representation:
|
||||
:type master_representation: preferred_surface_curve_representation
|
||||
|
||||
Derived Attributes
|
||||
|
||||
:param dim: STEP Standard TYPE dimension_count (INTEGER)
|
||||
:type dim: int
|
||||
:param basis_surface:
|
||||
:type basis_surface: SET OF surface
|
||||
|
||||
.. seealso::
|
||||
https://www.steptools.com/stds/stp_aim/html/t_seam_curve.html
|
||||
"""
|
||||
def __init__(self, name, curve_3d, associated_geometry, master_representation):
|
||||
super().__init__(name, curve_3d, associated_geometry, master_representation)
|
||||
|
||||
class EDGE_CURVE(EDGE):
|
||||
"""STEP Standard ENTITY edge_curve
|
||||
|
||||
Explicit Attributes
|
||||
|
||||
:param name: STEP Standard TYPE label (STRING)
|
||||
:type name: str
|
||||
:param edge_start: start point
|
||||
:type edge_start: VERTEX
|
||||
:param edge_end: end point
|
||||
:type edge_end: VERTEX
|
||||
:param edge_geometry: curve
|
||||
:type edge_geometry: CURVE
|
||||
:param same_sense: STEP Standard TYPE BOOLEAN
|
||||
:type same_sense: str
|
||||
|
||||
Derived Attributes
|
||||
|
||||
:param dim: STEP Standard TYPE dimension_count (INTEGER)
|
||||
:type dim: int
|
||||
|
||||
Definition from ISO/CD 10303-42:1992: An edge curve is a special subtype of edge which has its geometry fully defined. The geometry is defined by associating the edge with a curve which may be unbounded. As the topological and geometric directions may be opposed, an indicator (same sense) is used to identify whether the edge and curve directions agree or are opposed. The Boolean value indicates whether the curve direction agrees with (TRUE) or is in the opposite direction (FALSE) to the edge direction. Any geometry associated with the vertices of the edge shall be consistent with the edge geometry.
|
||||
|
||||
Informal propositions
|
||||
1. The domain of the edge curve is formally defined to be the domain of its edge geometry as trimmed by the vertices. This domain does not include the vertices.
|
||||
2. An edge curve has non-zero finite extent.
|
||||
3. An edge curve is a manifold.
|
||||
4. An edge curve is arcwise connected.
|
||||
5. The edge start is not a part of the edge domain.
|
||||
6. The edge end is not a part of the edge domain.
|
||||
7. Vertex geometry shall be consistent with edge geometry.
|
||||
|
||||
Attribute definitions
|
||||
EdgeGeometry
|
||||
The curve which defines the shape and spatial location of the edge. This curve may be unbounded and is implicitly trimmed by the vertices of the edge; this defines the edge domain. Multiple edges can reference the same curve.
|
||||
SameSense
|
||||
This logical flag indicates whether (TRUE), or not (FALSE) the senses of the edge and the curve defining the edge geometry are the same. The sense of an edge is from the edge start vertex to the edge end vertex; the sense of a curve is in the direction of increasing parameter.
|
||||
|
||||
.. seealso::
|
||||
https://www.steptools.com/stds/stp_aim/html/t_edge_curve.html
|
||||
https://iaiweb.lbl.gov/Resources/IFC_Releases/R2x3_final/ifctopologyresource/lexical/ifcedgecurve.htm
|
||||
"""
|
||||
def __init__(self, name, edge_start, edge_end, edge_geometry, same_sense):
|
||||
self.edge_geometry = edge_geometry
|
||||
self.same_sense = BOOLEAN_to_bool(same_sense)
|
||||
super().__init__(name, edge_start, edge_end)
|
||||
|
||||
class PLACEMENT(GEOMETRIC_REPRESENTATION_ITEM):
|
||||
"""STEP Standard ENTITY placement
|
||||
|
||||
Explicit Attributes
|
||||
|
||||
:param name: STEP Standard TYPE label (STRING)
|
||||
:type name: str
|
||||
:param location:
|
||||
:type location: CARTESIAN_POINT
|
||||
|
||||
Derived Attributes
|
||||
|
||||
:param dim: STEP Standard TYPE dimension_count (INTEGER)
|
||||
:type dim: int
|
||||
|
||||
.. seealso::
|
||||
https://www.steptools.com/stds/stp_aim/html/t_placement.html
|
||||
"""
|
||||
def __init__(self, name, location):
|
||||
self.location = location
|
||||
super().__init__(name)
|
||||
|
||||
class AXIS2_PLACEMENT_2D(PLACEMENT):
|
||||
"""STEP Standard ENTITY axis2_placement_2d
|
||||
|
||||
Explicit Attributes
|
||||
|
||||
:param name: STEP Standard TYPE label (STRING)
|
||||
:type name: str
|
||||
:param location:
|
||||
:type location: CARTESIAN_POINT
|
||||
:param ref_direction:
|
||||
:type ref_direction: DIRECTION
|
||||
|
||||
Derived Attributes
|
||||
|
||||
:param dim: STEP Standard TYPE dimension_count (INTEGER)
|
||||
:type dim: int
|
||||
:param p:
|
||||
:type p: list of DIRECTION
|
||||
|
||||
.. seealso::
|
||||
https://www.steptools.com/stds/stp_aim/html/t_axis2_placement_2d.html
|
||||
"""
|
||||
def __init__(self, name, location, ref_direction):
|
||||
self.ref_direction = ref_direction
|
||||
super().__init__(name, location)
|
||||
|
||||
class AXIS2_PLACEMENT_3D(PLACEMENT):
|
||||
"""STEP Standard ENTITY axis2_placement_3d
|
||||
|
||||
Explicit Attributes
|
||||
|
||||
:param name: STEP Standard TYPE label (STRING)
|
||||
:type name: str
|
||||
:param location:
|
||||
:type location: CARTESIAN_POINT
|
||||
:param axis:
|
||||
:type axis: DIRECTION
|
||||
:param ref_direction:
|
||||
:type ref_direction: DIRECTION
|
||||
|
||||
Derived Attributes
|
||||
|
||||
:param dim: STEP Standard TYPE dimension_count (INTEGER)
|
||||
:type dim: int
|
||||
:param p:
|
||||
:type p: list of DIRECTION
|
||||
|
||||
.. seealso::
|
||||
https://www.steptools.com/stds/stp_aim/html/t_axis2_placement_3d.html
|
||||
"""
|
||||
def __init__(self, name, location, axis, ref_direction):
|
||||
self.axis = axis
|
||||
self.ref_direction = ref_direction
|
||||
super().__init__(name, location)
|
||||
|
||||
class CONIC(CURVE):
|
||||
"""STEP Standard ENTITY conic
|
||||
|
||||
Explicit Attributes
|
||||
|
||||
:param name: STEP Standard TYPE label (STRING)
|
||||
:type name: str
|
||||
:param position: axis2_placement
|
||||
:type position: AXIS2_PLACEMENT_2D or AXIS2_PLACEMENT_3D
|
||||
|
||||
Derived Attributes
|
||||
|
||||
:param dim: STEP Standard TYPE dimension_count (INTEGER)
|
||||
:type dim: int
|
||||
|
||||
.. seealso::
|
||||
https://www.steptools.com/stds/stp_aim/html/t_conic.html
|
||||
"""
|
||||
def __init__(self, name, position):
|
||||
self.position = position
|
||||
super().__init__(name)
|
||||
|
||||
class CIRCLE(CONIC):
|
||||
"""STEP Standard ENTITY circle
|
||||
|
||||
Explicit Attributes
|
||||
|
||||
:param name: STEP Standard TYPE label (STRING)
|
||||
:type name: str
|
||||
:param position: axis2_placement
|
||||
:type position: AXIS2_PLACEMENT_2D or AXIS2_PLACEMENT_3D
|
||||
:param radius: positive_length_measure
|
||||
:type radius: float
|
||||
|
||||
Derived Attributes
|
||||
|
||||
:param dim: STEP Standard TYPE dimension_count (INTEGER)
|
||||
:type dim: int
|
||||
|
||||
.. seealso::
|
||||
https://www.steptools.com/stds/stp_aim/html/t_circle.html
|
||||
"""
|
||||
def __init__(self, name, position, radius):
|
||||
self.radius = radius
|
||||
super().__init__(name, position)
|
||||
|
||||
class ELLIPSE(CONIC):
|
||||
"""STEP Standard ENTITY ellipse
|
||||
|
||||
Explicit Attributes
|
||||
|
||||
:param name: STEP Standard TYPE label (STRING)
|
||||
:type name: str
|
||||
:param position: STEP Standard TYPE axis2_placement (SELECT)
|
||||
:type position: AXIS2_PLACEMENT_2D or AXIS2_PLACEMENT_3D
|
||||
:param semi_axis_1: STEP Standard TYPE positive_length_measure (REAL)
|
||||
:type semi_axis_1: float
|
||||
:param semi_axis_2: STEP Standard TYPE positive_length_measure (REAL)
|
||||
:type semi_axis_2: float
|
||||
|
||||
Derived Attributes
|
||||
|
||||
:param dim: STEP Standard TYPE dimension_count (INTEGER)
|
||||
:type dim: int
|
||||
|
||||
.. seealso::
|
||||
https://www.steptools.com/stds/stp_aim/html/t_ellipse.html
|
||||
"""
|
||||
def __init__(self, name, position, semi_axis_1, semi_axis_2):
|
||||
self.semi_axis_1 = semi_axis_1
|
||||
self.semi_axis_2 = semi_axis_2
|
||||
super().__init__(name, position)
|
||||
|
||||
class BOUNDED_CURVE(CURVE):
|
||||
"""STEP Standard ENTITY bounded_curve
|
||||
|
||||
Explicit Attributes
|
||||
|
||||
:param name: STEP Standard TYPE label (STRING)
|
||||
:type name: str
|
||||
|
||||
Derived Attributes
|
||||
|
||||
:param dim: STEP Standard TYPE dimension_count (INTEGER)
|
||||
:type dim: int
|
||||
|
||||
.. seealso::
|
||||
https://www.steptools.com/stds/stp_aim/html/t_bounded_curve.html
|
||||
"""
|
||||
def __init__(self, name):
|
||||
super().__init__(name)
|
||||
|
||||
class B_SPLINE_CURVE(BOUNDED_CURVE):
|
||||
"""STEP Standard ENTITY b_spline_curve
|
||||
|
||||
Explicit Attributes
|
||||
|
||||
:param name: STEP Standard TYPE label (STRING)
|
||||
:type name: str
|
||||
:param degree: STEP Standard TYPE INTEGER
|
||||
:type degree: int
|
||||
:param control_points_list: STEP Standard TYPE LIST OF
|
||||
cartesian_point (ENTITY)
|
||||
:type control_points_list: tuple
|
||||
:param curve_form: STEP Standard TYPE b_spline_curve_form (ENUM).
|
||||
ENUMERATION OF (polyline_form, circular_arc, elliptic_arc,
|
||||
parabolic_arc, hyperbolic_arc, unspecified).
|
||||
:type curve_form: str
|
||||
:param closed_curve: STEP Standard TYPE LOGICAL
|
||||
:type closed_curve: str
|
||||
:param self_intersect: STEP Standard TYPE LOGICAL
|
||||
:type self_intersect: str
|
||||
|
||||
Derived Attributes
|
||||
|
||||
:param dim: STEP Standard TYPE dimension_count (INTEGER)
|
||||
:type dim: int
|
||||
:param upper_index_on_control_points: STEP Standard TYPE INTEGER
|
||||
:type upper_index_on_control_points: int
|
||||
:param control_points: STEP Standard TYPE ARRAY OF
|
||||
cartesian_point (ENTITY)
|
||||
:type control_points: tuple
|
||||
|
||||
.. seealso::
|
||||
https://www.steptools.com/stds/stp_aim/html/t_b_spline_curve.html
|
||||
"""
|
||||
def __init__(self, name, degree, control_points_list, curve_form,
|
||||
closed_curve, self_intersect):
|
||||
self.degree = degree
|
||||
self.control_points_list = control_points_list
|
||||
self.curve_form = curve_form
|
||||
self.closed_curve = BOOLEAN_to_bool(closed_curve) # TODO: BOOLEAN not LOGICAL?
|
||||
self.self_intersect = BOOLEAN_to_bool(self_intersect) # TODO: BOOLEAN not LOGICAL?
|
||||
|
||||
self.upper_index_on_control_points = len(control_points_list) - 1
|
||||
# TODO: necessary?
|
||||
self.control_points = list_to_array(
|
||||
control_points_list, 0, self.upper_index_on_control_points)
|
||||
|
||||
super().__init__(name)
|
||||
|
||||
class B_SPLINE_CURVE_WITH_KNOTS(B_SPLINE_CURVE):
|
||||
"""STEP Standard ENTITY b_spline_curve_with_knots
|
||||
|
||||
Explicit Attributes
|
||||
|
||||
:param name: STEP Standard TYPE label (STRING)
|
||||
:type name: str
|
||||
:param degree: STEP Standard TYPE INTEGER
|
||||
:type degree: int
|
||||
:param control_points_list: STEP Standard TYPE LIST OF
|
||||
cartesian_point (ENTITY)
|
||||
:type control_points_list: tuple
|
||||
:param curve_form: STEP Standard TYPE b_spline_curve_form (ENUM).
|
||||
ENUMERATION OF (polyline_form, circular_arc, elliptic_arc,
|
||||
parabolic_arc, hyperbolic_arc, unspecified).
|
||||
:type curve_form: str
|
||||
:param closed_curve: STEP Standard TYPE LOGICAL
|
||||
:type closed_curve: str
|
||||
:param self_intersect: STEP Standard TYPE LOGICAL
|
||||
:type self_intersect: str
|
||||
:param knot_multiplicities: STEP Standard TYPE LIST OF INTEGER
|
||||
:type knot_multiplicities: tuple
|
||||
:param knots: STEP Standard TYPE LIST OF parameter_value (REAL)
|
||||
:type knots: tuple
|
||||
:param knot_spec: STEP Standard TYPE knot_type (ENUM).
|
||||
ENUMERATION OF (uniform_knots, quasi_uniform_knots,
|
||||
piecewise_bezier_knots, unspecified).
|
||||
:type knot_spec: str
|
||||
|
||||
Derived Attributes
|
||||
|
||||
:param dim: STEP Standard TYPE dimension_count (INTEGER)
|
||||
:type dim: int
|
||||
:param upper_index_on_control_points: STEP Standard TYPE INTEGER
|
||||
:type upper_index_on_control_points: int
|
||||
:param control_points: STEP Standard TYPE ARRAY OF
|
||||
cartesian_point (ENTITY)
|
||||
:type control_points: tuple
|
||||
:param upper_index_on_knots: STEP Standard TYPE INTEGER
|
||||
:type upper_index_on_knots: int
|
||||
|
||||
.. seealso::
|
||||
https://www.steptools.com/stds/stp_aim/html/t_b_spline_curve_with_knots.html
|
||||
"""
|
||||
def __init__(self, name, degree, control_points_list, curve_form,
|
||||
closed_curve, self_intersect, knot_multiplicities,
|
||||
knots, knot_spec):
|
||||
self.knot_multiplicities = knot_multiplicities
|
||||
self.knots = knots
|
||||
self.knot_spec = knot_spec
|
||||
|
||||
self.upper_index_on_knots = len(knots)
|
||||
|
||||
super().__init__(name, degree, control_points_list, curve_form,
|
||||
closed_curve, self_intersect)
|
||||
|
||||
class ORIENTED_EDGE(EDGE):
|
||||
"""STEP Standard ENTITY oriented_edge
|
||||
|
||||
Explicit Attributes
|
||||
|
||||
:param name: STEP Standard TYPE label (STRING)
|
||||
:type name: str
|
||||
:param edge_start: STEP Standard TYPE vertex (ENTITY)
|
||||
[re-declared attribute from edge]
|
||||
:type edge_start: VERTEX
|
||||
:param edge_end: STEP Standard TYPE vertex (ENTITY)
|
||||
[re-declared attribute from edge]
|
||||
:type edge_end: VERTEX
|
||||
:param edge_element: STEP Standard TYPE edge (ENTITY)
|
||||
:type edge_element: EDGE
|
||||
:param orientation: STEP Standard TYPE BOOLEAN
|
||||
:type orientation: str
|
||||
|
||||
Derived Attributes
|
||||
|
||||
:param edge_start: STEP Standard TYPE vertex (ENTITY)
|
||||
[re-declared attribute from edge]
|
||||
:type edge_start: VERTEX
|
||||
:param edge_end: STEP Standard TYPE vertex (ENTITY)
|
||||
[re-declared attribute from edge]
|
||||
:type edge_end: VERTEX
|
||||
|
||||
.. seealso::
|
||||
https://www.steptools.com/stds/stp_aim/html/t_oriented_edge.html
|
||||
"""
|
||||
def __init__(self, name, edge_start, edge_end, edge_element,
|
||||
orientation):
|
||||
# if edge_element not EDGE
|
||||
if not isinstance(self, type(edge_element)):
|
||||
# value of edge_start should be '*'
|
||||
# value of edge_end should be '*'
|
||||
self.edge_element = edge_element
|
||||
self.orientation = BOOLEAN_to_bool(orientation)
|
||||
|
||||
self.edge_start = boolean_choose(
|
||||
self.orientation,
|
||||
self.edge_element.edge_start, self.edge_element.edge_end)
|
||||
self.edge_end = boolean_choose(
|
||||
self.orientation,
|
||||
self.edge_element.edge_end, self.edge_element.edge_start)
|
||||
|
||||
super().__init__(name, self.edge_start, self.edge_end)
|
||||
else:
|
||||
self = None
|
||||
print('no oriented_edge')
|
||||
|
||||
class LOOP(TOPOLOGICAL_REPRESENTATION_ITEM):
|
||||
"""STEP Standard ENTITY loop
|
||||
|
||||
Explicit Attributes
|
||||
|
||||
:param name: STEP Standard TYPE label (STRING)
|
||||
:type name: str
|
||||
|
||||
.. seealso::
|
||||
https://www.steptools.com/stds/stp_aim/html/t_loop.html
|
||||
"""
|
||||
def __init__(self, name):
|
||||
super().__init__(name)
|
||||
|
||||
class PATH(TOPOLOGICAL_REPRESENTATION_ITEM):
|
||||
"""STEP Standard ENTITY path
|
||||
|
||||
Explicit Attributes
|
||||
|
||||
:param name: STEP Standard TYPE label (STRING)
|
||||
:type name: str
|
||||
:param edge_list: STEP Standard TYPE LIST OF oriented_edge (ENTITY)
|
||||
:type edge_list: tuple
|
||||
|
||||
.. seealso::
|
||||
https://www.steptools.com/stds/stp_aim/html/t_path.html
|
||||
"""
|
||||
def __init__(self, name, edge_list):
|
||||
self.edge_list = edge_list
|
||||
super().__init__(name)
|
||||
if not path_head_to_tail(self):
|
||||
self = None
|
||||
print('no path')
|
||||
|
||||
class EDGE_LOOP(PATH, LOOP):
|
||||
"""STEP Standard ENTITY edge_loop
|
||||
|
||||
Explicit Attributes
|
||||
|
||||
:param name: STEP Standard TYPE label (STRING)
|
||||
:type name: str
|
||||
:param edge_list: STEP Standard TYPE LIST OF oriented_edge (ENTITY)
|
||||
:type edge_list: tuple
|
||||
|
||||
.. seealso::
|
||||
https://www.steptools.com/stds/stp_aim/html/t_edge_loop.html
|
||||
"""
|
||||
def __init__(self, name, edge_list):
|
||||
self.edge_list = edge_list
|
||||
super().__init__(name, edge_list)
|
||||
|
||||
self.ne = len(self.edge_list)
|
||||
if self.edge_list[0].edge_start != self.edge_list[self.ne-1].edge_end:
|
||||
self = None
|
||||
print('no edge_loop')
|
||||
255
pylib/function.py
Normal file → Executable file
255
pylib/function.py
Normal file → Executable file
@@ -9,10 +9,12 @@
|
||||
:synopsis: Mathematical equations.
|
||||
|
||||
.. moduleauthor:: Daniel Weschke <daniel.weschke@directbox.de>
|
||||
|
||||
Functions returns function to apply conditions.
|
||||
"""
|
||||
import math
|
||||
from pylib.data import seq
|
||||
from pylib.mathematics import lcm
|
||||
from .data import seq
|
||||
from .mathematics import lcm
|
||||
|
||||
def transformation(f, scale_vertical=1, scale_horizontal=1,
|
||||
shift_horizontal=0, shift_vertical=0):
|
||||
@@ -79,12 +81,13 @@ def sine_wave(A=1, k=1, f=1, phi=0, D=0, degree=False):
|
||||
|
||||
:results: sine wave function of spatial variable x and optional
|
||||
time t
|
||||
:rtype: function
|
||||
|
||||
In general, the function is:
|
||||
|
||||
.. math::
|
||||
y(x,t) = A\sin(kx + 2\pi f t + \varphi) + D \\
|
||||
y(x,t) = A\sin(kx + \omega t + \varphi) + D
|
||||
y(x,t) = A\sin(kx + \omega t + \varphi) + D \\
|
||||
y(x,t) = A\sin(kx + 2\pi f t + \varphi) + D
|
||||
|
||||
where:
|
||||
|
||||
@@ -143,6 +146,7 @@ def cosine_wave(A=1, k=1, f=1, phi=0, D=0, degree=False):
|
||||
|
||||
:results: sine wave function of spatial variable x and optional
|
||||
time t
|
||||
:rtype: function
|
||||
|
||||
.. seealso::
|
||||
:meth:`sine_wave`
|
||||
@@ -153,12 +157,225 @@ def cosine_wave(A=1, k=1, f=1, phi=0, D=0, degree=False):
|
||||
phi = phi + math.pi/2
|
||||
return sine_wave(A=A, k=k, f=f, phi=phi, D=D, degree=degree)
|
||||
|
||||
def b_spline_basis(knots, knot_span, degree):
|
||||
r"""Cox-de Boor algorithm / recursion formula.
|
||||
|
||||
Calculate the i-th B-spline basis function of degree p: N_{i,p}(u)
|
||||
|
||||
:param knots: Knot vector U. m + 1 non-decreasing numbers / knots,
|
||||
:math:`u_0 <= u_1 <= u_2 <= ... <= u_m`
|
||||
:type knots: list
|
||||
:param knot_span: i-th knot span
|
||||
:type knot_span: int
|
||||
:param degree: degree of B-spline basis function
|
||||
:type degree: int
|
||||
|
||||
:returns: B-spline basis function using variable, u \in [u_0, u_m]
|
||||
:rtype: function
|
||||
|
||||
.. math::
|
||||
N_{i,0}(u) &= \begin{cases} 1 & \text{if } u_i \le u \lt u_{i+1} \\
|
||||
0 & \text{otherwise}\end{cases} \\
|
||||
N_{i,p}(u) &= \frac{u - u_i}{u_{i+p} - u_i} N_{i,p-1}(u) +
|
||||
\frac{u_{i+p+1} - u}{u_{i+p+1} - u_{i+1}} N_{i+1,p-1}(u)
|
||||
|
||||
"""
|
||||
U = knots
|
||||
N = b_spline_basis
|
||||
i = knot_span
|
||||
p = degree
|
||||
|
||||
if p == 0:
|
||||
def Np(u):
|
||||
return 1 if U[i] <= u < U[i+1] else 0
|
||||
else:
|
||||
def Np(u):
|
||||
try:
|
||||
term1 = (u - U[i])/(U[i+p] - U[i])*N(U, i, p-1)(u)
|
||||
except:
|
||||
term1 = 0
|
||||
try:
|
||||
term2 = (U[i+p+1] - u)/(U[i+p+1] - U[i+1])*N(U, i+1, p-1)(u)
|
||||
except:
|
||||
term2 = 0
|
||||
return term1 + term2
|
||||
return Np
|
||||
|
||||
# TODO: other types than clamped?
|
||||
def b_spline_knots(control_point_spans, degree=3):
|
||||
"""B-spline knots to generate a clamped uniform B-spline curve
|
||||
of degree p (order + 1).
|
||||
|
||||
The internal knots are equally spaced (uniform B-spline curve)
|
||||
|
||||
:param control_point_spans: number of control points + 1
|
||||
:type control_point_spans: int
|
||||
:param degree: degree of B-spline basis functions (default = 3)
|
||||
:type degree: int
|
||||
|
||||
:returns: knot vector
|
||||
:rtype: tuple
|
||||
|
||||
.. seealso::
|
||||
:meth:`b_spline_curve_with_knots`
|
||||
"""
|
||||
p = degree
|
||||
n = control_point_spans
|
||||
m = n + p + 1 # number of knot spans
|
||||
|
||||
# number of
|
||||
U_outer = p + 1 # at each of the vector
|
||||
U_inner = m + 1 - 2*(U_outer)
|
||||
|
||||
U = [0]*(U_outer)
|
||||
U += [i for i in range(1, U_inner)]
|
||||
U += [U_inner]*(U_outer)
|
||||
return tuple(U) # tuples are hashable
|
||||
|
||||
def b_spline_curve_with_knots(degree, control_points, knots):
|
||||
"""B-spline curve of degree p (order + 1) on a given set of knots.
|
||||
|
||||
n, m and p must satisfy m = n + p + 1.
|
||||
|
||||
:param degree: degree of B-spline basis functions
|
||||
:type degree: int
|
||||
:param control_points: control points P, n + 1 control points
|
||||
:type control_points: list
|
||||
:param knots: Knot vector U. m + 1 non-decreasing numbers / knots,
|
||||
:math:`u_0 <= u_1 <= u_2 <= ... <= u_m`
|
||||
:type knots: list
|
||||
|
||||
:returns: B-spline curve using variable, u \in [u_0, u_m]
|
||||
:rtype: function
|
||||
|
||||
.. math::
|
||||
\mathbf{C}_p(u) = \sum\limits_{i=0}^{n} N_{i,p}(u) \mathbf{P}_i
|
||||
|
||||
* open B-spline curves
|
||||
|
||||
* the curve will not touch the first and last legs of the
|
||||
control polyline
|
||||
* the knot vector does not have any particular structure
|
||||
* for degree p, intervals [u_0, u_p) and [u_{n-p}, u_n) will not
|
||||
have "full support" of basis functions and are ignored when a
|
||||
B-spline curve is open. For open B-spline curves, the domain
|
||||
is inteval [u_p, u_{n-p}]
|
||||
|
||||
* clamped B-spline curves, nonperiodic B-spline curves
|
||||
|
||||
* the curve is tangent to the first and the last legs just like
|
||||
a Bézier curve
|
||||
* the first knot and the last knot must be repeated p+1 times
|
||||
(i. e., of multiplicity p+1)
|
||||
|
||||
* closed B-spline curves
|
||||
|
||||
* the start and the end of the generated curve join together
|
||||
forming a closed loop
|
||||
* repeating some knots and control points # TODO: which?
|
||||
|
||||
* uniform B-spline curves
|
||||
|
||||
* internal knots are equally spaced
|
||||
|
||||
* Bézier curves
|
||||
|
||||
* a B-spline with no internal knots.
|
||||
|
||||
.. seealso::
|
||||
:meth:`b_spline_knots`
|
||||
"""
|
||||
dim = len(control_points[0])
|
||||
def C(u):
|
||||
NiPi = [0] * dim
|
||||
for i in range(len(control_points)):
|
||||
Ni = b_spline_basis(knots, i, degree)
|
||||
for j in range(dim):
|
||||
NiPi[j] += Ni(u)*control_points[i][j]
|
||||
return NiPi
|
||||
return C
|
||||
|
||||
def sample_half_open(f, a, b, n=50, endpoint_epsilon=1e-7):
|
||||
# hack to sample close to the endpoint
|
||||
x = seq(a, b, (b-a)/n) + [b-endpoint_epsilon]
|
||||
# Sample the function
|
||||
return [f(xi) for xi in x]
|
||||
|
||||
def sample_half_open_seq(f, x, endpoint_epsilon=1e-7):
|
||||
# hack to sample close to the endpoint, x[-1] can be present
|
||||
# multiple times.
|
||||
xend = x[-1]
|
||||
x = [xi for xi in x if xi != xend] + [xend-endpoint_epsilon]
|
||||
# Sample the function
|
||||
return [f(xi) for xi in x]
|
||||
|
||||
#
|
||||
# Parametric equations
|
||||
# roulette
|
||||
#
|
||||
|
||||
def circle(r):
|
||||
r"""Circle
|
||||
|
||||
:param r: radius of the circle
|
||||
:type r: float
|
||||
|
||||
:results: functions for x of theta and y of theta and the interval
|
||||
:rtype: tuple
|
||||
|
||||
.. math::
|
||||
x(\theta) = r\cos\theta \\
|
||||
y(\theta) = r\sin\theta \\
|
||||
\theta = \left[0, 2\pi\right]
|
||||
|
||||
::
|
||||
|
||||
* *
|
||||
* r *
|
||||
* *
|
||||
* *
|
||||
* *
|
||||
* *
|
||||
|
||||
>>> x, y = circle(20)[:2]
|
||||
>>> x, y, _ = circle(20)
|
||||
>>> x, y, interval = circle(20)
|
||||
"""
|
||||
return ellipse(r, r)
|
||||
|
||||
def ellipse(a, b):
|
||||
r"""Ellipse
|
||||
|
||||
:param a: semi-major axis
|
||||
:type a: float
|
||||
:param b: semi-minor axis
|
||||
:type b: float
|
||||
|
||||
:results: functions for x of theta and y of theta and the interval
|
||||
:rtype: tuple
|
||||
|
||||
.. math::
|
||||
x(\theta) = a\cos\theta \\
|
||||
y(\theta) = b\sin\theta \\
|
||||
\theta = \left[0, 2\pi\right]
|
||||
|
||||
::
|
||||
|
||||
* .*
|
||||
* b : *
|
||||
* :......*
|
||||
* a *
|
||||
* *
|
||||
* *
|
||||
|
||||
>>> x, y = ellipse(10, 5)[:2]
|
||||
>>> x, y, _ = ellipse(10, 5)
|
||||
>>> x, y, interval = ellipse(10, 5)
|
||||
"""
|
||||
x = lambda theta: a*math.cos(theta)
|
||||
y = lambda theta: b*math.sin(theta)
|
||||
return x, y, [0, 2*math.pi]
|
||||
|
||||
def hypotrochoid(R, r, d):
|
||||
r"""Hypotrochoid
|
||||
|
||||
@@ -173,7 +390,7 @@ def hypotrochoid(R, r, d):
|
||||
:param d: distance from the center of the interior circle
|
||||
:type d: float
|
||||
|
||||
:results: functions for x of theta and y of theta
|
||||
:results: functions for x of theta and y of theta and the interval
|
||||
:rtype: tuple
|
||||
|
||||
.. math::
|
||||
@@ -188,7 +405,7 @@ def hypotrochoid(R, r, d):
|
||||
* *
|
||||
* * * *
|
||||
* * r **
|
||||
* * .... *
|
||||
* * ,.. *
|
||||
* * d *
|
||||
* * **
|
||||
* * * *
|
||||
@@ -196,16 +413,16 @@ def hypotrochoid(R, r, d):
|
||||
* *
|
||||
* * *
|
||||
|
||||
>>> x, y = hyotrochoid(20, 6, 6)[:1]
|
||||
>>> x, y, theta_end = hyotrochoid(20, 6, 6)
|
||||
>>> x, y = hyotrochoid(20, 6, 6)[:2]
|
||||
>>> x, y, _ = hyotrochoid(20, 6, 6)
|
||||
>>> x, y, interval = hyotrochoid(20, 6, 6)
|
||||
|
||||
.. seealso::
|
||||
:meth:`pylib.mathematics.lcm`
|
||||
"""
|
||||
x = lambda theta: (R-r)*math.cos(theta) + d*math.cos((R-r)/r * theta)
|
||||
y = lambda theta: (R-r)*math.sin(theta) - d*math.sin((R-r)/r * theta)
|
||||
theta_end = 2*math.pi*lcm(r, R)/R
|
||||
return x, y, theta_end
|
||||
return x, y, [0, 2*math.pi*lcm(r, R)/R]
|
||||
|
||||
def epitrochoid(R, r, d):
|
||||
r"""Epitrochoid
|
||||
@@ -221,7 +438,7 @@ def epitrochoid(R, r, d):
|
||||
:param d: distance from the center of the exterior circle
|
||||
:type d: float
|
||||
|
||||
:results: functions for x of theta and y of theta
|
||||
:results: functions for x of theta and y of theta and the interval
|
||||
:rtype: tuple
|
||||
|
||||
.. math::
|
||||
@@ -236,7 +453,7 @@ def epitrochoid(R, r, d):
|
||||
* *
|
||||
* * * *
|
||||
* * * r *
|
||||
* ** .... *
|
||||
* ** .., *
|
||||
* ** d *
|
||||
* * * *
|
||||
* * * *
|
||||
@@ -244,13 +461,13 @@ def epitrochoid(R, r, d):
|
||||
* *
|
||||
* * *
|
||||
|
||||
>>> x, y = epitrochoid(3, 1, 0.5)[:1]
|
||||
>>> x, y, theta_end = epitrochoid(3, 1, 0.5)
|
||||
>>> x, y = epitrochoid(3, 1, 0.5)[:2]
|
||||
>>> x, y, _ = epitrochoid(3, 1, 0.5)
|
||||
>>> x, y, interval = epitrochoid(3, 1, 0.5)
|
||||
"""
|
||||
x = lambda theta: (R+r)*math.cos(theta) - d*math.cos((R+r)/r * theta)
|
||||
y = lambda theta: (R+r)*math.sin(theta) - d*math.sin((R+r)/r * theta)
|
||||
theta_end = 2*math.pi
|
||||
return x, y, theta_end
|
||||
return x, y, [0, 2*math.pi]
|
||||
|
||||
def to_str(f, x=None, x_0=0, x_1=1, t=None, h=10, w=80, density=1, char_set="line"):
|
||||
"""Represent functions as string frame with a specific character set.
|
||||
@@ -264,7 +481,7 @@ def to_str(f, x=None, x_0=0, x_1=1, t=None, h=10, w=80, density=1, char_set="lin
|
||||
:type w: int
|
||||
|
||||
:param char_set: either "braille" or "block". "braille" uses Unicode
|
||||
Characters in the Braille Patterns Block (fisrt index U+2800, last
|
||||
Characters in the Braille Patterns Block (first index U+2800, last
|
||||
index U+28FF [CUDB]_) and the "block" uses part of the Unicode
|
||||
Characters in the Block Elements Block (fisrt index U+2580, last
|
||||
index U+259F [CUDB]_). Alias for braille is line and alias for
|
||||
@@ -398,7 +615,9 @@ def to_str(f, x=None, x_0=0, x_1=1, t=None, h=10, w=80, density=1, char_set="lin
|
||||
# divide step width of the sequence by 2 (double density, 2 dots/pixel per char)
|
||||
# multiplicate x by 2 (2 dots/pixel per char)
|
||||
for x_i in seq(x_0*window_factor*pixels_horizontal, x_1*window_factor*pixels_horizontal, 1/density):
|
||||
canvas.set(x_i, f(x_i, t))
|
||||
y_i = f(x_i, t)
|
||||
if 0 >= y_i >= -h*pixels_vertical:
|
||||
canvas.set(x_i, y_i)
|
||||
#frame = canvas.frame(min_x=a*pixel_per_char, min_y=1, max_x=b*pixel_per_char, max_y=21)
|
||||
frame = canvas.frame()
|
||||
elif char_set in ["histogram", "block"]:
|
||||
|
||||
@@ -10,8 +10,8 @@
|
||||
|
||||
.. moduleauthor:: Daniel Weschke <daniel.weschke@directbox.de>
|
||||
|
||||
Affine transforms
|
||||
-----------------
|
||||
|
||||
.. rubric:: Affine transforms
|
||||
|
||||
Functions in augmented space, in homogenous coordinates.
|
||||
Points are augment to 4 dimensions, by adding a dummy coordinate.
|
||||
@@ -21,13 +21,22 @@ as a linear transformation.
|
||||
"""
|
||||
import math
|
||||
import copy
|
||||
from .data import seq
|
||||
from .mathematics import vector, matrix
|
||||
from .function import circle, ellipse, b_spline_curve_with_knots
|
||||
|
||||
class Properties():
|
||||
circle_sectors = 12 # 12 = 30°
|
||||
|
||||
class Direction(vector):
|
||||
"""Direction in local coordinate system"""
|
||||
def __init__(self, x=1, y=0, z=0):
|
||||
super().__init__([x, y, z, 0])
|
||||
|
||||
@classmethod
|
||||
def cross(cls, a, b):
|
||||
return cls(*vector.cross(a[:3], b[:3]))
|
||||
|
||||
class Point(vector):
|
||||
"""Point in local coordinate system"""
|
||||
def __init__(self, x=0, y=0, z=0):
|
||||
@@ -44,32 +53,41 @@ class Point(vector):
|
||||
class CS(matrix):
|
||||
"""Coordinate system
|
||||
"""
|
||||
def __init__(self, x=[1, 0, 0], y=[0, 1, 0], z=[0, 0, 1]):
|
||||
super().__init__([[*x, 0], [*y, 0], [*z, 0], [0, 0, 0, 1]])
|
||||
def __init__(self, x=Direction(1, 0, 0), y=Direction(0, 1, 0),
|
||||
z=Direction(0, 0, 1)):
|
||||
super().__init__([x, y, z, vector([0, 0, 0, 1])])
|
||||
|
||||
@staticmethod
|
||||
def x90():
|
||||
return CS((1, 0, 0), (0, 0, -1), (0, 1, 0))
|
||||
@classmethod
|
||||
def init_xyz(cls, x=[1, 0, 0], y=[0, 1, 0], z=[0, 0, 1]):
|
||||
return cls(Direction(*x), Direction(*y), Direction(*z))
|
||||
|
||||
@staticmethod
|
||||
def xm90():
|
||||
return CS((1, 0, 0), (0, 0, 1), (0, -1, 0))
|
||||
@classmethod
|
||||
def x90(cls):
|
||||
return cls(Direction(1, 0, 0), Direction(0, 0, -1),
|
||||
Direction(0, 1, 0))
|
||||
|
||||
@staticmethod
|
||||
def y90():
|
||||
return CS((0, 0, 1), (0, 1, 0), (-1, 0, 0))
|
||||
@classmethod
|
||||
def xm90(cls):
|
||||
return cls(Direction(1, 0, 0), Direction(0, 0, 1),
|
||||
Direction(0, -1, 0))
|
||||
|
||||
@staticmethod
|
||||
def ym90():
|
||||
return CS((0, 0, -1), (0, 1, 0), (1, 0, 0))
|
||||
@classmethod
|
||||
def y90(cls):
|
||||
return cls(Direction(0, 0, 1), Direction(0, 1, 0),
|
||||
Direction(-1, 0, 0))
|
||||
|
||||
@classmethod
|
||||
def ym90(cls):
|
||||
return cls(Direction(0, 0, -1), Direction(0, 1, 0),
|
||||
Direction(1, 0, 0))
|
||||
|
||||
def get_coordinates(self):
|
||||
"""Get coordinates in 3d space"""
|
||||
return self[:3,:3]
|
||||
|
||||
# TODO: Wireframe(list) or Wireframe(matrix) ?
|
||||
# TODO: Polyline(list) or Polyline(matrix) ?
|
||||
# list of Points
|
||||
class Wireframe:
|
||||
class Polyline:
|
||||
"""Open and closed wireframe object in local coordinate system
|
||||
|
||||
This class create its own points (copy).
|
||||
@@ -81,6 +99,10 @@ class Wireframe:
|
||||
def __str__(self):
|
||||
return '[' + ', '.join([str(point) for point in self._points]) + ']'
|
||||
|
||||
def __repr__(self):
|
||||
return self.__class__.__name__ + \
|
||||
'(' + ', '.join([str(point) for point in self._points]) + ')'
|
||||
|
||||
def __iter__(self):
|
||||
"""Returns the Iterator object"""
|
||||
return iter(self.points())
|
||||
@@ -128,24 +150,109 @@ class Wireframe:
|
||||
self._points = [point.ch_cs(cs) for point in self._points]
|
||||
return self
|
||||
|
||||
class Line(Wireframe):
|
||||
"""Line a open wireframe object in local coordinate system"""
|
||||
class Line(Polyline):
|
||||
"""Line, an open wireframe object in local coordinate system"""
|
||||
def __init__(self, point1=Point(-1, 0, 0), point2=Point(1, 0, 0)):
|
||||
super().__init__(point1, point2)
|
||||
|
||||
class Polygon(Wireframe):
|
||||
# TODO: combining wit non Arc version?
|
||||
class ArcCircle(Polyline):
|
||||
"""Arc of a circle, an open wireframe object in local coordinate
|
||||
system
|
||||
"""
|
||||
def __init__(self, radius=1, ang1=0, ang2=math.pi/2, n=None):
|
||||
x, y, interval = circle(radius)
|
||||
if not n:
|
||||
n = Properties.circle_sectors
|
||||
delta = interval[1]/n
|
||||
points = []
|
||||
points.append(Point(x(ang1), y(ang1), 0))
|
||||
if ang1 > ang2 :
|
||||
ang1 = ang1 - 2*math.pi
|
||||
a, b = int(ang1 // delta) + 1, int(ang2 // delta) + 1
|
||||
for i in range(a, b):
|
||||
points.append(Point(x(i*delta), y(i*delta), 0))
|
||||
points.append(Point(x(ang2), y(ang2), 0))
|
||||
super().__init__(*points)
|
||||
|
||||
# TODO: combining wit non Arc version?
|
||||
class ArcEllipse(Polyline):
|
||||
"""Arc of an ellipse, an open wireframe object in local
|
||||
coordinate system
|
||||
"""
|
||||
def __init__(self, a=1, b=1, ang1=0, ang2=math.pi/2, n=None):
|
||||
x, y, interval = ellipse(a, b)
|
||||
if not n:
|
||||
n = Properties.circle_sectors
|
||||
delta = interval[1]/n
|
||||
points = []
|
||||
points.append(Point(x(ang1), y(ang1), 0))
|
||||
if ang1 > ang2 :
|
||||
ang1 = ang1 - 2*math.pi
|
||||
a, b = int(ang1 // delta) + 1, int(ang2 // delta) + 1
|
||||
for i in range(a, b):
|
||||
points.append(Point(x(i*delta), y(i*delta), 0))
|
||||
points.append(Point(x(ang2), y(ang2), 0))
|
||||
super().__init__(*points)
|
||||
|
||||
# redefining the .function.sample_half_open(f, a, b, n=50, endpoint_epsilon=1e-7)
|
||||
# to create a list of Points
|
||||
def sample_half_open(f, a, b, n=50, endpoint_epsilon=1e-7):
|
||||
# hack to sample close to the endpoint
|
||||
x = seq(a, b, (b-a)/n) + [b-endpoint_epsilon]
|
||||
# Sample the function
|
||||
return [Point(*f(xi)) for xi in x]
|
||||
|
||||
# TODO: naming? combining wit non Arc version?
|
||||
class ArcBSplineCurveWithKnots(Polyline):
|
||||
"""B-spline curve with knots, an open wireframe object in local
|
||||
coordinate system"""
|
||||
def __init__(self, degree, control_points, knot_multiplicities,
|
||||
knots, start, end, n=5):
|
||||
knots = [knots[i] for i in range(len(knots)) for
|
||||
j in range(knot_multiplicities[i])]
|
||||
#u = seq(knots[0], knots[-1], (knots[-1]-knots[0])/n) + [knots[-1]-1e-7]
|
||||
C = b_spline_curve_with_knots(degree, control_points, knots)
|
||||
#points = [Point(*C(ui)) for ui in u]
|
||||
points = sample_half_open(C, start, end, n=n, endpoint_epsilon=1e-7)
|
||||
super().__init__(*points)
|
||||
|
||||
class B_spline_curve_with_knots(Polyline):
|
||||
"""B-spline curve with knots, an open wireframe object in local
|
||||
coordinate system"""
|
||||
def __init__(self, degree, control_points, knot_multiplicities,
|
||||
knots, n=5):
|
||||
knots = [knots[i] for i in range(len(knots)) for
|
||||
j in range(knot_multiplicities[i])]
|
||||
#u = seq(knots[0], knots[-1], (knots[-1]-knots[0])/n) + [knots[-1]-1e-7]
|
||||
C = b_spline_curve_with_knots(degree, control_points, knots)
|
||||
#points = [Point(*C(ui)) for ui in u]
|
||||
points = sample_half_open(C, knots[0], knots[-1], n=n, endpoint_epsilon=1e-7)
|
||||
super().__init__(*points)
|
||||
|
||||
class Polygon(Polyline):
|
||||
"""Polygon as closed wireframe object in local coordinate system"""
|
||||
def __init__(self, *points):
|
||||
super().__init__(*points, closed=True)
|
||||
|
||||
class Circle(Polygon):
|
||||
"""Circle a closed wireframe object in local coordinate system"""
|
||||
def __init__(self, radius=1, n=10):
|
||||
points = []
|
||||
for i in range(n):
|
||||
x = radius * math.cos(i*2*math.pi/n)
|
||||
y = radius * math.sin(i*2*math.pi/n)
|
||||
points.append(Point(x, y, 0))
|
||||
"""Circle, a closed wireframe object in local coordinate system"""
|
||||
def __init__(self, radius=1, n=None):
|
||||
x, y, interval = circle(radius)
|
||||
if not n:
|
||||
n = Properties.circle_sectors
|
||||
delta = interval[1]/n
|
||||
points = [Point(x(i*delta), y(i*delta), 0) for i in range(n)]
|
||||
super().__init__(*points)
|
||||
|
||||
class Ellipse(Polygon):
|
||||
"""Circle, a closed wireframe object in local coordinate system"""
|
||||
def __init__(self, a=1, b=1, n=None):
|
||||
x, y, interval = ellipse(a, b)
|
||||
if not n:
|
||||
n = Properties.circle_sectors
|
||||
delta = interval[1]/n
|
||||
points = [Point(x(i*delta), y(i*delta), 0) for i in range(n)]
|
||||
super().__init__(*points)
|
||||
|
||||
class Solid:
|
||||
@@ -205,6 +312,13 @@ class World:
|
||||
"""Returns the Iterator object"""
|
||||
return iter(self.objects())
|
||||
|
||||
def __str__(self):
|
||||
result = 'World(\n'
|
||||
for i in self.objects():
|
||||
result += ' ' + repr(i) + ',\n'
|
||||
result += ')'
|
||||
return result
|
||||
|
||||
def _store_init(self):
|
||||
"""Initialize or reset calculated values, because a new object
|
||||
was added.
|
||||
@@ -244,7 +358,7 @@ class World:
|
||||
def wireframes(self):
|
||||
result = []
|
||||
for i in self.objects():
|
||||
if isinstance(i, Wireframe):
|
||||
if isinstance(i, Polyline):
|
||||
result.append(i.points())
|
||||
elif isinstance(i, Solid):
|
||||
[result.append(j.points()) for j in i.wireframes()]
|
||||
@@ -253,7 +367,7 @@ class World:
|
||||
def wireframes_xy(self):
|
||||
result = []
|
||||
for i in self.objects():
|
||||
if isinstance(i, Wireframe):
|
||||
if isinstance(i, Polyline):
|
||||
result.append(i.xy())
|
||||
elif isinstance(i, Solid):
|
||||
[result.append(j.xy()) for j in i.wireframes()]
|
||||
@@ -262,7 +376,7 @@ class World:
|
||||
def wireframes_xyz(self):
|
||||
result = []
|
||||
for i in self.objects():
|
||||
if isinstance(i, Wireframe):
|
||||
if isinstance(i, Polyline):
|
||||
result.append(i.xyz())
|
||||
elif isinstance(i, Solid):
|
||||
[result.append(j.xyz()) for j in i.wireframes()]
|
||||
@@ -273,6 +387,7 @@ class World:
|
||||
|
||||
def add(self, *objects):
|
||||
self._store_init() # calculated values are not correct anymore
|
||||
# [] + [] not possible bc objects are vectors
|
||||
[self._objects.append(i) for i in objects]
|
||||
return self
|
||||
|
||||
|
||||
@@ -227,13 +227,18 @@ def cad_wireframe(world, centering=True):
|
||||
fig.canvas.mpl_connect('resize_event',
|
||||
lambda event: onresize(event, world))
|
||||
|
||||
# 'rotate: ←left, right, up, down, ctrl+left, ctrl+right\n' +
|
||||
# 'pan: shift+left, shift+right, shift+up, shift+down\n' +
|
||||
# 'zoom: ctrl+up, ctrl+down\n' +
|
||||
# 'view: f (front), l (left), r (right), t (top), b (bottom)\n' +
|
||||
# ' i (isometric), d (dimetric)',
|
||||
pylab.text(
|
||||
0+.01, 1-.015,
|
||||
'rotate: left, right, up, down, ctrl+left, ctrl+right\n' +
|
||||
'pan: shift+left, shift+right, shift+up, shift+down\n' +
|
||||
'zoom: ctrl+up, ctrl+down\n' +
|
||||
'view: f (front), l (left), r (right), t (top), b (bottom)\n' +
|
||||
' i (isometric), d (dimetric)',
|
||||
'rotate: [←], [→], [↑], [↓], [Ctrl][←], [Ctrl][→]\n' +
|
||||
'pan: [Shift][←], [Shift][→], [Shift][↑], [Shift][↓]\n' +
|
||||
'zoom: [Ctrl][↑], [Ctrl][↓]\n' +
|
||||
'view: [f]ront, [l]eft, [r]ight, [t]op, [b]ottom\n' +
|
||||
' [i]sometric, [d]imetric',
|
||||
horizontalalignment='left',
|
||||
verticalalignment='top',
|
||||
transform=fig.transFigure,
|
||||
|
||||
48
pylib/helper.py
Executable file
48
pylib/helper.py
Executable file
@@ -0,0 +1,48 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
"""Helper objects.
|
||||
|
||||
:Date: 2020-01-01
|
||||
|
||||
.. module:: helper
|
||||
:platform: *nix, Windows
|
||||
:synopsis: Helper objects.
|
||||
|
||||
.. moduleauthor:: Daniel Weschke <daniel.weschke@directbox.de>
|
||||
"""
|
||||
import time
|
||||
from contextlib import ContextDecorator
|
||||
|
||||
class timeit(ContextDecorator):
|
||||
"""Meassure time for a function or code block.
|
||||
|
||||
:param description: description for the function or code block
|
||||
used for the print-out
|
||||
:type description: str
|
||||
|
||||
:Example:
|
||||
|
||||
>>> with timeit('section_test'):
|
||||
... # code
|
||||
section_test took 0.006 ms
|
||||
|
||||
::
|
||||
|
||||
@timeit('func')
|
||||
def func():
|
||||
# code
|
||||
|
||||
>>> func()
|
||||
func took 0.006 ms
|
||||
"""
|
||||
def __init__(self, description=None):
|
||||
self.description = description
|
||||
|
||||
def __enter__(self):
|
||||
self.start_time = time.time()
|
||||
return self # to use as: with Timit() as t:
|
||||
|
||||
def __exit__(self, *exc): # exc: type, value, traceback
|
||||
elapsed_time_ms = (time.time() - self.start_time) * 1000
|
||||
print('{:s} took {:.3f} ms'.format(self.description, elapsed_time_ms))
|
||||
return False
|
||||
@@ -95,7 +95,7 @@ class vector(list):
|
||||
>>> v[3]
|
||||
4
|
||||
"""
|
||||
# use the list.__getslice__ method and convert result to vector
|
||||
# use the list.__getitem__ method and convert result to vector
|
||||
item = super().__getitem__(index)
|
||||
return vector(item) if isinstance(item, list) else item
|
||||
|
||||
@@ -350,12 +350,11 @@ class vector(list):
|
||||
|
||||
@staticmethod
|
||||
def full(length, fill_value):
|
||||
"""Returns a vector of length m or matrix of size m rows, n
|
||||
columns filled with v.
|
||||
"""Returns a vector of length m filled with v.
|
||||
|
||||
:param length: length of the vector, e. g. 3
|
||||
:type length: int
|
||||
:param fill_value: Fill value
|
||||
:param fill_value: fill value
|
||||
:Type fill_value: scalar
|
||||
|
||||
:Example:
|
||||
@@ -368,15 +367,14 @@ class vector(list):
|
||||
|
||||
@staticmethod
|
||||
def zeros(length):
|
||||
"""Returns a zero vector of length m or matrix of size rows, n
|
||||
columns filled with zeros.
|
||||
"""Returns a zero vector of length m filled with zeros.
|
||||
|
||||
:param length: length of the vector, e. g. 3
|
||||
:type length: int
|
||||
|
||||
:Example:
|
||||
|
||||
>>> v = zeros(3)
|
||||
>>> v = vector.zeros(3)
|
||||
>>> print(v)
|
||||
[0.0, 0.0, 0.0]
|
||||
"""
|
||||
@@ -384,40 +382,42 @@ class vector(list):
|
||||
|
||||
@staticmethod
|
||||
def ones(length):
|
||||
"""Returns a vector of length m or matrix of size rows, n
|
||||
columns filled with ones.
|
||||
"""Returns a vector of length m filled with ones.
|
||||
|
||||
:param length: lhape of the vector, e. g. 3
|
||||
:type length: int
|
||||
|
||||
:Example:
|
||||
|
||||
>>> v = ones(3)
|
||||
>>> v = vector.ones(3)
|
||||
>>> print(v)
|
||||
[1.0, 1.0, 1.0]
|
||||
"""
|
||||
return vector.full(length, 1.)
|
||||
|
||||
@staticmethod
|
||||
def random(shape, lmin=0.0, lmax=1.0):
|
||||
"""Returns a random vector of length n or matrix of size m rows,
|
||||
n columns filled with random numbers.
|
||||
def random(length, lmin=0.0, lmax=1.0):
|
||||
"""Returns a random vector of length n filled with random
|
||||
numbers.
|
||||
|
||||
:param length: lhape of the vector, e. g. 3
|
||||
:type length: int
|
||||
|
||||
:Example:
|
||||
|
||||
>>> v = random(3)
|
||||
>>> v = vector.random(3)
|
||||
>>> print(v)
|
||||
[0.9172905912930438, 0.8908124278322492, 0.5256002790725927]
|
||||
>>> v = random(3, 1, 2)
|
||||
>>> v = vector.random(3, 1, 2)
|
||||
>>> print(v)
|
||||
[1.2563665665080803, 1.9270454509964547, 1.2381672401270487]
|
||||
"""
|
||||
import random
|
||||
dl = lmax-lmin
|
||||
return vector([dl*random.random()+lmin for i in range(shape)])
|
||||
return vector([dl*random.random()+lmin for i in range(length)])
|
||||
|
||||
@staticmethod
|
||||
def normalize(a):
|
||||
def normalized(a):
|
||||
r"""Normalize a vector (i. e. the vector has a length of 1)
|
||||
|
||||
:type a: vector
|
||||
@@ -433,7 +433,12 @@ class vector(list):
|
||||
|
||||
@staticmethod
|
||||
def ang(a, b):
|
||||
return math.acos(a * b / (abs(a) * abs(b)))
|
||||
x = a * b / (abs(a) * abs(b))
|
||||
# decimal floating-point numbers are only approximated by the
|
||||
# binary floating-point numbers actually stored in the machine.
|
||||
# https://docs.python.org/3.8/tutorial/floatingpoint.html
|
||||
xr15 = round(x, 15)
|
||||
return math.acos(xr15) if -1 <= xr15 <= 1 else math.acos(x)
|
||||
|
||||
@staticmethod
|
||||
def conjugate(a):
|
||||
@@ -489,9 +494,30 @@ class vector(list):
|
||||
.. math::
|
||||
\mathbf{c} = \mathbf{a} \times \mathbf{b}
|
||||
"""
|
||||
return [a[1]*b[2] - a[2]*b[1],
|
||||
a[2]*b[0] - a[0]*b[2],
|
||||
a[0]*b[1] - a[1]*b[0]]
|
||||
return vector([a[1]*b[2] - a[2]*b[1],
|
||||
a[2]*b[0] - a[0]*b[2],
|
||||
a[0]*b[1] - a[1]*b[0]])
|
||||
|
||||
@staticmethod
|
||||
def isclose(a, b, rel_tol=0.05, abs_tol=1e-8):
|
||||
return all([math.isclose(i, j, rel_tol=rel_tol, abs_tol=abs_tol) for i, j in zip(a, b)])
|
||||
|
||||
def iscloseto(self, other):
|
||||
return vector.isclose(self, other)
|
||||
|
||||
def normalize(self):
|
||||
r"""Normalize a vector (i. e. the vector has a length of 1)
|
||||
|
||||
:type a: vector
|
||||
|
||||
.. math::
|
||||
\mathbf{\hat{a}} = \frac{\mathbf{a}}{|\mathbf{a}|}
|
||||
|
||||
.. seealso::
|
||||
:meth:`__abs__` for a norm (magnitude) of a vector
|
||||
"""
|
||||
self[:] = vector.normalized(self)
|
||||
return self
|
||||
|
||||
def rotate_x(self, theta):
|
||||
r"""Rotation about the x dirction.
|
||||
@@ -614,8 +640,16 @@ class matrix(list):
|
||||
|
||||
>>> m = matrix([[1, 2, 3, 0], [4, 5, 6, 0], [7, 8, 9, 0], \
|
||||
[0, 0, 0, 0]])
|
||||
>>> print(m[:])
|
||||
[[1, 2, 3, 0], [4, 5, 6, 0], [7, 8, 9, 0], [0, 0, 0, 0]]
|
||||
>>> print(m[2])
|
||||
[7, 8, 9, 0]
|
||||
>>> print(m[2, :])
|
||||
[7, 8, 9, 0]
|
||||
>>> print(m[:, 2])
|
||||
[3, 6, 9, 0]
|
||||
>>> print(m[2, 2])
|
||||
9
|
||||
>>> print(m[:, 1:3])
|
||||
[[2, 3], [5, 6], [8, 9], [0, 0]]
|
||||
>>> print(m[0:2, 1:3])
|
||||
@@ -623,15 +657,143 @@ class matrix(list):
|
||||
>>> print(m[::2, ::2])
|
||||
[[1, 3], [7, 9]]
|
||||
"""
|
||||
# TODO single row or column = vector (1d list)?
|
||||
# index: slice(stop), slice(start, stop[, step])
|
||||
# for m[(1,3),:] -> index = ((1, 3), slice(None, None, None))
|
||||
# use the list.__getslice__ method and convert result to vector
|
||||
try: # 2d slicing (tuple of sclices)
|
||||
item = [row.__getitem__(index[1]) for
|
||||
row in super().__getitem__(index[0])]
|
||||
except: # 1d slicing
|
||||
# use the list.__getitem__ method and convert result to matrix
|
||||
#print(index)
|
||||
try: # 2d slicing (tuple of sclices)
|
||||
try: # range:range or range:single: [:, 2]
|
||||
#print(1)
|
||||
item = [row.__getitem__(index[1]) for
|
||||
row in super().__getitem__(index[0])]
|
||||
except: # single:range: [2, :], [2, 2]
|
||||
#print(2)
|
||||
item = super().__getitem__(index[0]).__getitem__(index[1])
|
||||
except: # 1d slicing: [:], [2], [2][2]
|
||||
#print(3)
|
||||
item = super().__getitem__(index)
|
||||
return matrix(item) if isinstance(item, list) else item
|
||||
#print(item)
|
||||
return matrix(item) if isinstance(item, list) and \
|
||||
isinstance(item[0], list) else item
|
||||
|
||||
def __setitem__(self, index, value):
|
||||
#print(index, value)
|
||||
try: # [2, 2]
|
||||
super().__getitem__(index[0]).__setitem__(index[1], value)
|
||||
except: # [2], [2][2]
|
||||
super().__setitem__(index, value)
|
||||
#print(self)
|
||||
|
||||
def __mul__(self, other):
|
||||
r"""Scalar multiplication, dot product (inner product) or
|
||||
matrix-vector multiplication. (new object)
|
||||
|
||||
:type other: scalar, vector (or 1d list), matrix (or 2d list)
|
||||
|
||||
.. math::
|
||||
\mathbf{C} &= \mathbf{A} \cdot b \\
|
||||
\mathbf{c} &= \mathbf{A} \cdot \mathbf{b} \\
|
||||
\mathbf{C} &= \mathbf{A} \cdot \mathbf{B}
|
||||
|
||||
.. note::
|
||||
No size checking will be conducted, therefore no exceptions
|
||||
for wrong usage (result will be nonsense).
|
||||
|
||||
:Example:
|
||||
|
||||
>>> m = matrix([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], \
|
||||
[0, 0, 0, 1]]) * 5
|
||||
>>> print(m)
|
||||
[[5, 10, 15, 20], [25, 30, 35, 40], [45, 50, 55, 60], [0, 0, 0, 5]]
|
||||
>>> m = matrix([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], \
|
||||
[0, 0, 0, 1]]) * 5.
|
||||
>>> print(m)
|
||||
[[5.0, 10.0, 15.0, 20.0], [25.0, 30.0, 35.0, 40.0], [45.0, 50.0, 55.0, 60.0], [0.0, 0.0, 0.0, 5.0]]
|
||||
>>> v = matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) * \
|
||||
vector([12, 12, 13])
|
||||
>>> print(v)
|
||||
[75, 186, 297]
|
||||
>>> m = matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) * \
|
||||
matrix([[12, 12, 13], [14, 15, 16], [17, 18, 19]])
|
||||
>>> print(m)
|
||||
[[91, 96, 102], [220, 231, 246], [349, 366, 390]]
|
||||
|
||||
.. seealso::
|
||||
:meth:`__rmul__`
|
||||
"""
|
||||
try: # matrix * matrix
|
||||
return matrix([[sum(c*d for c, d in zip(a_row, b_col)) for
|
||||
b_col in zip(*other)] for a_row in self])
|
||||
except:
|
||||
try: # matrix * vector
|
||||
return vector([sum(c*d for c, d in zip(a_row, other)) for
|
||||
a_row in self])
|
||||
except: # matrix * scalar
|
||||
return matrix([[a*other for a in a_row] for a_row in self])
|
||||
|
||||
def __rmul__(self, other):
|
||||
r"""Scalar multiplication, dot product (inner product) or
|
||||
vector-matrix multiplication. (new object)
|
||||
|
||||
:type other: scalar (or 1d list and 2d list)
|
||||
|
||||
.. math::
|
||||
\mathbf{C} &= a \cdot \mathbf{B} \\
|
||||
\mathbf{c} &= \mathbf{a} \cdot \mathbf{B} \\
|
||||
\mathbf{C} &= \mathbf{A} \cdot \mathbf{B}
|
||||
|
||||
.. note::
|
||||
No size checking will be conducted, therefore no exceptions
|
||||
for wrong usage (result will be nonsense).
|
||||
|
||||
:Example:
|
||||
|
||||
>>> m = 5 * matrix([[1, 2, 3, 4], [5, 6, 7, 8], \
|
||||
[9, 10, 11, 12], [0, 0, 0, 1]])
|
||||
>>> print(m)
|
||||
[[5, 10, 15, 20], [25, 30, 35, 40], [45, 50, 55, 60], [0, 0, 0, 5]]
|
||||
>>> m = 5. * matrix([[1, 2, 3, 4], [5, 6, 7, 8], \
|
||||
[9, 10, 11, 12], [0, 0, 0, 1]])
|
||||
>>> print(m)
|
||||
[[5.0, 10.0, 15.0, 20.0], [25.0, 30.0, 35.0, 40.0], [45.0, 50.0, 55.0, 60.0], [0.0, 0.0, 0.0, 5.0]]
|
||||
|
||||
.. seealso::
|
||||
:meth:`__mul__` and :meth:`vector.__mul__` for vector * matrix
|
||||
"""
|
||||
try: # 2d list * matrix (matrix * matrix see matrix.__mul__)
|
||||
return matrix([[sum(c*d for c, d in zip(a_row, b_col)) for
|
||||
b_col in zip(*self)] for a_row in other])
|
||||
except:
|
||||
try: # 1d list * matrix (vector * matrix see vector.__mul__)
|
||||
return vector([sum(c*d for c, d in zip(other, b_col)) for
|
||||
b_col in zip(*self)])
|
||||
except: # scalar * vector
|
||||
return self*other
|
||||
|
||||
def __str__(self):
|
||||
return str([*self])
|
||||
|
||||
def __repr__(self):
|
||||
return "matrix(" + str(self) + ")"
|
||||
|
||||
@staticmethod
|
||||
def zeros(m, n):
|
||||
"""Returns a zero matrix of size mxn; m rows and n columns
|
||||
filled with zeros.
|
||||
|
||||
:param m: number of rows of the matrix, e. g. 3
|
||||
:type m: int
|
||||
:param n: number of columns of the matrix, e. g. 3
|
||||
:type n: int
|
||||
|
||||
:Example:
|
||||
|
||||
>>> m = matrix.zeros(3, 3)
|
||||
>>> print(m)\
|
||||
[[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0]]
|
||||
"""
|
||||
return matrix([[0. for i in range(n)] for j in range(m)])
|
||||
|
||||
@staticmethod
|
||||
def rx(theta):
|
||||
@@ -774,97 +936,23 @@ class matrix(list):
|
||||
[ 0, 0, 0, 1]])
|
||||
return T
|
||||
|
||||
def __mul__(self, other):
|
||||
r"""Scalar multiplication, dot product (inner product) or
|
||||
matrix-vector multiplication. (new object)
|
||||
|
||||
:type other: scalar, vector (or 1d list), matrix (or 2d list)
|
||||
|
||||
.. math::
|
||||
\mathbf{C} &= \mathbf{A} \cdot b \\
|
||||
\mathbf{c} &= \mathbf{A} \cdot \mathbf{b} \\
|
||||
\mathbf{C} &= \mathbf{A} \cdot \mathbf{B}
|
||||
|
||||
.. note::
|
||||
No size checking will be conducted, therefore no exceptions
|
||||
for wrong usage (result will be nonsense).
|
||||
|
||||
:Example:
|
||||
|
||||
>>> m = matrix([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], \
|
||||
[0, 0, 0, 1]]) * 5
|
||||
>>> print(m)
|
||||
[[5, 10, 15, 20], [25, 30, 35, 40], [45, 50, 55, 60], [0, 0, 0, 5]]
|
||||
>>> m = matrix([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], \
|
||||
[0, 0, 0, 1]]) * 5.
|
||||
>>> print(m)
|
||||
[[5.0, 10.0, 15.0, 20.0], [25.0, 30.0, 35.0, 40.0], [45.0, 50.0, 55.0, 60.0], [0.0, 0.0, 0.0, 5.0]]
|
||||
>>> v = matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) * \
|
||||
vector([12, 12, 13])
|
||||
>>> print(v)
|
||||
[75, 186, 297]
|
||||
>>> m = matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) * \
|
||||
matrix([[12, 12, 13], [14, 15, 16], [17, 18, 19]])
|
||||
>>> print(m)
|
||||
[[91, 96, 102], [220, 231, 246], [349, 366, 390]]
|
||||
|
||||
.. seealso::
|
||||
:meth:`__rmul__`
|
||||
@staticmethod
|
||||
def transposed(a):
|
||||
"""Transpose
|
||||
"""
|
||||
try: # matrix * matrix
|
||||
return matrix([[sum(c*d for c, d in zip(a_row, b_col)) for
|
||||
b_col in zip(*other)] for a_row in self])
|
||||
except:
|
||||
try: # matrix * vector
|
||||
return vector([sum(c*d for c, d in zip(a_row, other)) for
|
||||
a_row in self])
|
||||
except: # matrix * scalar
|
||||
return matrix([[a*other for a in a_row] for a_row in self])
|
||||
m = len(a)
|
||||
n = len(a[0])
|
||||
new = matrix.zeros(n, m)
|
||||
for i in range(m):
|
||||
for j in range(n):
|
||||
new[j][i] = a[i][j]
|
||||
return new
|
||||
|
||||
def __rmul__(self, other):
|
||||
r"""Scalar multiplication, dot product (inner product) or
|
||||
vector-matrix multiplication. (new object)
|
||||
|
||||
:type other: scalar (or 1d list and 2d list)
|
||||
|
||||
.. math::
|
||||
\mathbf{C} &= a \cdot \mathbf{B} \\
|
||||
\mathbf{c} &= \mathbf{a} \cdot \mathbf{B} \\
|
||||
\mathbf{C} &= \mathbf{A} \cdot \mathbf{B}
|
||||
|
||||
.. note::
|
||||
No size checking will be conducted, therefore no exceptions
|
||||
for wrong usage (result will be nonsense).
|
||||
|
||||
:Example:
|
||||
|
||||
>>> m = 5 * matrix([[1, 2, 3, 4], [5, 6, 7, 8], \
|
||||
[9, 10, 11, 12], [0, 0, 0, 1]])
|
||||
>>> print(m)
|
||||
[[5, 10, 15, 20], [25, 30, 35, 40], [45, 50, 55, 60], [0, 0, 0, 5]]
|
||||
>>> m = 5. * matrix([[1, 2, 3, 4], [5, 6, 7, 8], \
|
||||
[9, 10, 11, 12], [0, 0, 0, 1]])
|
||||
>>> print(m)
|
||||
[[5.0, 10.0, 15.0, 20.0], [25.0, 30.0, 35.0, 40.0], [45.0, 50.0, 55.0, 60.0], [0.0, 0.0, 0.0, 5.0]]
|
||||
|
||||
.. seealso::
|
||||
:meth:`__mul__` and :meth:`vector.__mul__` for vector * matrix
|
||||
def transpose(self):
|
||||
"""Transpose
|
||||
"""
|
||||
try: # 2d list * matrix (matrix * matrix see matrix.__mul__)
|
||||
return matrix([[sum(c*d for c, d in zip(a_row, b_col)) for
|
||||
b_col in zip(*self)] for a_row in other])
|
||||
except:
|
||||
try: # 1d list * matrix (vector * matrix see vector.__mul__)
|
||||
return vector([sum(c*d for c, d in zip(other, b_col)) for
|
||||
b_col in zip(*self)])
|
||||
except: # scalar * vector
|
||||
return self*other
|
||||
|
||||
def __str__(self):
|
||||
return str([*self])
|
||||
|
||||
def __repr__(self):
|
||||
return "matrix(" + str(self) + ")"
|
||||
self[:] = matrix.transposed(self)
|
||||
return self
|
||||
|
||||
def rotate_x(self, theta):
|
||||
r"""Rotation about the x dirction.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
"""Numerical solver of ordinary differential equations.
|
||||
r"""Numerical solver of ordinary differential equations.
|
||||
|
||||
Solves the initial value problem for systems of first order
|
||||
ordinary differential equations.
|
||||
@@ -12,9 +12,14 @@ ordinary differential equations.
|
||||
:synopsis: Numerical solver.
|
||||
|
||||
.. moduleauthor:: Daniel Weschke <daniel.weschke@directbox.de>
|
||||
"""
|
||||
|
||||
from __future__ import division, print_function
|
||||
Approximate the solution :math:`x(t)` of the initial value problem
|
||||
|
||||
.. math ::
|
||||
\frac{\mathrm{d}x}{\mathrm{d}t} = \dot{x} &= f(t,x) \\
|
||||
x(t_0) &= x_0 \\
|
||||
t &\in [t_0, t_n]
|
||||
"""
|
||||
from numpy import array, isnan, sum, zeros, dot
|
||||
from numpy.linalg import norm, inv
|
||||
|
||||
@@ -38,16 +43,17 @@ def e1(f, x0, t, *p, verbose=False):
|
||||
:param verbose: print information (default = False)
|
||||
:type verbose: bool
|
||||
|
||||
Approximate the solution of the initial value problem
|
||||
Approximate the solution :math:`x(t)` of the initial value problem
|
||||
|
||||
.. math ::
|
||||
\dot{x} &= f(t,x) \\
|
||||
x(t_0) &= x_0
|
||||
x(t_0) &= x_0 \\
|
||||
t &\in [t_0, t_n]
|
||||
|
||||
Choose a value h for the size of every step and set
|
||||
|
||||
.. math ::
|
||||
t_i = t_0 + i h ~,\quad i=1,2,\ldots,n
|
||||
t_{i+1} = t_0 + i h = t_i + h ~,\quad i=0,1,2,\ldots,n-1
|
||||
|
||||
The derivative of the solution is approximated as the forward
|
||||
difference equation
|
||||
@@ -131,13 +137,23 @@ def e1(f, x0, t, *p, verbose=False):
|
||||
the step size, and the global error (error at a given time) is
|
||||
proportional to the step size.
|
||||
"""
|
||||
x = zeros((len(t), len(x0))) # Preallocate array
|
||||
x[0,:] = x0 # Initial condition gives solution at first t
|
||||
for i in range(len(t)-1): # Calculation loop
|
||||
Dt = t[i+1]-t[i]
|
||||
dxdt = array(f(x[i,:], t[i], *p))
|
||||
# Approximate solution at next value of x
|
||||
x[i+1,:] = x[i,:] + dxdt*Dt
|
||||
from pylib.data import issequence
|
||||
if issequence(x0):
|
||||
x = zeros((len(t), len(x0))) # Preallocate array
|
||||
x[0,:] = x0 # Initial condition gives solution at first t
|
||||
for i in range(len(t)-1): # Calculation loop
|
||||
Dt = t[i+1]-t[i]
|
||||
dxdt = array(f(x[i,:], t[i], *p))
|
||||
# Approximate solution at next value of x
|
||||
x[i+1,:] = x[i,:] + dxdt*Dt
|
||||
else:
|
||||
x = zeros((len(t)))
|
||||
x[0] = x0
|
||||
for i in range(len(t)-1): # Calculation loop
|
||||
Dt = t[i+1]-t[i]
|
||||
dxdt = array(f(x[i], t[i], *p))
|
||||
# Approximate solution at next value of x
|
||||
x[i+1] = x[i] + dxdt*Dt
|
||||
if verbose:
|
||||
print('Numerical integration of ODE using explicit ' +
|
||||
'first-order method (Euler / Runge-Kutta) was successful.')
|
||||
@@ -183,6 +199,31 @@ def e4(f, x0, t, *p, verbose=False):
|
||||
...)
|
||||
:param verbose: print information (default = False)
|
||||
:type verbose: bool
|
||||
|
||||
Problem
|
||||
|
||||
.. math ::
|
||||
\dot{y} &= f(t, y) \\
|
||||
y(t_0) &= y_0 \\
|
||||
t &\in [t_0, t_n]
|
||||
|
||||
Increment :math:`\delta t = t_{i+1}-t_i ~,~~ i=0,1,2,\ldots,n-1`
|
||||
|
||||
.. math::
|
||||
y_{n+1} &= y_{i} + \tfrac{1}{6}(
|
||||
\delta y_{i,1} + 2\delta y_{i,2} + 2\delta y_{i,3} +
|
||||
\delta y_{i,4}) \\
|
||||
& \qquad \text{with} \\
|
||||
\delta y_{i,1} &= \delta t \cdot y'(t_{i}, ~ y_{i}) \\
|
||||
\delta y_{i,2} &= \delta t \cdot
|
||||
y'(t_{i}+\tfrac{1}{2}\delta t, ~
|
||||
y_{i}+\tfrac{1}{2}\delta y_{i,1}) \\
|
||||
\delta y_{i,3} &= \delta t \cdot
|
||||
y'(t_{i}+\tfrac{1}{2}\delta t, ~
|
||||
y_{i}+\tfrac{1}{2}\delta y_{i,2}) \\
|
||||
\delta y_{i,4} &= \delta t \cdot
|
||||
y'(t_{i}+\delta t, ~ y_{i}+\delta y_{i,3})
|
||||
|
||||
"""
|
||||
x = zeros((len(t), len(x0))) # Preallocate array
|
||||
x[0,:] = x0 # Initial condition
|
||||
@@ -278,8 +319,9 @@ def i1(f, x0, t, *p, max_iterations=1000, tol=1e-9,
|
||||
for i in range(len(t)-1):
|
||||
Dt = t[i+1]-t[i]
|
||||
xi = x[i,:]
|
||||
xi, iteration = fpi(f, xi, t[i], t[i+1], *p, max_iterations,
|
||||
tol, verbose)
|
||||
xi, iteration = fpi(f, xi, t[i], t[i+1], *p,
|
||||
max_iterations=max_iterations, tol=tol,
|
||||
verbose=verbose)
|
||||
x[i+1,:] = xi
|
||||
iterations[i] = iteration
|
||||
if verbose:
|
||||
@@ -363,10 +405,12 @@ def newmark_newtonraphson(f, x0, xp0, xpp0, t, *p, gamma=.5,
|
||||
return x, xp, xpp, iterations
|
||||
# x = concatenate((x, xp, xpp), axis=1)
|
||||
|
||||
def newmark_newtonraphson_rdk(fnm, x0, xp0, xpp0, t, *p, gamma=.5,
|
||||
def newmark_newtonraphson_mdk(fmdk, x0, xp0, xpp0, t, *p, gamma=.5,
|
||||
beta=.25, max_iterations=1000, tol=1e-9, verbose=False):
|
||||
r"""Newmark method.
|
||||
|
||||
Using m mass, d damping and k stiffness formulation.
|
||||
|
||||
:param f: the function to solve
|
||||
:type f: function
|
||||
:param x0: initial condition
|
||||
@@ -400,7 +444,7 @@ def newmark_newtonraphson_rdk(fnm, x0, xp0, xpp0, t, *p, gamma=.5,
|
||||
for i in range(len(t)-1):
|
||||
Dt = t[i+1]-t[i]
|
||||
|
||||
rm, rmx, rmxpp, rd, rdx, rdxp, rk, rkx, f = fnm(x[i,:],
|
||||
rm, rmx, rmxpp, rd, rdx, rdxp, rk, rkx, f = fmdk(x[i,:],
|
||||
xp[i,:], xpp[i,:], t[i], *p)
|
||||
|
||||
xi = x[i,:].reshape(3,1)
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""Mathmatical models governed by ordinary differential equations.
|
||||
|
||||
Describes initial value problems as systems of first order ordinary differential
|
||||
equations.
|
||||
Describes initial value problems as systems of first order ordinary
|
||||
differential equations.
|
||||
|
||||
:Date: 2019-05-25
|
||||
:Date: 2020-01-08
|
||||
|
||||
.. module:: ode_model
|
||||
:platform: *nix, Windows
|
||||
@@ -13,108 +13,169 @@ equations.
|
||||
|
||||
.. moduleauthor:: Daniel Weschke <daniel.weschke@directbox.de>
|
||||
"""
|
||||
from __future__ import division, print_function
|
||||
from numpy import array, cos, sin, dot, square
|
||||
from numpy.linalg import inv
|
||||
|
||||
def disk(x, t, *p):
|
||||
"""Rotation of an eccentric disk.
|
||||
def disk(d, e, T, method=''):
|
||||
r"""Rotation of an eccentric disk.
|
||||
|
||||
:param x: values of the function
|
||||
:type x: list
|
||||
:param t: time
|
||||
:type t: list
|
||||
:param `*p`: parameters of the function
|
||||
:param d: diameter
|
||||
:type d: float
|
||||
:param e: eccentricity
|
||||
:type e: float
|
||||
:param T: torque
|
||||
:type T: float
|
||||
:param method: the method to use, default = ''.
|
||||
:type method:
|
||||
:returns: disk function. This function is independent of the time.
|
||||
|
||||
* diameter
|
||||
* eccentricity
|
||||
* torque
|
||||
* For method = '': f(x, t=0) -> (xp1, xp2, xp3, xp4, xp5, xp6).
|
||||
x is (x, y, phi, x', y', phi') and the return values are (x',
|
||||
y', phi', x'', y'', phi'')
|
||||
* For method = 'nm': f(xn, xpn, xppn, t=0) -> (N, dN, dNp, dNpp).
|
||||
xn are the values of the function (x, y, phi), xpn are first
|
||||
derivative values of the function (x', y', phi') and xppn are
|
||||
the second derivative values of the function (x'', y'', phi'').
|
||||
The return values are (N, dN, dNp, dNpp)
|
||||
* For method = 'nmmdk': f(xn, xpn, xppn, t=0) ->
|
||||
(rm, rmx, rmxpp, rd, rdx, rdxp, rk, rkx, f).
|
||||
xn are the values of the function (x, y, phi), xpn are first
|
||||
derivative values of the function (x', y', phi') and xppn are
|
||||
the second derivative values of the function (x'', y'', phi'').
|
||||
The return values are (rm, rmx, rmxpp, rd, rdx, rdxp, rk, rkx,
|
||||
f)
|
||||
|
||||
:rtype: function
|
||||
|
||||
Model
|
||||
|
||||
.. math ::
|
||||
\begin{vmatrix}
|
||||
\ddot{x} + \cos(\varphi)\ddot{\varphi} + 2d \,\dot{x} - \sin(\varphi) \,\dot{\varphi}^2 + 2d\cos(\varphi)\, \dot{\varphi} + x &=&
|
||||
0 \\
|
||||
\ddot{y} - \sin(\varphi)\ddot{\varphi} + 2d \,\dot{y} - \cos(\varphi) \,\dot{\varphi}^2 + 2d\sin(\varphi)\, \dot{\varphi} + y &=&
|
||||
0 \\
|
||||
\ddot{\varphi} + e\,y\sin(\varphi) - e\,x\cos(\varphi) &=& t
|
||||
\end{vmatrix}
|
||||
\\
|
||||
\begin{vmatrix}
|
||||
\ddot{x} + \cos(\varphi)\ddot{\varphi} &=&
|
||||
-2d \,\dot{x} + \sin(\varphi) \,\dot{\varphi}^2 -2d\cos(\varphi)\, \dot{\varphi} - x \\
|
||||
\ddot{y} - \sin(\varphi)\ddot{\varphi} &=&
|
||||
-2d \,\dot{y} + \cos(\varphi) \,\dot{\varphi}^2 -2d\sin(\varphi)\, \dot{\varphi} - y \\
|
||||
\ddot{\varphi} &=& t - e\,y\sin(\varphi) + e\,x\cos(\varphi)
|
||||
\end{vmatrix}
|
||||
|
||||
.. math ::
|
||||
\mathbf{M}(\mathbf{x}) \cdot \mathbf{\ddot{x}} &=
|
||||
\mathbf{f}(\mathbf{x}, \mathbf{\dot{x}})
|
||||
\\
|
||||
\begin{bmatrix}
|
||||
1 & 0 & \cos \varphi \\
|
||||
0 & 1 & -\sin \varphi \\
|
||||
0 & 0 & 1
|
||||
\end{bmatrix} \cdot
|
||||
\begin{bmatrix}
|
||||
\ddot{x} \\ \ddot{y} \\ \ddot{\varphi}
|
||||
\end{bmatrix} &= \begin{bmatrix}
|
||||
-2d \,\dot{x} + \sin(\varphi) \,\dot{\varphi}^2 -2d\cos(\varphi)\, \dot{\varphi} - x \\
|
||||
-2d \,\dot{y} + \cos(\varphi) \,\dot{\varphi}^2 -2d\sin(\varphi)\, \dot{\varphi} - y \\
|
||||
t - e\,y\sin(\varphi) + e\,x\cos(\varphi)
|
||||
\end{bmatrix}
|
||||
|
||||
|
||||
returns
|
||||
|
||||
.. math ::
|
||||
x_1 &= x &\quad x_4 &= \dot{x}_1 = \dot{x} &\quad \dot{x}_4 &= \ddot{x} \\
|
||||
x_2 &= y &\quad x_5 &= \dot{x}_2 = \dot{y} &\quad \dot{x}_5 &= \ddot{y} \\
|
||||
x_3 &= \varphi &\quad x_6 &= \dot{x}_3 = \dot{\varphi} &\quad \dot{x}_6 &= \ddot{\varphi} \\
|
||||
|
||||
.. math ::
|
||||
\dot{q} &= f(x) \\
|
||||
\begin{bmatrix}
|
||||
\dot{x}_1 \\
|
||||
\dot{x}_2 \\
|
||||
\dot{x}_3 \\
|
||||
\dot{x}_4 \\
|
||||
\dot{x}_5 \\
|
||||
\dot{x}_6
|
||||
\end{bmatrix} &= \begin{bmatrix}
|
||||
x_4 \\
|
||||
x_5 \\
|
||||
x_6 \\
|
||||
\begin{bmatrix}
|
||||
1 & 0 & \cos x_3 \\
|
||||
0 & 1 & -\sin x_3 \\
|
||||
0 & 0 & 1
|
||||
\end{bmatrix}^{-1} \cdot \begin{bmatrix}
|
||||
-2d \,x_4 + \sin(x_3) \,x_6^2 -2d\cos(x_3)\, x_6 - x_1 \\
|
||||
-2d \,x_5 + \cos(x_3) \,x_6^2 -2d\sin(x_3)\, x_6 - x_2 \\
|
||||
t - e\,x_2\sin(x_3) + e\,x_1\cos(x_3)
|
||||
\end{bmatrix}
|
||||
\end{bmatrix}
|
||||
|
||||
Three explicit differential equations of order 2 reducted to a
|
||||
system of 3x2 first-order differential equations.
|
||||
|
||||
.. seealso::
|
||||
:meth:`pylib.numerical.ode.newmark_newtonraphson` and
|
||||
:meth:`pylib.numerical.ode.newmark_newtonraphson_mdk`
|
||||
"""
|
||||
qp1 = x[3]
|
||||
qp2 = x[4]
|
||||
qp3 = x[5]
|
||||
M = array([[1, 0, cos(x[2])], [0, 1, -sin(x[2])], [0, 0, 1]])
|
||||
y = array([[-2*p[0]*x[3]+sin(x[2])*x[5]**2-2*p[0]*cos(x[2])*x[5]-x[0]], \
|
||||
[-2*p[0]*x[4]+cos(x[2])*x[5]**2-2*p[0]*sin(x[2])*x[5]-x[1]], \
|
||||
[p[2]-p[1]*x[1]*sin(x[2])+p[1]*x[0]*cos(x[2])]])
|
||||
qp46 = dot(inv(M), y)
|
||||
qp4, qp5, qp6 = qp46.reshape(-1,).tolist() # 2d array to 1d array to list
|
||||
return qp1, qp2, qp3, qp4, qp5, qp6
|
||||
|
||||
def disk_nm(xn, xpn, xppn, t, *p):
|
||||
"""Rotation of an eccentric disk.
|
||||
|
||||
:param xn: values of the function
|
||||
:type xn: list
|
||||
:param xpn: first derivative values of the function
|
||||
:type xpn: list
|
||||
:param xppn: second derivative values of the function
|
||||
:type xppn: list
|
||||
:param t: time
|
||||
:type t: list
|
||||
:param `*p`: parameters of the function
|
||||
|
||||
* diameter
|
||||
* eccentricity
|
||||
* torque
|
||||
"""
|
||||
N = array([[xppn[0]+cos(xn[2])*xppn[2]+2*p[0]*xpn[0]+2*p[0]*cos(xn[2])*xpn[2]-sin(xn[2])*square(xpn[2])+xn[0]],
|
||||
[xppn[1]-sin(xn[2])*xppn[2]+2*p[0]*xpn[1]-2*p[0]*sin(xn[2])*xpn[2]-cos(xn[2])*square(xpn[2])+xn[1]],
|
||||
[xppn[2]+p[1]*(-cos(xn[2])*xn[0]+sin(xn[2])*xn[1])-p[2]]])
|
||||
dN = array([[1, 0, -sin(xn[2]*xppn[2])-2*p[0]*sin(xn[2])*xpn[2]-cos(xn[2])*square(xpn[2])],
|
||||
[0, 1, -cos(xn[2]*xppn[2])-2*p[0]*cos(xn[2])*xpn[2]+sin(xn[2])*square(xpn[2])],
|
||||
[-p[1]*cos(xn[2]), p[1]*cos(xn[2]), p[1]*(sin(xn[2])*xn[0]+cos(xn[2])*xn[1])]])
|
||||
dNp = array([[2*p[0], 0, 2*p[0]*cos(xn[2])-2*sin(xn[2])*xpn[2]],
|
||||
[0, 2*p[0], -2*p[0]*sin(xn[2])-2*cos(xn[2])*xpn[2]],
|
||||
[0, 0, 0]])
|
||||
dNpp = array([[1, 0, cos(xn[2])],
|
||||
[0, 1, -sin(xn[2])],
|
||||
[0, 0, 1]])
|
||||
return N, dN, dNp, dNpp
|
||||
|
||||
def disk_nmmdk(xn, xpn, xppn, t, *p):
|
||||
"""Rotation of an eccentric disk.
|
||||
|
||||
:param xn: values of the function
|
||||
:type xn: list
|
||||
:param xpn: derivative values of the function
|
||||
:type xpn: list
|
||||
:param xppn: second derivative values of the function
|
||||
:type xppn: list
|
||||
:param t: time
|
||||
:type t: list
|
||||
:param `*p`: parameters of the function
|
||||
|
||||
* diameter
|
||||
* eccentricity
|
||||
* torque
|
||||
"""
|
||||
rm = array([[xppn[0]+cos(xn[2])*xppn[2]],
|
||||
[xppn[1]-sin(xn[2])*xppn[2]],
|
||||
[xppn[2]]])
|
||||
rmx = array([[0, 0, -sin(xn[2]*xppn[2])],
|
||||
[0, 0, -cos(xn[2]*xppn[2])],
|
||||
[0, 0, 0]])
|
||||
rmxpp = array([[1, 0, cos(xn[2])],
|
||||
[0, 1, -sin(xn[2])],
|
||||
[0, 0, 1]])
|
||||
rd = array([[2*p[0]*xpn[0]+2*p[0]*cos(xn[2])*xpn[2]-sin(xn[2])*square(xpn[2])],
|
||||
[2*p[0]*xpn[1]-2*p[0]*sin(xn[2])*xpn[2]-cos(xn[2])*square(xpn[2])],
|
||||
[0]])
|
||||
rdx = array([[0, 0, -2*p[0]*sin(xn[2])*xpn[2]-cos(xn[2])*square(xpn[2])],
|
||||
[0, 0, -2*p[0]*cos(xn[2])*xpn[2]+sin(xn[2])*square(xpn[2])],
|
||||
[0, 0, 0]])
|
||||
rdxp = array([[2*p[0], 0, 2*p[0]*cos(xn[2])-2*sin(xn[2])*xpn[2]],
|
||||
[0, 2*p[0], -2*p[0]*sin(xn[2])-2*cos(xn[2])*xpn[2]],
|
||||
[0, 0, 0]])
|
||||
rk = array([[xn[0]],
|
||||
[xn[1]],
|
||||
[p[1]*(-cos(xn[2])*xn[0]+sin(xn[2])*xn[1])]])
|
||||
rkx = array([[ 1, 0, 0],
|
||||
[ 0, 1, 0],
|
||||
[-p[1]*cos(xn[2]), p[1]*cos(xn[2]), p[1]*(sin(xn[2])*xn[0]+cos(xn[2])*xn[1])]])
|
||||
f = array([[0], [0], [p[2]]])
|
||||
return rm, rmx, rmxpp, rd, rdx, rdxp, rk, rkx, f
|
||||
|
||||
if __name__ == '__main__':
|
||||
True
|
||||
p = (d, e, T)
|
||||
if method == '':
|
||||
def f(x, t=0):
|
||||
xp1 = x[3]
|
||||
xp2 = x[4]
|
||||
xp3 = x[5]
|
||||
M = array([[1, 0, cos(x[2])], [0, 1, -sin(x[2])], [0, 0, 1]])
|
||||
y = array([[-2*p[0]*x[3]+sin(x[2])*x[5]**2-2*p[0]*cos(x[2])*x[5]-x[0]], \
|
||||
[-2*p[0]*x[4]+cos(x[2])*x[5]**2-2*p[0]*sin(x[2])*x[5]-x[1]], \
|
||||
[p[2]-p[1]*x[1]*sin(x[2])+p[1]*x[0]*cos(x[2])]])
|
||||
xp46 = dot(inv(M), y)
|
||||
xp4, xp5, xp6 = xp46.reshape(-1,).tolist() # 2d array to 1d array to list
|
||||
return xp1, xp2, xp3, xp4, xp5, xp6
|
||||
elif method == 'nm':
|
||||
def f(xn, xpn, xppn, t=0):
|
||||
N = array([[xppn[0]+cos(xn[2])*xppn[2]+2*p[0]*xpn[0]+2*p[0]*cos(xn[2])*xpn[2]-sin(xn[2])*square(xpn[2])+xn[0]],
|
||||
[xppn[1]-sin(xn[2])*xppn[2]+2*p[0]*xpn[1]-2*p[0]*sin(xn[2])*xpn[2]-cos(xn[2])*square(xpn[2])+xn[1]],
|
||||
[xppn[2]+p[1]*(-cos(xn[2])*xn[0]+sin(xn[2])*xn[1])-p[2]]])
|
||||
dN = array([[1, 0, -sin(xn[2]*xppn[2])-2*p[0]*sin(xn[2])*xpn[2]-cos(xn[2])*square(xpn[2])],
|
||||
[0, 1, -cos(xn[2]*xppn[2])-2*p[0]*cos(xn[2])*xpn[2]+sin(xn[2])*square(xpn[2])],
|
||||
[-p[1]*cos(xn[2]), p[1]*cos(xn[2]), p[1]*(sin(xn[2])*xn[0]+cos(xn[2])*xn[1])]])
|
||||
dNp = array([[2*p[0], 0, 2*p[0]*cos(xn[2])-2*sin(xn[2])*xpn[2]],
|
||||
[0, 2*p[0], -2*p[0]*sin(xn[2])-2*cos(xn[2])*xpn[2]],
|
||||
[0, 0, 0]])
|
||||
dNpp = array([[1, 0, cos(xn[2])],
|
||||
[0, 1, -sin(xn[2])],
|
||||
[0, 0, 1]])
|
||||
return N, dN, dNp, dNpp
|
||||
elif method == 'nmmdk':
|
||||
def f(xn, xpn, xppn, t=0):
|
||||
rm = array([[xppn[0]+cos(xn[2])*xppn[2]],
|
||||
[xppn[1]-sin(xn[2])*xppn[2]],
|
||||
[xppn[2]]])
|
||||
rmx = array([[0, 0, -sin(xn[2]*xppn[2])],
|
||||
[0, 0, -cos(xn[2]*xppn[2])],
|
||||
[0, 0, 0]])
|
||||
rmxpp = array([[1, 0, cos(xn[2])],
|
||||
[0, 1, -sin(xn[2])],
|
||||
[0, 0, 1]])
|
||||
rd = array([[2*p[0]*xpn[0]+2*p[0]*cos(xn[2])*xpn[2]-sin(xn[2])*square(xpn[2])],
|
||||
[2*p[0]*xpn[1]-2*p[0]*sin(xn[2])*xpn[2]-cos(xn[2])*square(xpn[2])],
|
||||
[0]])
|
||||
rdx = array([[0, 0, -2*p[0]*sin(xn[2])*xpn[2]-cos(xn[2])*square(xpn[2])],
|
||||
[0, 0, -2*p[0]*cos(xn[2])*xpn[2]+sin(xn[2])*square(xpn[2])],
|
||||
[0, 0, 0]])
|
||||
rdxp = array([[2*p[0], 0, 2*p[0]*cos(xn[2])-2*sin(xn[2])*xpn[2]],
|
||||
[0, 2*p[0], -2*p[0]*sin(xn[2])-2*cos(xn[2])*xpn[2]],
|
||||
[0, 0, 0]])
|
||||
rk = array([[xn[0]],
|
||||
[xn[1]],
|
||||
[p[1]*(-cos(xn[2])*xn[0]+sin(xn[2])*xn[1])]])
|
||||
rkx = array([[ 1, 0, 0],
|
||||
[ 0, 1, 0],
|
||||
[-p[1]*cos(xn[2]), p[1]*cos(xn[2]), p[1]*(sin(xn[2])*xn[0]+cos(xn[2])*xn[1])]])
|
||||
f = array([[0], [0], [p[2]]])
|
||||
return rm, rmx, rmxpp, rd, rdx, rdxp, rk, rkx, f
|
||||
return f
|
||||
|
||||
@@ -13,7 +13,7 @@ import unittest
|
||||
import os
|
||||
import sys
|
||||
sys.path.insert(0, os.path.abspath('..'))
|
||||
from pylib.data import read, unique_ending, get_id, seq
|
||||
from pylib.data import read_columns, unique_ending, get_id, seq
|
||||
|
||||
|
||||
class TestData(unittest.TestCase):
|
||||
@@ -30,9 +30,9 @@ class TestData(unittest.TestCase):
|
||||
'ba2bdca8-fd2c-48a9-b9b0-3734f33ebe94',
|
||||
]
|
||||
|
||||
def test_read(self):
|
||||
def test_read_columns(self):
|
||||
"""test read function"""
|
||||
x, y = read(self.file_name, 3, 2)
|
||||
x, y = read_columns(self.file_name, 3, 2)
|
||||
|
||||
self.assertEqual(len(x), 1027)
|
||||
self.assertEqual(len(y), 1027)
|
||||
|
||||
42
tests/test_data_step_std.py
Executable file
42
tests/test_data_step_std.py
Executable file
@@ -0,0 +1,42 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""Test of data_step_std module.
|
||||
|
||||
:Date: 2020-01-03
|
||||
|
||||
.. module:: test_data_step_std
|
||||
:platform: *nix, Windows
|
||||
:synopsis: Test of data_step_std module.
|
||||
|
||||
.. moduleauthor:: Daniel Weschke <daniel.weschke@directbox.de>
|
||||
"""
|
||||
import unittest
|
||||
|
||||
import os
|
||||
import sys
|
||||
sys.path.insert(0, os.path.abspath('..'))
|
||||
from pylib.data_step_std import CARTESIAN_POINT, VERTEX_POINT
|
||||
|
||||
class TestDataStepStd(unittest.TestCase):
|
||||
|
||||
def test_multi_objects(self):
|
||||
cp = CARTESIAN_POINT('', (0.E+000, 0.E+000, 0.E+000))
|
||||
#print(cp)
|
||||
self.assertEqual(
|
||||
str(cp),
|
||||
"#1 = CARTESIAN_POINT('', (0.0, 0.0, 0.0))")
|
||||
|
||||
cp2 = eval('CARTESIAN_POINT("j", (0.E+000,0.E+000,0.E+000))')
|
||||
#print(cp2)
|
||||
self.assertEqual(
|
||||
str(cp2),
|
||||
"#2 = CARTESIAN_POINT('j', (0.0, 0.0, 0.0))")
|
||||
|
||||
vp = VERTEX_POINT('', cp)
|
||||
#print(vp)
|
||||
self.assertEqual(
|
||||
str(vp),
|
||||
"#3 = VERTEX_POINT('', #1)")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main(verbosity=2)
|
||||
@@ -167,14 +167,42 @@ class TestGeometry(unittest.TestCase):
|
||||
len(obj),
|
||||
3)
|
||||
|
||||
def test_vector_normalize(self):
|
||||
v = vector.normalize(vector([3, 4]))
|
||||
def test_vector_ang(self):
|
||||
a = vector([1, 0])
|
||||
b = vector([0, 1])
|
||||
print(vector.ang(a,b), vector.ang(b, a))
|
||||
self.assertEqual(
|
||||
v,
|
||||
vector.ang(a, b),
|
||||
math.pi/2)
|
||||
self.assertEqual(
|
||||
vector.ang(b, a),
|
||||
math.pi/2)
|
||||
|
||||
def test_vector_normalized(self):
|
||||
v1 = vector([3, 4])
|
||||
v2 = vector.normalized(v1)
|
||||
self.assertEqual(
|
||||
v2,
|
||||
[0.6, 0.8])
|
||||
self.assertEqual(
|
||||
abs(v),
|
||||
abs(v2),
|
||||
1)
|
||||
self.assertEqual(
|
||||
v1,
|
||||
[3, 4])
|
||||
|
||||
def test_vector_normalize(self):
|
||||
v1 = vector([3, 4])
|
||||
v2 = v1.normalize()
|
||||
self.assertEqual(
|
||||
v2,
|
||||
[0.6, 0.8])
|
||||
self.assertEqual(
|
||||
abs(v2),
|
||||
1)
|
||||
self.assertEqual(
|
||||
v1,
|
||||
[0.6, 0.8])
|
||||
|
||||
def test_vector_rotate_x(self):
|
||||
# rotation of vector coordinate system about x axis
|
||||
|
||||
@@ -14,15 +14,17 @@ from __future__ import division, print_function
|
||||
import unittest
|
||||
import math
|
||||
from numpy import linspace, allclose, sqrt, square, concatenate
|
||||
from numpy.linalg import inv
|
||||
from matplotlib.pyplot import figure, subplots, plot, show
|
||||
from matplotlib.pyplot import subplots, show
|
||||
|
||||
import os
|
||||
import sys
|
||||
sys.path.insert(0, os.path.abspath('..'))
|
||||
from pylib.numerical.ode import (e1, e2, e4, i1,
|
||||
newmark_newtonraphson, newmark_newtonraphson_rdk)
|
||||
from pylib.numerical.ode_model import disk, disk_nm, disk_nmmdk
|
||||
newmark_newtonraphson, newmark_newtonraphson_mdk)
|
||||
from pylib.numerical.ode_model import disk
|
||||
|
||||
PRINT_RESULTS = False
|
||||
PLOT_RESULTS = False
|
||||
|
||||
def plotx1rphi(x, t, title):
|
||||
"""Plot plane rotation (x, y, phi)
|
||||
@@ -51,10 +53,12 @@ def plotx1rphi(x, t, title):
|
||||
tl.set_color('r')
|
||||
if max(xp3) < 2:
|
||||
ax2.set_ylim([0,2])
|
||||
show()
|
||||
|
||||
f = disk
|
||||
fnm = disk_nm
|
||||
fnmmdk = disk_nmmdk
|
||||
p = .01, .002, .015 # parameter of the model
|
||||
f = disk(*p)
|
||||
fnm = disk(*p, method='nm')
|
||||
fnmmdk = disk(*p, method='nmmdk')
|
||||
|
||||
|
||||
class TestODE(unittest.TestCase):
|
||||
@@ -65,13 +69,11 @@ class TestODE(unittest.TestCase):
|
||||
nt = math.ceil(tend/Dt) # number of timesteps
|
||||
t = linspace(0., tend, nt+1) # time vector
|
||||
x0 = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 # initial conditions
|
||||
p = .01, .002, .015 # parameter of the model
|
||||
|
||||
def test_e1(self):
|
||||
xe1 = e1(f, self.x0, self.t, *self.p)
|
||||
xe1 = e1(f, self.x0, self.t)
|
||||
#plotx1rphi(xe1, self.t, ("Euler (Runge-Kutta 1th order),
|
||||
# increments: %d" % self.nt))
|
||||
#show()
|
||||
self.assertTrue(allclose(xe1[:, 5],
|
||||
[0., 0.00015, 0.0003, 0.00045, 0.0006, 0.00075, 0.0009,
|
||||
0.00105, 0.0012, 0.00135, 0.0015 ]))
|
||||
@@ -81,10 +83,10 @@ class TestODE(unittest.TestCase):
|
||||
t_2 = linspace(0., tend, nt_2+1)
|
||||
|
||||
def test_e1_2(self):
|
||||
xe1_2 = e1(f, self.x0, self.t_2, *self.p)
|
||||
#plotx1rphi(xe1_2, self.t_2, ("Euler (Runge-Kutta 1th order),
|
||||
# increments: %d" % self.nt_2))
|
||||
#show()
|
||||
xe1_2 = e1(f, self.x0, self.t_2)
|
||||
if PLOT_RESULTS:
|
||||
plotx1rphi(xe1_2, self.t_2, ("Euler (Runge-Kutta 1th order), \
|
||||
increments: %d" % self.nt_2))
|
||||
self.assertTrue(allclose(xe1_2[:, 5],
|
||||
[0.00000000e+00, 3.00000000e-05, 6.00000000e-05, 8.99999998e-05,
|
||||
1.19999999e-04, 1.49999998e-04, 1.79999995e-04, 2.09999992e-04,
|
||||
@@ -101,33 +103,35 @@ class TestODE(unittest.TestCase):
|
||||
1.43999585e-03, 1.46999558e-03, 1.49999530e-03]
|
||||
))
|
||||
|
||||
maxIterations = 1000
|
||||
max_iterations = 1000
|
||||
tol = 1e-9 # against residuum
|
||||
|
||||
def test_e2(self):
|
||||
xe2 = e2(f, self.x0, self.t, *self.p)
|
||||
#plotx1rphi(xe2, self.t, ("Runge-Kutta 2th order,
|
||||
# increments: %d" % self.nt))
|
||||
#show()
|
||||
xe2 = e2(f, self.x0, self.t)
|
||||
if PLOT_RESULTS:
|
||||
plotx1rphi(xe2, self.t, ("Runge-Kutta 2th order, \
|
||||
increments: %d" % self.nt))
|
||||
self.assertTrue(allclose(xe2[:, 5],
|
||||
[0., 0.00015, 0.0003, 0.00045, 0.0006, 0.00075, 0.0009,
|
||||
0.00105, 0.0012, 0.00135, 0.0015 ]))
|
||||
|
||||
def test_e4(self):
|
||||
xe4 = e4(f, self.x0, self.t, *self.p)
|
||||
#plotx1rphi(xe4, self.t, ("Runge-Kutta 4th order,
|
||||
# increments: %d" % self.nt))
|
||||
#show()
|
||||
xe4 = e4(f, self.x0, self.t)
|
||||
if PLOT_RESULTS:
|
||||
plotx1rphi(xe4, self.t, ("Runge-Kutta 4th order, \
|
||||
increments: %d" % self.nt))
|
||||
self.assertTrue(allclose(xe4[:, 5],
|
||||
[0., 0.00015, 0.0003, 0.00045, 0.0006, 0.00075, 0.0009,
|
||||
0.00105, 0.0012, 0.00135, 0.0015 ]))
|
||||
|
||||
def test_i1(self):
|
||||
xi1, iterations = i1(f, self.x0, self.t, *self.p,
|
||||
self.maxIterations, self.tol)
|
||||
#plotx1rphi(xi1, self.t, ("Backward Euler, increments: %d,
|
||||
# iterations: %d" % (self.nt, sum(iterations))))
|
||||
#show()
|
||||
xi1, iterations = i1(f, self.x0, self.t,
|
||||
max_iterations=self.max_iterations,
|
||||
tol=self.tol)
|
||||
if PLOT_RESULTS:
|
||||
plotx1rphi(xi1, self.t,
|
||||
("Backward Euler, increments: %d, \
|
||||
iterations: %d" % (self.nt, sum(iterations))))
|
||||
self.assertTrue(allclose(xi1[:, 5],
|
||||
[0., 0.00015, 0.0003, 0.00045, 0.0006, 0.00075, 0.0009,
|
||||
0.00105, 0.0012, 0.00135, 0.0015 ]))
|
||||
@@ -137,14 +141,18 @@ class TestODE(unittest.TestCase):
|
||||
|
||||
def test_nm(self):
|
||||
xnm, xpnm, xppnm, iterations = newmark_newtonraphson(fnm,
|
||||
(0,0,0), (0,0,0), (0,0,0), self.t, *self.p,
|
||||
self.gamma, self.beta, 1, self.tol)
|
||||
#print(xnm)
|
||||
#print(xpnm)
|
||||
(0,0,0), (0,0,0), (0,0,0), self.t, gamma=self.gamma,
|
||||
beta=self.beta, max_iterations=1, tol=self.tol)
|
||||
if PRINT_RESULTS:
|
||||
print('\nNewmark Newton-Raphson x and xp. Max. Iterations:',
|
||||
1)
|
||||
print(xnm)
|
||||
print(xpnm)
|
||||
x = concatenate((xnm, xpnm), axis=1)
|
||||
#plotx1rphi(x, self.t, ("Newmark, increments: %d,
|
||||
# iterations: %d" % (self.nt, sum(iterations))))
|
||||
#show()
|
||||
if PLOT_RESULTS:
|
||||
plotx1rphi(x, self.t,
|
||||
("Newmark, increments: %d, \
|
||||
iterations: %d" % (self.nt, sum(iterations))))
|
||||
self.assertTrue(allclose(x[:, 5],
|
||||
[0.00000000e+00, 7.49999925e-05, 2.24999951e-04, 3.74999839e-04,
|
||||
5.24999621e-04, 6.74999269e-04, 8.24998752e-04, 9.74998039e-04,
|
||||
@@ -153,14 +161,19 @@ class TestODE(unittest.TestCase):
|
||||
|
||||
def test_nm_2(self):
|
||||
xnm, xpnm, xppnm, iterations = newmark_newtonraphson(fnm,
|
||||
(0,0,0), (0,0,0), (0,0,0), self.t, *self.p,
|
||||
self.gamma, self.beta, self.maxIterations, self.tol)
|
||||
#print(xnm)
|
||||
#print(xpnm)
|
||||
(0,0,0), (0,0,0), (0,0,0), self.t, gamma=self.gamma,
|
||||
beta=self.beta, max_iterations=self.max_iterations,
|
||||
tol=self.tol)
|
||||
if PRINT_RESULTS:
|
||||
print('\nNewmark Newton-Raphson x and xp. Max. Iterations:',
|
||||
self.max_iterations)
|
||||
print(xnm)
|
||||
print(xpnm)
|
||||
x = concatenate((xnm, xpnm), axis=1)
|
||||
#plotx1rphi(x, self.t, ("Newmark, increments: %d,
|
||||
# iterations: %d" % (self.nt, sum(iterations))))
|
||||
#show()
|
||||
if PLOT_RESULTS:
|
||||
plotx1rphi(x, self.t,
|
||||
("Newmark, increments: %d, \
|
||||
iterations: %d" % (self.nt, sum(iterations))))
|
||||
self.assertTrue(allclose(x[:, 5],
|
||||
[0.00000000e+00, 7.49999925e-05, 2.24999951e-04, 3.74999839e-04,
|
||||
5.24999621e-04, 6.74999269e-04, 8.24998752e-04, 9.74998039e-04,
|
||||
@@ -168,15 +181,19 @@ class TestODE(unittest.TestCase):
|
||||
))
|
||||
|
||||
def test_nmmdk(self):
|
||||
xnm, xpnm, xppnm, iterations = newmark_newtonraphson_rdk(
|
||||
fnmmdk, (0,0,0), (0,0,0), (0,0,0), self.t, *self.p,
|
||||
self.gamma, self.beta, 1, self.tol)
|
||||
#print(xnm)
|
||||
#print(xpnm)
|
||||
xnm, xpnm, xppnm, iterations = newmark_newtonraphson_mdk(
|
||||
fnmmdk, (0,0,0), (0,0,0), (0,0,0), self.t, gamma=self.gamma,
|
||||
beta=self.beta, max_iterations=1, tol=self.tol)
|
||||
if PRINT_RESULTS:
|
||||
print('\nNewmark Newton-Raphson mdk x and xp. Max. Iterations:',
|
||||
1)
|
||||
print(xnm)
|
||||
print(xpnm)
|
||||
x = concatenate((xnm, xpnm), axis=1)
|
||||
#plotx1rphi(x, self.t, ("Newmark, increments: %d,
|
||||
# iterations: %d" % (self.nt, sum(iterations))))
|
||||
#show()
|
||||
if PLOT_RESULTS:
|
||||
plotx1rphi(x, self.t,
|
||||
("Newmark RDK, increments: %d, \
|
||||
iterations: %d" % (self.nt, sum(iterations))))
|
||||
self.assertTrue(allclose(x[:, 5],
|
||||
[0.00000000e+00, 7.49999963e-05, 2.24999974e-04, 3.74999906e-04,
|
||||
5.24999764e-04, 6.74999516e-04, 8.24999134e-04, 9.74998586e-04,
|
||||
@@ -184,15 +201,19 @@ class TestODE(unittest.TestCase):
|
||||
))
|
||||
|
||||
def test_nmmdk_2(self):
|
||||
xnm, xpnm, xppnm, iterations = newmark_newtonraphson_rdk(
|
||||
fnmmdk, (0,0,0), (0,0,0), (0,0,0), self.t, *self.p,
|
||||
self.gamma, self.beta, 100, self.tol)
|
||||
#print(xnm)
|
||||
#print(xpnm)
|
||||
xnm, xpnm, xppnm, iterations = newmark_newtonraphson_mdk(
|
||||
fnmmdk, (0,0,0), (0,0,0), (0,0,0), self.t, gamma=self.gamma,
|
||||
beta=self.beta, max_iterations=100, tol=self.tol)
|
||||
if PRINT_RESULTS:
|
||||
print('\nNewmark Newton-Raphson mdk x and xp. Max. Iterations:',
|
||||
100)
|
||||
print(xnm)
|
||||
print(xpnm)
|
||||
x = concatenate((xnm, xpnm), axis=1)
|
||||
#plotx1rphi(x, self.t, ("Newmark, increments: %d,
|
||||
# iterations: %d" % (self.nt, sum(iterations))))
|
||||
#show()
|
||||
if PLOT_RESULTS:
|
||||
plotx1rphi(x, self.t,
|
||||
("Newmark RDK, increments: %d, \
|
||||
iterations: %d" % (self.nt, sum(iterations))))
|
||||
self.assertTrue(allclose(x[:, 5],
|
||||
[0.00000000e+00, 7.49999963e-05, 2.24999974e-04, 3.74999906e-04,
|
||||
5.24999764e-04, 6.74999516e-04, 8.24999134e-04, 9.74998586e-04,
|
||||
@@ -202,7 +223,6 @@ class TestODE(unittest.TestCase):
|
||||
#from scipy.integrate import odeint
|
||||
#xode = odeint(disk, x0, t, p, printmessg=True)
|
||||
#plotx1rphi(xode, t, ("ODE, Inkremente: %d" % nt))
|
||||
#show()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
Reference in New Issue
Block a user