X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fmath%2Fvector.hxx;h=b4cbb2f304a27ece653afd354694aa843b32f95a;hb=578af00b0d48100c540154f54293a1b77a0655fe;hp=f27f8b60a773bc60ff20cea7c534446cf12c000f;hpb=fc806106639aec171fe31635f423a238380fb60e;p=simgear.git diff --git a/simgear/math/vector.hxx b/simgear/math/vector.hxx index f27f8b60..b4cbb2f3 100644 --- a/simgear/math/vector.hxx +++ b/simgear/math/vector.hxx @@ -1,22 +1,25 @@ -// 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. +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. // // $Id$ @@ -25,12 +28,8 @@ #define _VECTOR_HXX -#ifndef __cplusplus +#ifndef __cplusplus # error This library requires C++ -#endif - -#ifdef HAVE_CONFIG_H -# include #endif #include @@ -38,6 +37,23 @@ #include +/** + * calculate the projection, p, of u along the direction of d. + * @param p (out) the projection + * @param u (in) the vector to be projected + * @param d (in) the direction onto which we project + */ +void sgProjection(sgVec3 p, const sgVec3 u, const sgVec3 d); +void sgProjection(sgdVec3 p, const sgdVec3 u, const sgdVec3 d); + + +/** + * Map i.e. project 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, @@ -83,15 +99,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 (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