Skip to main content

Spatial objects and computations in 3D.

Project description

https://img.shields.io/pypi/v/scikit-spatial.svg https://img.shields.io/travis/ajhynes7/scikit-spatial.svg Documentation Status https://pyup.io/repos/github/ajhynes7/scikit-spatial/shield.svg https://codecov.io/gh/ajhynes7/scikit-spatial/branch/master/graph/badge.svg

Introduction

This package provides spatial objects in 3D (Point, Vector, Line, and Plane) based on NumPy arrays, as well as computations using these objects.

Point and Vector are subclasses of the NumPy ndarray, allowing them to be easily integrated with the SciPy ecosystem. The Line and Plane objects have Point and Vector objects as attributes.

The computations can be grouped into the following main categories:

  • Measurement
    • e.g.: Measure the angle between two vectors.

  • Comparison
    • e.g.: Check if two vectors are perpendicular.

  • Projection
    • e.g.: Project a point onto a line.

  • Intersection
    • e.g.: Find the intersection of a line and a plane.

The package has been built using contracts and is tested with hypothesis (see this PyCon talk for a good introduction to both libraries). The contracts prevent spatial computations that are undefined in Euclidean space, such as finding the intersection of two parallel lines.

Installation

The package can be installed via pip.

$ pip install scikit-spatial

Example Usage

Measure the angle between two vectors.

>>> import numpy as np
>>> from skspatial.objects import Vector
>>> vector = Vector([1, 0])
>>> angle = vector.angle_between([1, 1])
>>> np.degrees(angle).round()
45.0

Project a point onto a line.

>>> from skspatial.objects import Line
>>> line = Line(point=[0, 0, 0], direction=[1, 1, 0])
>>> line.project_point([5, 6, 7])
Point([5.5, 5.5, 0. ])

An error is returned if the computation is undefined.

>>> line_a = Line([0, 0], [1, 0])
>>> line_b = Line([1, 0], [1, 0])
>>> line_a.intersect_line(line_b)
Traceback (most recent call last):
...
dpcontracts.PreconditionError: The lines must not be parallel.

Acknowledgment

This package was created with Cookiecutter and the audreyr/cookiecutter-pypackage project template.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

scikit-spatial-1.0.0.tar.gz (30.8 kB view hashes)

Uploaded Source

Built Distribution

scikit_spatial-1.0.0-py2.py3-none-any.whl (19.2 kB view hashes)

Uploaded Python 2 Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page