X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fmath%2Fvector.hxx;h=cec24236dc8fc0b472b85a1ceef64c1dbe6907f7;hb=006f90997a8eef6704de2511e38fcc786672308d;hp=ef97e7de35af8134b0226c68bb00e8f11fb3e20d;hpb=82459a2802a939434f9fc5b88d2b2aea58f0043d;p=simgear.git diff --git a/simgear/math/vector.hxx b/simgear/math/vector.hxx index ef97e7de..cec24236 100644 --- a/simgear/math/vector.hxx +++ b/simgear/math/vector.hxx @@ -1,8 +1,11 @@ -// 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 library is free software; you can redistribute it and/or // modify it under the terms of the GNU Library General Public @@ -14,10 +17,9 @@ // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Library General Public License for more details. // -// 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. +// 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. // // $Id$ @@ -26,12 +28,8 @@ #define _VECTOR_HXX -#ifndef __cplusplus +#ifndef __cplusplus # error This library requires C++ -#endif - -#ifdef HAVE_CONFIG_H -# include #endif #include @@ -39,6 +37,13 @@ #include +/** + * 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, @@ -84,6 +89,11 @@ inline void sgmap_vec_onto_cur_surface_plane( sgVec3 normal, } +/** + * 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 ] ; @@ -92,21 +102,64 @@ inline void sgCopyNegateVec4( sgVec4 dst, sgVec4 src ) 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 sgPointLineDistSquared( 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 sgdPointLineDistSquared( const sgdVec3 p, const sgdVec3 p0, - const sgdVec3 d ); - -// This is same as -// sgMakeMatTrans4( sgMat4 sgTrans, sgVec3 trans ) -// sgPostMultMat4( sgMat, sgTRANS ); +/** + * 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