Skip to main content

This is a library for dealing with quaternions in Python in a unified way.

Project description

Quaternions library
===================

[![Coverage Status](https://coveralls.io/repos/github/satellogic/quaternions/badge.svg)](https://coveralls.io/github/satellogic/quaternions)
[![Build Status](https://travis-ci.org/satellogic/quaternions.svg?branch=add_travis_ci)](https://travis-ci.org/satellogic/quaternions)

This is a library for dealing with quaternions in python in a unified way.

To install it:

```bash
$ pip install satellogic_quaternions
```

Examples of code:

```python
In [1]: from quaternions import Quaternion

In [2]: q1 = Quaternion(1, 2, 3, 4)

In [3]: q2 = Quaternion(2, 3, 5, 8)

In [4]: q1 + q2
Out[4]: Quaternion(3, 5, 8, 12)

In [5]: q1 * q2
Out[5]: Quaternion(-51, 3, 15, 15)

In [6]: q1 / q2
Out[6]: Quaternion(0.53921568627450989, 0.049019607843137247, -0.029411764705882353, 0.0098039215686274439)

In [7]: print(q1)
(1+2i+3j+4k)
```

~~Most of~~ all the quaternions we use are unitary (not like the example above)

```python
In [8]: q1.is_unitary()
Out[8]: False

In [9]: q1 / q1.norm()
Out[9]: Quaternion(0.18257418583505536, 0.36514837167011072, 0.54772255750516607, 0.73029674334022143)

In [10]: q1 /= q1.norm()

In [11]: q1.is_unitary()
Out[11]: True
```

Usually, quaternions are used for rotating vectors. This is done with `numpy`:
```python
In [12]: q1.matrix
Out[12]:
array([[-0.66666667, 0.66666667, 0.33333333],
[ 0.13333333, -0.33333333, 0.93333333],
[ 0.73333333, 0.66666667, 0.13333333]])

In [14]: q1.matrix.dot([2, 3, -4])
Out[14]: array([-0.66666667, -4.46666667, 2.93333333])

In [16]: q1.matrix.dot([1, 0, 0])
Out[16]: array([-0.66666667, 0.13333333, 0.73333333])
```

A unitary quaternion matrix is unitary. The inverse is the transpose and it is also the
matrix of the inverse quaternion. And the inverse quaternion of a unitary quaternion is
the conjugate:

```python
In [17]: q1.conjugate()
Out[17]: Quaternion(0.18257418583505536, -0.36514837167011072, -0.54772255750516607, -0.73029674334022143)

In [18]: q1
Out[18]: Quaternion(0.18257418583505536, 0.36514837167011072, 0.54772255750516607, 0.73029674334022143)

In [19]: q1 * q1.conjugate()
Out[19]: Quaternion(0.99999999999999978, 0.0, 0.0, 0.0)

In [20]: q1.conjugate().matrix
Out[20]:
array([[-0.66666667, 0.13333333, 0.73333333],
[ 0.66666667, -0.33333333, 0.66666667],
[ 0.33333333, 0.93333333, 0.13333333]])
```

License
=======

quaternions is Satellogic SA Copyright 2017. All our code is GPLv3 licensed.


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

satellogic_quaternions-0.1.5.tar.gz (9.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

satellogic_quaternions-0.1.5-py3-none-any.whl (11.3 kB view details)

Uploaded Python 3

File details

Details for the file satellogic_quaternions-0.1.5.tar.gz.

File metadata

File hashes

Hashes for satellogic_quaternions-0.1.5.tar.gz
Algorithm Hash digest
SHA256 ccfe83877927da955609e07efc007763f597e758c1a5dfe17fbaee977a983b88
MD5 e5c3cdcf43d11ef3304a111511bd85c6
BLAKE2b-256 ec9431d4422c59d7f83ffd2af190612b8cfdfac2c521ad5ea125b8e1165c8a4f

See more details on using hashes here.

File details

Details for the file satellogic_quaternions-0.1.5-py3-none-any.whl.

File metadata

File hashes

Hashes for satellogic_quaternions-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 de8cff624ecac838153a3524ca75ea9e3d928075961c90532e4ef57d97ada7f9
MD5 092838d42d4ff7d3a5d95eea96a0dc04
BLAKE2b-256 d605d25da5854db4a049e8b7e035757d1e727b8e9f4c270ead170273fae6b89d

See more details on using hashes here.

Supported by

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