Source for file VectorOp.php
Documentation is available at VectorOp.php
// +----------------------------------------------------------------------+
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2003 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 2.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/2_02.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Jesus M. Castagnetto <jmcastagnetto@php.net> |
// +----------------------------------------------------------------------+
// $Id: VectorOp.php 304045 2010-10-05 00:16:53Z clockwerx $
* Vector operation class.
* A static class implementing methods to operate on Vector objects.
* Originally this class was part of NumPHP (Numeric PHP package)
* @author Jesus M. Castagnetto <jmcastagnetto@php.net>
* Checks if object is of Math_Vector class (or a subclass of Math_Vector)
* @return boolean true on success
* Checks if object is of Math_Vector2 class (or a subclass of Math_Vector2)
* @return boolean true on success
* Checks if object is of Math_Vector3 class (or a subclass of Math_Vector3)
* @return boolean true on success
* Creates a vector of a given size in which all elements have the same value
* @param int $size vector size
* @param numeric $value value to assign to the elements
* @return object if ($size == 2) Math_Vector2 elseif ($size == 3) Math_Vector3 else Math_Vector
function create ($size, $value) /*{{{*/
$VClass = "Math_Vector2";
$VClass = "Math_Vector3";
* Creates a zero-filled vector of the given size
* @param int $size vector size
* @return object if ($size == 2) Math_Vector2 elseif ($size == 3) Math_Vector3 else Math_Vector
* Creates a one-filled vector of the given size
* @param int $size vector size
* @return object if ($size == 2) Math_Vector2 elseif ($size == 3) Math_Vector3 else Math_Vector
* Creates a basis vector of the given size
* A basis vector of size n, has n - 1 elements equal to 0
* and one element equal to 1
* @param int $size vector size
* @param int $index element to be set at 1
* @return object if ($size == 2) Math_Vector2 elseif ($size == 3) Math_Vector3 else Math_Vector, on error PEAR_Error
return PEAR ::raiseError (" Incorrect index for size: $index >= $size" );
$res = $v->set ($index, 1 );
* v + w = <v1 + w1, v2 + w2, ..., vk + wk>
* @param object Math_Vector (or subclass) $v1
* @param object Math_Vector (or subclass) $v2
* @return object Math_Vector (or subclass) on success, PEAR_Error otherwise
function add ($v1, $v2) /*{{{*/
return PEAR ::raiseError ("Vectors must of the same size");
for ($i=0; $i < $n; $i++ )
$arr[$i] = $v1->get ($i) + $v2->get ($i);
return PEAR ::raiseError ("V1 and V2 must be Math_Vector objects");
* v - w = <v1 - w1, v2 - w2, ..., vk - wk>
* @param object Math_Vector (or subclass) $v1
* @param object Math_Vector (or subclass) $v2
* @return object Math_Vector (or subclass) on success, PEAR_Error otherwise
return PEAR ::raiseError ("Vectors must of the same size");
for ($i=0; $i < $n; $i++ )
$arr[$i] = $v1->get ($i) - $v2->get ($i);
return PEAR ::raiseError ("V1 and V2 must be Math_Vector objects");
* v * w = <v1 * w1, v2 * w2, ..., vk * wk>
* @param object Math_Vector (or subclass) $v1
* @param object Math_Vector (or subclass) $v2
* @return object Math_Vector (or subclass) on success, PEAR_Error otherwise
return PEAR ::raiseError ("Vectors must of the same size");
for ($i=0; $i < $n; $i++ )
$arr[$i] = $v1->get ($i) * $v2->get ($i);
return PEAR ::raiseError ("V1 and V2 must be Math_Vector objects");
* f * w = <f * w1, f * w2, ..., f * wk>
* @param numeric $f scaling factor
* @param object Math_Vector (or subclass) $v
* @return object Math_Vector (or subclass) on success, PEAR_Error otherwise
function scale ($f, $v) /*{{{*/
for ($i=0; $i < $n; $i++ )
$arr[$i] = $v->get ($i) * $f;
return PEAR ::raiseError ("Requires a numeric factor and a Math_Vector object");
* v / w = <v1 / w1, v2 / w2, ..., vk / wk>
* @param object Math_Vector (or subclass) $v1
* @param object Math_Vector (or subclass) $v2
* @return object Math_Vector (or subclass) on success, PEAR_Error otherwise
function divide ($v1, $v2) /*{{{*/
return PEAR ::raiseError ("Vectors must of the same size");
for ($i=0; $i < $n; $i++ ) {
return PEAR ::raiseError (" Division by zero: Element $i in V2 is zero" );
$arr[$i] = $v1->get ($i) / $d;
return PEAR ::raiseError ("V1 and V2 must be Math_Vector objects");
* Vector dot product = v . w = |v| |w| cos(theta)
* @param object Math_Vector2 or MathVector3 (or subclass) $v1
* @param object Math_Vector2 or MathVector3 (or subclass) $v2
* @return mixed the dot product (float) on success, a PEAR_Error object otherwise
return ( $v1->getX () * $v2->getX () +
$v1->getY () * $v2->getY () );
return ( $v1->getX () * $v2->getX () +
$v1->getY () * $v2->getY () +
$v1->getZ () * $v2->getZ () );
return PEAR ::raiseError ("Vectors must be both of the same type");
* Vector cross product = v x w
* @param object Math_Vector3 (or subclass) $v1
* @param object Math_Vector3 (or subclass) $v2
* @return object the cross product vector (Math_Vector3) on success, a PEAR_Error object otherwise
$arr[0 ] = $v1->getY () * $v2->getZ () - $v1->getZ () * $v2->getY ();
$arr[1 ] = $v1->getZ () * $v2->getX () - $v1->getX () * $v2->getZ ();
$arr[2 ] = $v1->getX () * $v2->getY () - $v1->getY () * $v2->getX ();
return PEAR ::raiseError ("Vectors must be both of the same type");
* Vector triple scalar product = v1 . (v2 x v3)
* @param object Math_Vector3 (or subclass) $v1
* @param object Math_Vector3 (or subclass) $v2
* @param object Math_Vector3 (or subclass) $v3
* @return mixed the triple scalar product (float) on success, a PEAR_Error object otherwise
return PEAR_Error ("All three vectors must be of the same type");
* Angle between vectors, using the equation: v . w = |v| |w| cos(theta)
* @param object Math_Vector2 or MathVector3 (or subclass) $v1
* @param object Math_Vector2 or MathVector3 (or subclass) $v2
* @return mixed the angle between vectors (float, in radians) on success, a PEAR_Error object otherwise
return PEAR ::raiseError ("Vectors must be both of the same type");
* To generate an array of a given size filled with a single value
* If available uses array_fill()
* @param int $index starting index
* @param int $size size of the array
* @param numeric $value value to use for filling the array
function _fill ($index, $size, $value)/*{{{*/
for ($i= $index; $i < ($index + $size); $i++ )
Documentation generated on Mon, 11 Mar 2019 15:39:22 -0400 by phpDocumentor 1.4.4. PEAR Logo Copyright © PHP Group 2004.
|