X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fmath%2Fvector.hxx;h=e73b8d5fc68f56b29ca6d95acc69b56d6c8d2ffc;hb=f30c4720ae6de72a9b6eab219ebde0b07a517ede;hp=e4692c1527c393c5f9af1d4f58a8ffb5b518b28e;hpb=689a942f193c1c15b4ddb4009958b7782cde44e7;p=simgear.git diff --git a/simgear/math/vector.hxx b/simgear/math/vector.hxx index e4692c15..e73b8d5f 100644 --- a/simgear/math/vector.hxx +++ b/simgear/math/vector.hxx @@ -1,22 +1,26 @@ -// vector.hxx -- additional vector routines -// +/** + * \file vector.hxx + * Additional vector routines. + */ + // Written by Curtis Olson, started December 1997. // -// Copyright (C) 1997 Curtis L. Olson - curt@infoplane.com +// Copyright (C) 1997 Curtis L. Olson - http://www.flightgear.org/~curt // -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License as -// published by the Free Software Foundation; either version 2 of the -// License, or (at your option) any later version. +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Library General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. // -// This program is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. +// Library General Public License for more details. // -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +// You should have received a copy of the GNU Library General Public +// License along with this library; if not, write to the +// Free Software Foundation, Inc., 59 Temple Place - Suite 330, +// Boston, MA 02111-1307, USA. // // $Id$ @@ -29,24 +33,18 @@ # error This library requires C++ #endif -#ifdef HAVE_CONFIG_H -# include -#endif - #include #include -#include - - -// Map a vector onto the plane specified by normal -void map_vec_onto_cur_surface_plane( MAT3vec normal, - MAT3vec v0, - MAT3vec vec, - MAT3vec result ); - +/** + * Map a vector onto a plane. + * @param normal (in) normal vector for the plane + * @param v0 (in) a point on the plane + * @param vec (in) the vector to map onto the plane + * @param result (out) the result vector + */ inline void sgmap_vec_onto_cur_surface_plane( sgVec3 normal, sgVec3 v0, sgVec3 vec, @@ -92,25 +90,75 @@ inline void sgmap_vec_onto_cur_surface_plane( sgVec3 normal, } -// Given a point p, and a line through p0 with direction vector d, -// find the shortest distance from the point to the line -double fgPointLine(MAT3vec p, MAT3vec p0, MAT3vec d); - - -// Given a point p, and a line through p0 with direction vector d, -// find the shortest distance (squared) from the point to the line -double fgPointLineSquared(MAT3vec p, MAT3vec p0, MAT3vec d); - - -// Given a point p, and a line through p0 with direction vector d, -// find the shortest distance (squared) from the point to the line -double sgPointLineDistSquared( const sgVec3 p, const sgVec3 p0, - const sgVec3 d ); +/** + * Copy and negate a vector. + * @param dst (out) result vector + * @param src (in) input vector + */ +inline void sgCopyNegateVec4( sgVec4 dst, sgVec4 src ) +{ + dst [ 0 ] = -src [ 0 ] ; + dst [ 1 ] = -src [ 1 ] ; + dst [ 2 ] = -src [ 2 ] ; + dst [ 3 ] = -src [ 3 ] ; +} -// Given a point p, and a line through p0 with direction vector d, -// find the shortest distance (squared) from the point to the line -double sgdPointLineDistSquared( const sgdVec3 p, const sgdVec3 p0, - const sgdVec3 d ); +/** + * Given a point p, and a line through p0 with direction vector d, + * find the closest point (p1) on the line (float version). + * @param p1 (out) closest point to p on the line + * @param p (in) original point + * @param p0 (in) point on the line + * @param d (in) vector defining line direction + */ +void sgClosestPointToLine( sgVec3 p1, const sgVec3 p, const sgVec3 p0, + const sgVec3 d ); + +/** + * Given a point p, and a line through p0 with direction vector d, + * find the closest point (p1) on the line (double version). + * @param p1 (out) closest point to p on the line + * @param p (in) original point + * @param p0 (in) point on the line + * @param d (in) vector defining line direction + */ +void sgdClosestPointToLine( sgdVec3 p1, const sgdVec3 p, const sgdVec3 p0, + const sgdVec3 d ); + +/** + * Given a point p, and a line through p0 with direction vector d, + * find the shortest distance (squared) from the point to the line (float + * version.) + * @param p (in) original point + * @param p0 (in) point on the line + * @param d (in) vector defining line direction + * @return shortest distance (squared) from p to line + */ +double sgClosestPointToLineDistSquared( const sgVec3 p, const sgVec3 p0, + const sgVec3 d ); + +/** + * Given a point p, and a line through p0 with direction vector d, + * find the shortest distance (squared) from the point to the line (double + * version.) + * @param p (in) original point + * @param p0 (in) point on the line + * @param d (in) vector defining line direction + * @return shortest distance (squared) from p to line + */ +double sgdClosestPointToLineDistSquared( const sgdVec3 p, const sgdVec3 p0, + const sgdVec3 d ); + +/** + * This is same as: + * + *
  • sgMakeMatTrans4( sgMat4 sgTrans, sgVec3 trans ) + *
  • sgPostMultMat4( sgMat4 src, sgTRANS ); + * + * @param src starting sgMat4 matrix + * @param trans translation vector + */ +void sgPostMultMat4ByTransMat4( sgMat4 src, const sgVec3 trans ); #endif // _VECTOR_HXX