lace / vg

Vector-geometry toolbelt for 3D points and vectors

Home Page:https://vgpy.dev/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

vg

version python version license build code style

A very good vector-geometry toolbelt for dealing with 3D points and vectors. These are simple NumPy operations made readable, built to scale from prototyping to production.

๐Ÿ“– See the complete documentation: https://vgpy.dev/

Examples

Normalize a stack of vectors:

# ๐Ÿ˜ฎ
vs_norm = vs / np.linalg.norm(vs, axis=1)[:, np.newaxis]

# ๐Ÿ˜€
vs_norm = vg.normalize(vs)

Check for the zero vector:

# ๐Ÿ˜ฃ
is_almost_zero = np.allclose(v, np.array([0.0, 0.0, 0.0]), rtol=0, atol=1e-05)

# ๐Ÿค“
is_almost_zero = vg.almost_zero(v, atol=1e-05)

Find the major axis of variation (first principal component):

# ๐Ÿ˜ฉ
mean = np.mean(coords, axis=0)
_, _, pcs = np.linalg.svd(coords - mean)
first_pc = pcs[0]

# ๐Ÿ˜
first_pc = vg.major_axis(coords)

Compute pairwise angles between two stacks of vectors:

# ๐Ÿ˜ญ
dot_products = np.einsum("ij,ij->i", v1s.reshape(-1, 3), v2s.reshape(-1, 3))
cosines = dot_products / np.linalg.norm(v1s, axis=1) / np.linalg.norm(v2s, axis=1)
angles = np.arccos(np.clip(cosines, -1.0, 1.0))

# ๐Ÿคฏ
angles = vg.angle(v1s, v2s)

Installation

pip install numpy vg

Usage

import numpy as np
import vg

projected = vg.scalar_projection(
  np.array([5.0, -3.0, 1.0]),
  onto=vg.basis.neg_y
)

Development

First, install Poetry.

After cloning the repo, run ./bootstrap.zsh to initialize a virtual environment with the project's dependencies.

Subsequently, run ./dev.py install to update the dependencies.

Acknowledgements

This collection was developed at Body Labs by Paul Melnikow and extracted from the Body Labs codebase and open-sourced as part of blmath by Alex Weiss. blmath was subsequently forked by Paul Melnikow and later the vx namespace was broken out into its own package. The project was renamed to vg to resolve a name conflict.

License

The project is licensed under the two-clause BSD license.

About

Vector-geometry toolbelt for 3D points and vectors

https://vgpy.dev/

License:BSD 2-Clause "Simplified" License


Languages

Language:Python 99.8%Language:Shell 0.2%