Source code for pyrr.ray

# -*- coding: utf-8 -*-
"""Provide functions for the creation and manipulation of Rays.

A ray begins as a single point and extends
infinitely in a direction.

The first vector is the origin of the ray.
The second vector is the direction of the ray
relative to the origin.

The following functions will normalize the ray
direction to unit length.
Some functions may work correctly with directions
that are not unit length, but this may vary from
function to function.
"""
from __future__ import absolute_import, division, print_function
import numpy as np
from . import vector
from .utils import all_parameters_as_numpy_arrays, parameters_as_numpy_arrays


[docs]class index: #: The index of the start vector within the ray position = 0 #: The index of the direction vector within the ray direction = 1
[docs]@parameters_as_numpy_arrays('start', 'direction') def create(start, direction, dtype=None): dtype = dtype or start.dtype return np.array( [ start, vector.normalize(direction) ], dtype=dtype )
[docs]@parameters_as_numpy_arrays('line') def create_from_line(line, dtype=None): """Converts a line or line segment to a ray. """ dtype = dtype or line.dtype # direction = vend - vstart return np.array( [ line[0], vector.normalize(line[1] - line[0]) ], dtype=dtype )
[docs]@all_parameters_as_numpy_arrays def invert(r): r2 = r.copy() r2[1] *= -1 return r2
[docs]@all_parameters_as_numpy_arrays def position(ray): return ray[0].copy()
[docs]@all_parameters_as_numpy_arrays def direction(ray): return ray[1].copy()