Skip to main content

A versatile vector operations module with swizzling capabilities for 2D, 3D, and 4D vectors.

Project description

python-vector-swizzling

The vector_swizzling library provides flexible and intuitive vector manipulation with swizzling capabilities, designed to resemble GLSL vector handling for 2D, 3D, and 4D vectors.

Overview

SVec is a base class for representing vectors with a list of components and a lookup table allowing swizzling. Swizzling lets you access components in different combinations or orders, similar to GLSL's swizzling. See Swizzling on Wikipedia for more information.

Classes and Structure

The main SVec class has three subclasses for specific dimensions:

  • SVec2: for 2D vectors.
  • SVec3: for 3D vectors.
  • SVec4: for 4D vectors.

These subclasses come with dimension-specific operations, such as srotate for SVec2 and scross for SVec3.

Component Lookup Table

The swizzling table maps to the following indices:

  • 'x' or 'r' = 0
  • 'y' or 'g' = 1
  • 'z' or 'b' = 2
  • 'w' or 'a' = 3

This table lets you use letters from both Cartesian (x, y, z, w) and color (r, g, b, a) spaces interchangeably.

Usage Examples

Declaring Vectors

You can declare vectors in different ways:

# Standard declaration
a = SVec2(1, 2)
b = SVec3(1, 2, 3)
c = SVec4(1, 2, 3, 4)
d = SVec4(4, 3, 2, 1)

# Using list as components
a = SVec2([1, 2])
b = SVec3([1, 2], 3)
c = SVec4(1, 2, [3, 4])
d = SVec4([4, 3, 2], 1)

# Using vectors as components
b = SVec3(a, 3)
c = SVec4(b, 4)`
d = SVec4(c.wzy, 1)

Swizzling Vectors

You can assign to and operate on swizzled vectors, as well passing them as function arguments:

# Assigning and operating on swizzled vectors
b.xy = a.xy + b.yx

# Swizzling with RGBA space
d.xyzw = d.rgba

# Swizzling an SVec2 into an SVec3 and calling scross
cross_vec = scross(a.xyx, b)

Swizzling quirks

This module allows higher dimensional swizzles and swizzle chaining:

# Swizzle an SVec4 into a 7D SVec and call a dimension agnostic function on it
normalized_7D_vector = snormalize(d.xyzwxyz)

# Swizzle chaining is permitted but only works for the first 4 components, just like GLSL
d.xyzwxyz.xyzw
            #^ You run out of swizzles here

Vectors as lists

Vectors are just cool lists, so you can use them as such

# Iterate over vector components
for i in d.xyzwxyz:
    print(i)

# Assign to a component with its index
d[3] = 1

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

vector_swizzling-0.1.2.tar.gz (6.4 kB view details)

Uploaded Source

Built Distribution

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

vector_swizzling-0.1.2-py3-none-any.whl (4.4 kB view details)

Uploaded Python 3

File details

Details for the file vector_swizzling-0.1.2.tar.gz.

File metadata

  • Download URL: vector_swizzling-0.1.2.tar.gz
  • Upload date:
  • Size: 6.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.7

File hashes

Hashes for vector_swizzling-0.1.2.tar.gz
Algorithm Hash digest
SHA256 26938f11a88b4c5b5a002d4557553a05bcaadab9b9fe885f6b4e6539c047b16c
MD5 cda890b6c4132d86ff13af00cf9798a8
BLAKE2b-256 8cc1342dcedfe846fe4d56084eadeb8ac4e438a74eb6ee30ae08bf35e7a7e290

See more details on using hashes here.

File details

Details for the file vector_swizzling-0.1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for vector_swizzling-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 57980e3a7c3e5a85ea14d1a5f426faba0aee28b6dcfbaeedf124f1d9ed6d402d
MD5 bfe0c50028aa497c76f9fa02c22f7d90
BLAKE2b-256 fcde2e2addd1205fcd72df5b278138c7f18041f497cffa61cdc9ddb3fa734b14

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