<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html><head><meta name="robots" content="noindex"> <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> <title>vector3.h Source File</title> <link href="doxygen.css" rel="stylesheet" type="text/css"> </head><body bgcolor="#ffffff"> <!-- Generated by Doxygen 1.2.5 on Mon Oct 14 14:16:39 2002 --> <center> <a class="qindex" href="index.html">Main Page</a> <a class="qindex" href="hierarchy.html">Class Hierarchy</a> <a class="qindex" href="annotated.html">Compound List</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="functions.html">Compound Members</a> <a class="qindex" href="pages.html">Related Pages</a> </center> <hr><h1>vector3.h</h1><div class="fragment"><pre>00001 <font class="comment">//</font> 00002 <font class="comment">// vector3.h</font> 00003 <font class="comment">//</font> 00004 <font class="comment">// Copyright (C) 1996 Limit Point Systems, Inc.</font> 00005 <font class="comment">//</font> 00006 <font class="comment">// Author: Curtis Janssen <cljanss@limitpt.com></font> 00007 <font class="comment">// Maintainer: LPS</font> 00008 <font class="comment">//</font> 00009 <font class="comment">// This file is part of the SC Toolkit.</font> 00010 <font class="comment">//</font> 00011 <font class="comment">// The SC Toolkit is free software; you can redistribute it and/or modify</font> 00012 <font class="comment">// it under the terms of the GNU Library General Public License as published by</font> 00013 <font class="comment">// the Free Software Foundation; either version 2, or (at your option)</font> 00014 <font class="comment">// any later version.</font> 00015 <font class="comment">//</font> 00016 <font class="comment">// The SC Toolkit is distributed in the hope that it will be useful,</font> 00017 <font class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</font> 00018 <font class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</font> 00019 <font class="comment">// GNU Library General Public License for more details.</font> 00020 <font class="comment">//</font> 00021 <font class="comment">// You should have received a copy of the GNU Library General Public License</font> 00022 <font class="comment">// along with the SC Toolkit; see the file COPYING.LIB. If not, write to</font> 00023 <font class="comment">// the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.</font> 00024 <font class="comment">//</font> 00025 <font class="comment">// The U.S. Government is granted a limited license as per AL 91-7.</font> 00026 <font class="comment">//</font> 00027 00028 <font class="preprocessor">#ifndef _math_scmat_vector3_h</font> 00029 <font class="preprocessor"></font><font class="preprocessor">#define _math_scmat_vector3_h</font> 00030 <font class="preprocessor"></font><font class="preprocessor">#ifdef __GNUC__</font> 00031 <font class="preprocessor"></font><font class="preprocessor">#pragma interface</font> 00032 <font class="preprocessor"></font><font class="preprocessor">#endif</font> 00033 <font class="preprocessor"></font> 00034 <font class="preprocessor">#include <iostream></font> 00035 <font class="preprocessor">#include <math.h></font> 00036 00037 <font class="preprocessor">#include <util/misc/exenv.h></font> 00038 <font class="preprocessor">#include <util/keyval/keyval.h></font> 00039 00040 <font class="keyword">namespace </font>sc { 00041 00042 <font class="keyword">class </font>RefSCVector; 00043 <font class="keyword">class </font>SCMatrix3; 00044 00045 <font class="keyword">class </font>SCVector3 00046 { 00047 <font class="keyword">friend</font> <font class="keyword">class </font>SCMatrix3; 00048 <font class="keyword">private</font>: 00049 <font class="keywordtype">double</font> _v[3]; 00050 <font class="keyword">public</font>: 00051 SCVector3()<font class="keyword"> </font>{} 00052 SCVector3(<font class="keyword">const</font> <font class="keywordtype">double</font> p[3])<font class="keyword"> </font>{ 00053 _v[0] = p[0]; _v[1] = p[1]; _v[2] = p[2]; 00054 } 00055 SCVector3(<font class="keywordtype">double</font> d)<font class="keyword"> </font>{ _v[0] = d; _v[1] = d; _v[2] = d; } 00056 SCVector3(<font class="keywordtype">double</font> x,<font class="keywordtype">double</font> y,<font class="keywordtype">double</font> z)<font class="keyword"> </font>{ 00057 _v[0] = x; _v[1] = y; _v[2] = z; 00058 } 00059 SCVector3(<font class="keyword">const</font> SCVector3&p)<font class="keyword"> </font>{ 00060 _v[0] = p._v[0]; _v[1] = p._v[1]; _v[2] = p._v[2]; 00061 } 00062 SCVector3(<font class="keyword">const</font> RefSCVector&); 00063 SCVector3(<font class="keyword">const</font> Ref<KeyVal>&); 00064 <font class="keywordtype">void</font> normalize(); 00065 SCVector3 operator -()<font class="keyword"> </font>{ <font class="keywordflow">return</font> SCVector3(-_v[0],-_v[1],-_v[2]); } 00066 SCVector3 operator*(<font class="keywordtype">double</font>) <font class="keyword">const</font>; 00067 <font class="keywordtype">void</font> operator = (<font class="keyword">const</font> <font class="keywordtype">double</font> *x)<font class="keyword"> </font>{ 00068 _v[0] = x[0]; 00069 _v[1] = x[1]; 00070 _v[2] = x[2]; 00071 } 00072 <font class="keywordtype">void</font> operator = (<font class="keyword">const</font> SCVector3& x)<font class="keyword"> </font>{ 00073 _v[0] = x._v[0]; 00074 _v[1] = x._v[1]; 00075 _v[2] = x._v[2]; 00076 } 00077 <font class="keywordtype">void</font> operator = (<font class="keywordtype">double</font> d)<font class="keyword"> </font>{ _v[0] = d; _v[1] = d; _v[2] = d; } 00078 <font class="keywordtype">void</font> operator -= (<font class="keyword">const</font> SCVector3& v)<font class="keyword"> </font>{ 00079 _v[0] -= v._v[0]; 00080 _v[1] -= v._v[1]; 00081 _v[2] -= v._v[2]; 00082 } 00083 <font class="keywordtype">void</font> operator += (<font class="keyword">const</font> SCVector3& v)<font class="keyword"> </font>{ 00084 _v[0] += v._v[0]; 00085 _v[1] += v._v[1]; 00086 _v[2] += v._v[2]; 00087 } 00088 <font class="keywordtype">void</font> operator *= (<font class="keywordtype">double</font> m)<font class="keyword"> </font>{ _v[0] *= m; _v[1] *= m; _v[2] *= m; } 00089 SCVector3 operator+(<font class="keyword">const</font> SCVector3&v)<font class="keyword"> const </font>{ 00090 SCVector3 result; 00091 result._v[0] = _v[0] + v._v[0]; 00092 result._v[1] = _v[1] + v._v[1]; 00093 result._v[2] = _v[2] + v._v[2]; 00094 <font class="keywordflow">return</font> result; 00095 } 00096 SCVector3 operator-(<font class="keyword">const</font> SCVector3&v)<font class="keyword"> const </font>{ 00097 SCVector3 result; 00098 result._v[0] = _v[0] - v._v[0]; 00099 result._v[1] = _v[1] - v._v[1]; 00100 result._v[2] = _v[2] - v._v[2]; 00101 <font class="keywordflow">return</font> result; 00102 } 00103 <font class="keywordtype">double</font> dot(<font class="keyword">const</font> SCVector3&v)<font class="keyword"> const </font>{ 00104 <font class="keywordflow">return</font> _v[0]*v._v[0] + _v[1]*v._v[1] + _v[2]*v._v[2]; } 00105 SCVector3 cross(<font class="keyword">const</font> SCVector3&) <font class="keyword">const</font>; 00106 <font class="comment">// returns a unit vector that is perpendicular to the two vectors</font> 00107 SCVector3 perp_unit(<font class="keyword">const</font> SCVector3&) <font class="keyword">const</font>; 00108 <font class="keywordtype">void</font> spherical_coord(<font class="keywordtype">double</font> theta, <font class="keywordtype">double</font> phi, 00109 <font class="keywordtype">double</font> r); 00110 <font class="keywordtype">void</font> spherical_to_cartesian(SCVector3&cart) <font class="keyword">const</font>; 00111 <font class="keywordtype">double</font> maxabs() <font class="keyword">const</font>; 00112 <font class="comment">// this returns the length of the difference vector</font> 00113 <font class="keywordtype">double</font> dist(<font class="keyword">const</font> SCVector3&) <font class="keyword">const</font>; 00114 <font class="keywordtype">void</font> rotate(<font class="keywordtype">double</font> theta,SCVector3 &v); 00115 <font class="keywordtype">double</font> norm()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> sqrt(this->dot(*<font class="keyword">this</font>)); } 00116 <font class="keywordtype">double</font>& elem(<font class="keywordtype">int</font> xyz)<font class="keyword"> </font>{ <font class="keywordflow">return</font> _v[xyz]; } 00117 <font class="keyword">const</font> <font class="keywordtype">double</font>& elem(<font class="keywordtype">int</font> xyz)<font class="keyword"> const </font>{ <font class="keywordflow">return</font> _v[xyz]; } 00118 <font class="keywordtype">double</font>& operator [] (<font class="keywordtype">int</font> i)<font class="keyword"> </font>{ <font class="keywordflow">return</font> _v[i]; } 00119 <font class="keyword">const</font> <font class="keywordtype">double</font>& operator [] (<font class="keywordtype">int</font> i)<font class="keyword"> const </font>{ <font class="keywordflow">return</font> _v[i]; } 00120 <font class="keywordtype">double</font>& operator () (<font class="keywordtype">int</font> i)<font class="keyword"> </font>{ <font class="keywordflow">return</font> _v[i]; } 00121 <font class="keyword">const</font> <font class="keywordtype">double</font>& operator () (<font class="keywordtype">int</font> i)<font class="keyword"> const </font>{ <font class="keywordflow">return</font> _v[i]; } 00122 <font class="keyword">const</font> <font class="keywordtype">double</font>* data()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> _v; } 00123 <font class="keywordtype">double</font>* data()<font class="keyword"> </font>{ <font class="keywordflow">return</font> _v; } 00124 <font class="keywordtype">double</font>& x()<font class="keyword"> </font>{ <font class="keywordflow">return</font> _v[0]; } 00125 <font class="keywordtype">double</font>& y()<font class="keyword"> </font>{ <font class="keywordflow">return</font> _v[1]; } 00126 <font class="keywordtype">double</font>& z()<font class="keyword"> </font>{ <font class="keywordflow">return</font> _v[2]; } 00127 <font class="keyword">const</font> <font class="keywordtype">double</font>& x()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> _v[0]; } 00128 <font class="keyword">const</font> <font class="keywordtype">double</font>& y()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> _v[1]; } 00129 <font class="keyword">const</font> <font class="keywordtype">double</font>& z()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> _v[2]; } 00130 <font class="keywordtype">double</font>& r()<font class="keyword"> </font>{ <font class="keywordflow">return</font> _v[0]; } 00131 <font class="keywordtype">double</font>& theta()<font class="keyword"> </font>{ <font class="keywordflow">return</font> _v[1]; } 00132 <font class="keywordtype">double</font>& phi()<font class="keyword"> </font>{ <font class="keywordflow">return</font> _v[2]; } 00133 <font class="keyword">const</font> <font class="keywordtype">double</font>& r()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> _v[0]; } 00134 <font class="keyword">const</font> <font class="keywordtype">double</font>& theta()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> _v[1]; } 00135 <font class="keyword">const</font> <font class="keywordtype">double</font>& phi()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> _v[2]; } 00136 <font class="keywordtype">void</font> print(std::ostream& =ExEnv::out0()) <font class="keyword">const</font>; 00137 }; 00138 SCVector3 operator*(<font class="keywordtype">double</font>,<font class="keyword">const</font> SCVector3&); 00139 std::ostream &operator<<(std::ostream&, <font class="keyword">const</font> SCVector3 &); 00140 00141 } 00142 00143 <font class="preprocessor">#ifdef INLINE_FUNCTIONS</font> 00144 <font class="preprocessor"></font><font class="preprocessor">#include <math/scmat/vector3_i.h></font> 00145 <font class="preprocessor">#endif</font> 00146 <font class="preprocessor"></font> 00147 <font class="preprocessor">#endif</font> 00148 <font class="preprocessor"></font> 00149 <font class="comment">// Local Variables:</font> 00150 <font class="comment">// mode: c++</font> 00151 <font class="comment">// c-file-style: "CLJ"</font> 00152 <font class="comment">// End:</font> </div></pre><hr> <address> <small> Generated at Mon Oct 14 14:16:39 2002 for <a href="http://aros.ca.sandia.gov/~cljanss/mpqc">MPQC</a> 2.1.2 using the documentation package <a href="http://www.stack.nl/~dimitri/doxygen/index.html">Doxygen</a> 1.2.5. </small> </address> </body> </html>