306 lines
31 KiB
HTML
306 lines
31 KiB
HTML
|
|
<!DOCTYPE html>
|
|
|
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<title>geometry — pylib 2019.5.19 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 geometry</h1><div class="highlight"><pre>
|
|
<span></span><span class="ch">#!/usr/bin/env python</span>
|
|
<span class="c1"># -*- coding: utf-8 -*-</span>
|
|
<span class="sd">"""2D geometry objects.</span>
|
|
|
|
<span class="sd">:Date: 2019-03-21</span>
|
|
|
|
<span class="sd">.. module:: geometry</span>
|
|
<span class="sd"> :platform: *nix, Windows</span>
|
|
<span class="sd"> :synopsis: Geometry objects.</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd">.. moduleauthor:: Daniel Weschke <daniel.weschke@directbox.de></span>
|
|
<span class="sd">"""</span>
|
|
<span class="kn">import</span> <span class="nn">math</span>
|
|
<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
|
|
|
|
|
|
<div class="viewcode-block" id="translate"><a class="viewcode-back" href="../geometry.html#geometry.translate">[docs]</a><span class="k">def</span> <span class="nf">translate</span><span class="p">(</span><span class="n">vec</span><span class="p">,</span> <span class="o">*</span><span class="n">pts</span><span class="p">):</span>
|
|
<span class="sd">"""Translate a point or polygon by a given vector.</span>
|
|
|
|
<span class="sd"> :param vec: translation vector</span>
|
|
<span class="sd"> :type vec: tuple</span>
|
|
<span class="sd"> :param `*pts`: points to translate</span>
|
|
|
|
<span class="sd"> :returns: (point_x, point_y) or (point1, point2, ...)</span>
|
|
<span class="sd"> :rtype: tuple</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">vx</span><span class="p">,</span> <span class="n">vy</span> <span class="o">=</span> <span class="n">vec</span>
|
|
<span class="k">return</span> <span class="nb">tuple</span><span class="p">([(</span><span class="n">x</span><span class="o">+</span><span class="n">vx</span><span class="p">,</span> <span class="n">y</span><span class="o">+</span><span class="n">vy</span><span class="p">)</span> <span class="k">for</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="ow">in</span> <span class="n">pts</span><span class="p">])</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="rotate"><a class="viewcode-back" href="../geometry.html#geometry.rotate">[docs]</a><span class="k">def</span> <span class="nf">rotate</span><span class="p">(</span><span class="n">origin</span><span class="p">,</span> <span class="n">angle</span><span class="p">,</span> <span class="o">*</span><span class="n">pts</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
|
<span class="sd">"""Rotate a point or polygon counterclockwise by a given angle around a given</span>
|
|
<span class="sd"> origin. The angle should be given in radians.</span>
|
|
|
|
<span class="sd"> :param origin: the center of rotation</span>
|
|
<span class="sd"> :type origin: tuple</span>
|
|
<span class="sd"> :param angle: the rotation angle</span>
|
|
<span class="sd"> :type angle: int or float</span>
|
|
<span class="sd"> :param `*pts`: points to rotate</span>
|
|
<span class="sd"> :param `**kwargs`: options</span>
|
|
|
|
<span class="sd"> :returns: (point_x, point_y) or (point1, point2, ...)</span>
|
|
<span class="sd"> :rtype: tuple</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">ox</span><span class="p">,</span> <span class="n">oy</span> <span class="o">=</span> <span class="n">origin</span>
|
|
|
|
<span class="c1"># add first point to the end</span>
|
|
<span class="k">if</span> <span class="n">kwargs</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="s2">"closed"</span> <span class="ow">in</span> <span class="n">kwargs</span> <span class="ow">and</span> <span class="n">kwargs</span><span class="p">[</span><span class="s2">"closed"</span><span class="p">]</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
|
|
<span class="n">pts</span> <span class="o">+=</span> <span class="p">(</span><span class="n">pts</span><span class="p">[</span><span class="mi">0</span><span class="p">],)</span>
|
|
|
|
<span class="n">result</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">([(</span><span class="n">ox</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">angle</span><span class="p">)</span> <span class="o">*</span> <span class="p">(</span><span class="n">px</span> <span class="o">-</span> <span class="n">ox</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">angle</span><span class="p">)</span> <span class="o">*</span> <span class="p">(</span><span class="n">py</span> <span class="o">-</span> <span class="n">oy</span><span class="p">),</span>
|
|
<span class="n">oy</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">angle</span><span class="p">)</span> <span class="o">*</span> <span class="p">(</span><span class="n">px</span> <span class="o">-</span> <span class="n">ox</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">angle</span><span class="p">)</span> <span class="o">*</span> <span class="p">(</span><span class="n">py</span> <span class="o">-</span> <span class="n">oy</span><span class="p">))</span>
|
|
<span class="k">for</span> <span class="p">(</span><span class="n">px</span><span class="p">,</span> <span class="n">py</span><span class="p">)</span> <span class="ow">in</span> <span class="n">pts</span><span class="p">])</span>
|
|
|
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</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">return</span> <span class="n">result</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">result</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">result</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="rotate_deg"><a class="viewcode-back" href="../geometry.html#geometry.rotate_deg">[docs]</a><span class="k">def</span> <span class="nf">rotate_deg</span><span class="p">(</span><span class="n">origin</span><span class="p">,</span> <span class="n">angle</span><span class="p">,</span> <span class="o">*</span><span class="n">pts</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
|
<span class="sd">"""Rotate a point or polygon counterclockwise by a given angle around a given</span>
|
|
<span class="sd"> origin. The angle should be given in degrees.</span>
|
|
|
|
<span class="sd"> :param origin: the center of rotation</span>
|
|
<span class="sd"> :type origin: tuple</span>
|
|
<span class="sd"> :param angle: the rotation angle</span>
|
|
<span class="sd"> :type angle: int or float</span>
|
|
<span class="sd"> :param `*pts`: points to rotate</span>
|
|
<span class="sd"> :param `**kwargs`: options</span>
|
|
|
|
<span class="sd"> :returns: (point_x, point_y) or (point1, point2, ...)</span>
|
|
<span class="sd"> :rtype: tuple</span>
|
|
|
|
<span class="sd"> .. seealso::</span>
|
|
<span class="sd"> :meth:`rotate`</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">rotate</span><span class="p">(</span><span class="n">origin</span><span class="p">,</span> <span class="n">angle</span><span class="o">*</span><span class="n">math</span><span class="o">.</span><span class="n">pi</span><span class="o">/</span><span class="mi">180</span><span class="p">,</span> <span class="o">*</span><span class="n">pts</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="rectangle"><a class="viewcode-back" href="../geometry.html#geometry.rectangle">[docs]</a><span class="k">def</span> <span class="nf">rectangle</span><span class="p">(</span><span class="n">width</span><span class="p">,</span> <span class="n">height</span><span class="p">):</span>
|
|
<span class="sd">"""\</span>
|
|
<span class="sd"> :param width: the width of the rectangle</span>
|
|
<span class="sd"> :type width: int or float</span>
|
|
<span class="sd"> :param height: the height of the rectangle</span>
|
|
<span class="sd"> :type height: int or float</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> :returns: (point1, point2, point3, point4)</span>
|
|
<span class="sd"> :rtype: tuple</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">pt1</span> <span class="o">=</span> <span class="p">(</span><span class="o">-</span><span class="n">width</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span> <span class="o">-</span><span class="n">height</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span>
|
|
<span class="n">pt2</span> <span class="o">=</span> <span class="p">(</span><span class="n">width</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span> <span class="o">-</span><span class="n">height</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span>
|
|
<span class="n">pt3</span> <span class="o">=</span> <span class="p">(</span><span class="n">width</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span> <span class="n">height</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span>
|
|
<span class="n">pt4</span> <span class="o">=</span> <span class="p">(</span><span class="o">-</span><span class="n">width</span><span class="o">/</span><span class="mi">2</span><span class="p">,</span> <span class="n">height</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">pt1</span><span class="p">,</span> <span class="n">pt2</span><span class="p">,</span> <span class="n">pt3</span><span class="p">,</span> <span class="n">pt4</span><span class="p">,</span> <span class="n">pt1</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="square"><a class="viewcode-back" href="../geometry.html#geometry.square">[docs]</a><span class="k">def</span> <span class="nf">square</span><span class="p">(</span><span class="n">width</span><span class="p">):</span>
|
|
<span class="sd">"""\</span>
|
|
<span class="sd"> :param width: the edge size of the square</span>
|
|
<span class="sd"> :type width: int or float</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> :returns: (point1, point2, point3, point4)</span>
|
|
<span class="sd"> :rtype: tuple</span>
|
|
|
|
<span class="sd"> .. seealso::</span>
|
|
<span class="sd"> :meth:`rectangle`</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">rectangle</span><span class="p">(</span><span class="n">width</span><span class="p">,</span> <span class="n">width</span><span class="p">)</span></div>
|
|
|
|
|
|
<span class="c1">#</span>
|
|
<span class="c1"># matplotlib format, return lists for x and y</span>
|
|
<span class="c1">#</span>
|
|
|
|
<div class="viewcode-block" id="points"><a class="viewcode-back" href="../geometry.html#geometry.points">[docs]</a><span class="k">def</span> <span class="nf">points</span><span class="p">(</span><span class="o">*</span><span class="n">pts</span><span class="p">):</span>
|
|
<span class="sd">"""\</span>
|
|
<span class="sd"> :param `*pts`: points to rearrange</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> :returns: ((point1_x, point2_x), (point1_y, point2_y), ...)</span>
|
|
<span class="sd"> :rtype: tuple</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="n">pts</span><span class="p">)</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="line"><a class="viewcode-back" href="../geometry.html#geometry.line">[docs]</a><span class="k">def</span> <span class="nf">line</span><span class="p">(</span><span class="n">point1</span><span class="p">,</span> <span class="n">point2</span><span class="p">,</span> <span class="n">samples</span><span class="o">=</span><span class="mi">2</span><span class="p">):</span>
|
|
<span class="sd">"""\</span>
|
|
<span class="sd"> .. math::</span>
|
|
<span class="sd"> y = \\frac{y_2-y_1}{x_2-x_1}(x-x_1) + y_1</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> :param point1: one end point</span>
|
|
<span class="sd"> :type point1: tuple</span>
|
|
<span class="sd"> :param point2: other end point</span>
|
|
<span class="sd"> :type point2: tuple</span>
|
|
<span class="sd"> :param samples: number of sampling points</span>
|
|
<span class="sd"> :type samples: int</span>
|
|
|
|
<span class="sd"> :returns: ((point1_x, point2_x), (points1_y, point2_y)) or</span>
|
|
<span class="sd"> ([sample_point1_x, sample_point2_x, ...],</span>
|
|
<span class="sd"> [sample_points1_y, sample_point2_y, ...])</span>
|
|
<span class="sd"> :rtype: tuple</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">p1x</span><span class="p">,</span> <span class="n">p1y</span> <span class="o">=</span> <span class="n">point1</span>
|
|
<span class="n">p2x</span><span class="p">,</span> <span class="n">p2y</span> <span class="o">=</span> <span class="n">point2</span>
|
|
|
|
<span class="n">denominator</span> <span class="o">=</span> <span class="p">(</span><span class="n">p1x</span> <span class="o">-</span> <span class="n">p2x</span><span class="p">)</span>
|
|
|
|
<span class="k">if</span> <span class="n">samples</span> <span class="o">></span> <span class="mi">2</span> <span class="ow">and</span> <span class="n">denominator</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
|
<span class="n">x</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">linspace</span><span class="p">(</span><span class="n">p1x</span><span class="p">,</span> <span class="n">p2x</span><span class="p">)</span>
|
|
<span class="n">a</span> <span class="o">=</span> <span class="p">(</span><span class="n">p1y</span> <span class="o">-</span> <span class="n">p2y</span><span class="p">)</span> <span class="o">/</span> <span class="n">denominator</span>
|
|
<span class="n">b</span> <span class="o">=</span> <span class="p">(</span><span class="n">p1x</span><span class="o">*</span><span class="n">p2y</span> <span class="o">-</span> <span class="n">p2x</span><span class="o">*</span><span class="n">p1y</span><span class="p">)</span> <span class="o">/</span> <span class="n">denominator</span>
|
|
<span class="n">y</span> <span class="o">=</span> <span class="n">a</span><span class="o">*</span><span class="n">x</span> <span class="o">+</span> <span class="n">b</span>
|
|
<span class="k">return</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span>
|
|
<span class="k">return</span> <span class="p">(</span><span class="n">p1x</span><span class="p">,</span> <span class="n">p2x</span><span class="p">),</span> <span class="p">(</span><span class="n">p1y</span><span class="p">,</span> <span class="n">p2y</span><span class="p">)</span> <span class="c1"># matplotlib format</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="cubic"><a class="viewcode-back" href="../geometry.html#geometry.cubic">[docs]</a><span class="k">def</span> <span class="nf">cubic</span><span class="p">(</span><span class="n">point1</span><span class="p">,</span> <span class="n">angle1</span><span class="p">,</span> <span class="n">point2</span><span class="p">,</span> <span class="n">angle2</span><span class="p">,</span> <span class="n">samples</span><span class="o">=</span><span class="mi">50</span><span class="p">):</span>
|
|
<span class="sd">"""\</span>
|
|
<span class="sd"> :param point1: one end point</span>
|
|
<span class="sd"> :type point1: tuple</span>
|
|
<span class="sd"> :param angle1: the slope at the one end point</span>
|
|
<span class="sd"> :type angle1: int or float</span>
|
|
<span class="sd"> :param point2: other end point</span>
|
|
<span class="sd"> :type point2: tuple</span>
|
|
<span class="sd"> :param angle2: the slope at the other end point</span>
|
|
<span class="sd"> :type angle2: int or float</span>
|
|
<span class="sd"> :param samples: number of sampling points</span>
|
|
<span class="sd"> :type samples: int</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> :returns: ([sample_point1_x, sample_point2_x, ...],</span>
|
|
<span class="sd"> [sample_points1_y, sample_point2_y, ...])</span>
|
|
<span class="sd"> :rtype: tuple</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">p1x</span><span class="p">,</span> <span class="n">p1y</span> <span class="o">=</span> <span class="n">point1</span>
|
|
<span class="n">p2x</span><span class="p">,</span> <span class="n">p2y</span> <span class="o">=</span> <span class="n">point2</span>
|
|
|
|
<span class="n">x</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">linspace</span><span class="p">(</span><span class="n">p1x</span><span class="p">,</span> <span class="n">p2x</span><span class="p">,</span> <span class="n">num</span><span class="o">=</span><span class="n">samples</span><span class="p">)</span>
|
|
|
|
<span class="n">p1ys</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">tan</span><span class="p">(</span><span class="n">angle1</span><span class="p">)</span>
|
|
<span class="n">p2ys</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">tan</span><span class="p">(</span><span class="n">angle2</span><span class="p">)</span>
|
|
<span class="n">a</span> <span class="o">=</span> <span class="p">(</span><span class="n">p1x</span><span class="o">*</span><span class="n">p1ys</span> <span class="o">+</span> <span class="n">p1x</span><span class="o">*</span><span class="n">p2ys</span> <span class="o">-</span> <span class="n">p2x</span><span class="o">*</span><span class="n">p1ys</span> <span class="o">-</span> <span class="n">p2x</span><span class="o">*</span><span class="n">p2ys</span> <span class="o">-</span> <span class="mi">2</span><span class="o">*</span><span class="n">p1y</span> <span class="o">+</span> <span class="mi">2</span><span class="o">*</span><span class="n">p2y</span><span class="p">)</span><span class="o">/</span><span class="p">(</span><span class="n">p1x</span><span class="o">**</span><span class="mi">3</span> <span class="o">-</span> <span class="mi">3</span><span class="o">*</span><span class="n">p1x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p2x</span> <span class="o">+</span> <span class="mi">3</span><span class="o">*</span><span class="n">p1x</span><span class="o">*</span><span class="n">p2x</span><span class="o">**</span><span class="mi">2</span> <span class="o">-</span> <span class="n">p2x</span><span class="o">**</span><span class="mi">3</span><span class="p">)</span>
|
|
<span class="n">b</span> <span class="o">=</span> <span class="p">(</span><span class="o">-</span> <span class="n">p1x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p1ys</span> <span class="o">-</span> <span class="mi">2</span><span class="o">*</span><span class="n">p1x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p2ys</span> <span class="o">-</span> <span class="n">p1x</span><span class="o">*</span><span class="n">p2x</span><span class="o">*</span><span class="n">p1ys</span> <span class="o">+</span> <span class="n">p1x</span><span class="o">*</span><span class="n">p2x</span><span class="o">*</span><span class="n">p2ys</span> <span class="o">+</span> <span class="mi">3</span><span class="o">*</span><span class="n">p1x</span><span class="o">*</span><span class="n">p1y</span> <span class="o">-</span> <span class="mi">3</span><span class="o">*</span><span class="n">p1x</span><span class="o">*</span><span class="n">p2y</span> <span class="o">+</span> <span class="mi">2</span><span class="o">*</span><span class="n">p2x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p1ys</span> <span class="o">+</span> <span class="n">p2x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p2ys</span> <span class="o">+</span> <span class="mi">3</span><span class="o">*</span><span class="n">p2x</span><span class="o">*</span><span class="n">p1y</span> <span class="o">-</span> <span class="mi">3</span><span class="o">*</span><span class="n">p2x</span><span class="o">*</span><span class="n">p2y</span><span class="p">)</span><span class="o">/</span><span class="p">(</span><span class="n">p1x</span><span class="o">**</span><span class="mi">3</span> <span class="o">-</span> <span class="mi">3</span><span class="o">*</span><span class="n">p1x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p2x</span> <span class="o">+</span> <span class="mi">3</span><span class="o">*</span><span class="n">p1x</span><span class="o">*</span><span class="n">p2x</span><span class="o">**</span><span class="mi">2</span> <span class="o">-</span> <span class="n">p2x</span><span class="o">**</span><span class="mi">3</span><span class="p">)</span>
|
|
<span class="n">c</span> <span class="o">=</span> <span class="p">(</span><span class="n">p1x</span><span class="o">**</span><span class="mi">3</span><span class="o">*</span><span class="n">p2ys</span> <span class="o">+</span> <span class="mi">2</span><span class="o">*</span><span class="n">p1x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p2x</span><span class="o">*</span><span class="n">p1ys</span> <span class="o">+</span> <span class="n">p1x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p2x</span><span class="o">*</span><span class="n">p2ys</span> <span class="o">-</span> <span class="n">p1x</span><span class="o">*</span><span class="n">p2x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p1ys</span> <span class="o">-</span> <span class="mi">2</span><span class="o">*</span><span class="n">p1x</span><span class="o">*</span><span class="n">p2x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p2ys</span> <span class="o">-</span> <span class="mi">6</span><span class="o">*</span><span class="n">p1x</span><span class="o">*</span><span class="n">p2x</span><span class="o">*</span><span class="n">p1y</span> <span class="o">+</span> <span class="mi">6</span><span class="o">*</span><span class="n">p1x</span><span class="o">*</span><span class="n">p2x</span><span class="o">*</span><span class="n">p2y</span> <span class="o">-</span> <span class="n">p2x</span><span class="o">**</span><span class="mi">3</span><span class="o">*</span><span class="n">p1ys</span><span class="p">)</span><span class="o">/</span><span class="p">(</span><span class="n">p1x</span><span class="o">**</span><span class="mi">3</span> <span class="o">-</span> <span class="mi">3</span><span class="o">*</span><span class="n">p1x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p2x</span> <span class="o">+</span> <span class="mi">3</span><span class="o">*</span><span class="n">p1x</span><span class="o">*</span><span class="n">p2x</span><span class="o">**</span><span class="mi">2</span> <span class="o">-</span> <span class="n">p2x</span><span class="o">**</span><span class="mi">3</span><span class="p">)</span>
|
|
<span class="n">d</span> <span class="o">=</span> <span class="p">(</span><span class="o">-</span> <span class="n">p1x</span><span class="o">**</span><span class="mi">3</span><span class="o">*</span><span class="n">p2x</span><span class="o">*</span><span class="n">p2ys</span> <span class="o">+</span> <span class="n">p1x</span><span class="o">**</span><span class="mi">3</span><span class="o">*</span><span class="n">p2y</span> <span class="o">-</span> <span class="n">p1x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p2x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p1ys</span> <span class="o">+</span> <span class="n">p1x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p2x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p2ys</span> <span class="o">-</span> <span class="mi">3</span><span class="o">*</span><span class="n">p1x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p2x</span><span class="o">*</span><span class="n">p2y</span> <span class="o">+</span> <span class="n">p1x</span><span class="o">*</span><span class="n">p2x</span><span class="o">**</span><span class="mi">3</span><span class="o">*</span><span class="n">p1ys</span> <span class="o">+</span> <span class="mi">3</span><span class="o">*</span><span class="n">p1x</span><span class="o">*</span><span class="n">p2x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p1y</span> <span class="o">-</span> <span class="n">p2x</span><span class="o">**</span><span class="mi">3</span><span class="o">*</span><span class="n">p1y</span><span class="p">)</span><span class="o">/</span><span class="p">(</span><span class="n">p1x</span><span class="o">**</span><span class="mi">3</span> <span class="o">-</span> <span class="mi">3</span><span class="o">*</span><span class="n">p1x</span><span class="o">**</span><span class="mi">2</span><span class="o">*</span><span class="n">p2x</span> <span class="o">+</span> <span class="mi">3</span><span class="o">*</span><span class="n">p1x</span><span class="o">*</span><span class="n">p2x</span><span class="o">**</span><span class="mi">2</span> <span class="o">-</span> <span class="n">p2x</span><span class="o">**</span><span class="mi">3</span><span class="p">)</span>
|
|
<span class="n">y</span> <span class="o">=</span> <span class="n">a</span><span class="o">*</span><span class="n">x</span><span class="o">**</span><span class="mi">3</span> <span class="o">+</span> <span class="n">b</span><span class="o">*</span><span class="n">x</span><span class="o">**</span><span class="mi">2</span> <span class="o">+</span> <span class="n">c</span><span class="o">*</span><span class="n">x</span> <span class="o">+</span> <span class="n">d</span>
|
|
<span class="k">return</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="cubic_deg"><a class="viewcode-back" href="../geometry.html#geometry.cubic_deg">[docs]</a><span class="k">def</span> <span class="nf">cubic_deg</span><span class="p">(</span><span class="n">point1</span><span class="p">,</span> <span class="n">angle1</span><span class="p">,</span> <span class="n">point2</span><span class="p">,</span> <span class="n">angle2</span><span class="p">):</span>
|
|
<span class="sd">"""\</span>
|
|
<span class="sd"> :param point1: one end point</span>
|
|
<span class="sd"> :type point1: tuple</span>
|
|
<span class="sd"> :param angle1: the slope at the one end point</span>
|
|
<span class="sd"> :type angle1: int or float</span>
|
|
<span class="sd"> :param point2: other end point</span>
|
|
<span class="sd"> :type point2: tuple</span>
|
|
<span class="sd"> :param angle2: the slope at the other end point</span>
|
|
<span class="sd"> :type angle2: int or float</span>
|
|
<span class="sd"> </span>
|
|
<span class="sd"> :returns: ([sample_point1_x, sample_point2_x, ...],</span>
|
|
<span class="sd"> [sample_points1_y, sample_point2_y, ...])</span>
|
|
<span class="sd"> :rtype: tuple</span>
|
|
|
|
<span class="sd"> .. seealso::</span>
|
|
<span class="sd"> :meth:`cubic`</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">cubic</span><span class="p">(</span><span class="n">point1</span><span class="p">,</span> <span class="n">angle1</span> <span class="o">*</span> <span class="n">math</span><span class="o">.</span><span class="n">pi</span><span class="o">/</span><span class="mi">180</span><span class="p">,</span> <span class="n">point2</span><span class="p">,</span> <span class="n">angle2</span> <span class="o">*</span> <span class="n">math</span><span class="o">.</span><span class="n">pi</span><span class="o">/</span><span class="mi">180</span><span class="p">)</span></div>
|
|
</pre></div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
|
<div class="sphinxsidebarwrapper">
|
|
<h1 class="logo"><a href="../index.html">pylib</a></h1>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<h3>Navigation</h3>
|
|
|
|
<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>Quick search</h3>
|
|
<div class="searchformwrapper">
|
|
<form class="search" action="../search.html" method="get">
|
|
<input type="text" name="q" />
|
|
<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.0.1</a>
|
|
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
</body>
|
|
</html> |