Sophie

Sophie

distrib > Mandriva > 9.1 > ppc > media > contrib > by-pkgid > 263386785cefb9ae5d63b926d214d809 > files > 11

mpqc-2.1.2-4mdk.ppc.rpm

<!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>algebra3.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:35 2002 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="hierarchy.html">Class Hierarchy</a> &nbsp; <a class="qindex" href="annotated.html">Compound List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; <a class="qindex" href="pages.html">Related Pages</a> &nbsp; </center>
<hr><h1>algebra3.h</h1><div class="fragment"><pre>00001 <font class="comment">/****************************************************************</font>
00002 <font class="comment">*                                                               *</font>
00003 <font class="comment">* C++ Vector and Matrix Algebra routines                        *</font>
00004 <font class="comment">* Author: Jean-Francois DOUE                                    *</font>
00005 <font class="comment">* Version 3.1 --- October 1993                                  *</font>
00006 <font class="comment">*                                                               *</font>
00007 <font class="comment">****************************************************************/</font>
00008 
00009 <font class="preprocessor">#ifndef _util_misc_algebra_h</font>
00010 <font class="preprocessor"></font><font class="preprocessor">#define _util_misc_algebra_h</font>
00011 <font class="preprocessor"></font>
00012 <font class="preprocessor">#include &lt;iostream&gt;</font>
00013 <font class="preprocessor">#include &lt;stdlib.h&gt;</font>
00014 
00015 <font class="keyword">namespace </font>sc {
00016 
00017 <font class="comment">// this line defines a new type: pointer to a function which returns a</font>
00018 <font class="comment">// double and takes as argument a double</font>
00019 <font class="keyword">typedef</font> double (*V_FCT_PTR)(<font class="keywordtype">double</font>);
00020 
00021 <font class="keyword">class </font>vec2;
00022 <font class="keyword">class </font>vec3;
00023 <font class="keyword">class </font>vec4;
00024 <font class="keyword">class </font>mat3;
00025 <font class="keyword">class </font>mat4;
00026 
00027 <font class="keyword">enum</font> {VX, VY, VZ, VW};              <font class="comment">// axes</font>
00028 <font class="keyword">enum</font> {PA, PB, PC, PD};              <font class="comment">// planes</font>
00029 <font class="keyword">enum</font> {RED, GREEN, BLUE};            <font class="comment">// colors</font>
00030 
00031 <font class="comment">/****************************************************************</font>
00032 <font class="comment">*                                                               *</font>
00033 <font class="comment">*                           2D Vector                           *</font>
00034 <font class="comment">*                                                               *</font>
00035 <font class="comment">****************************************************************/</font>
00036 
00037 <font class="keyword">class </font>vec2
00038 {
00039 <font class="keyword">protected</font>:
00040 
00041  <font class="keywordtype">double</font> n[2];
00042 
00043 <font class="keyword">public</font>:
00044 
00045 <font class="comment">// Constructors</font>
00046 
00047 vec2();
00048 vec2(<font class="keyword">const</font> <font class="keywordtype">double</font> x, <font class="keyword">const</font> <font class="keywordtype">double</font> y);
00049 vec2(<font class="keyword">const</font> <font class="keywordtype">double</font> d);
00050 vec2(<font class="keyword">const</font> vec2&amp; v);                    <font class="comment">// copy constructor</font>
00051 vec2(<font class="keyword">const</font> vec3&amp; v);                    <font class="comment">// cast v3 to v2</font>
00052 vec2(<font class="keyword">const</font> vec3&amp; v, <font class="keywordtype">int</font> dropAxis);      <font class="comment">// cast v3 to v2</font>
00053 
00054 <font class="comment">// Assignment operators</font>
00055 
00056 vec2&amp; operator  = ( <font class="keyword">const</font> vec2&amp; v );    <font class="comment">// assignment of a vec2</font>
00057 vec2&amp; operator += ( <font class="keyword">const</font> vec2&amp; v );    <font class="comment">// incrementation by a vec2</font>
00058 vec2&amp; operator -= ( <font class="keyword">const</font> vec2&amp; v );    <font class="comment">// decrementation by a vec2</font>
00059 vec2&amp; operator *= ( <font class="keyword">const</font> <font class="keywordtype">double</font> d );   <font class="comment">// multiplication by a constant</font>
00060 vec2&amp; operator /= ( <font class="keyword">const</font> <font class="keywordtype">double</font> d );   <font class="comment">// division by a constant</font>
00061 <font class="keywordtype">double</font>&amp; operator [] ( <font class="keywordtype">int</font> i);           <font class="comment">// indexing</font>
00062 <font class="keyword">const</font> <font class="keywordtype">double</font>&amp; operator[](<font class="keywordtype">int</font> i) <font class="keyword">const</font>;  <font class="comment">// indexing</font>
00063 
00064 <font class="comment">// special functions</font>
00065 
00066 <font class="keywordtype">double</font> length();                        <font class="comment">// length of a vec2</font>
00067 <font class="keywordtype">double</font> length2();                       <font class="comment">// squared length of a vec2</font>
00068 vec2&amp; normalize();                      <font class="comment">// normalize a vec2</font>
00069 vec2&amp; apply(V_FCT_PTR fct);             <font class="comment">// apply a func. to each component</font>
00070 
00071 <font class="comment">// friends</font>
00072 
00073 <font class="keyword">friend</font> vec2 operator - (<font class="keyword">const</font> vec2&amp; v);                     <font class="comment">// -v1</font>
00074 <font class="keyword">friend</font> vec2 operator + (<font class="keyword">const</font> vec2&amp; a, <font class="keyword">const</font> vec2&amp; b);      <font class="comment">// v1 + v2</font>
00075 <font class="keyword">friend</font> vec2 operator - (<font class="keyword">const</font> vec2&amp; a, <font class="keyword">const</font> vec2&amp; b);      <font class="comment">// v1 - v2</font>
00076 <font class="keyword">friend</font> vec2 operator * (<font class="keyword">const</font> vec2&amp; a, <font class="keyword">const</font> <font class="keywordtype">double</font> d);     <font class="comment">// v1 * 3.0</font>
00077 <font class="keyword">friend</font> vec2 operator * (<font class="keyword">const</font> <font class="keywordtype">double</font> d, <font class="keyword">const</font> vec2&amp; a);     <font class="comment">// 3.0 * v1</font>
00078 <font class="keyword">friend</font> vec2 operator * (<font class="keyword">const</font> mat3&amp; a, <font class="keyword">const</font> vec2&amp; v);      <font class="comment">// M . v</font>
00079 <font class="keyword">friend</font> vec2 operator * (<font class="keyword">const</font> vec2&amp; v, mat3&amp; a);            <font class="comment">// v . M</font>
00080 <font class="keyword">friend</font> <font class="keywordtype">double</font> operator * (<font class="keyword">const</font> vec2&amp; a, <font class="keyword">const</font> vec2&amp; b);    <font class="comment">// dot product</font>
00081 <font class="keyword">friend</font> vec2 operator / (<font class="keyword">const</font> vec2&amp; a, <font class="keyword">const</font> <font class="keywordtype">double</font> d);     <font class="comment">// v1 / 3.0</font>
00082 <font class="keyword">friend</font> vec3 operator ^ (<font class="keyword">const</font> vec2&amp; a, <font class="keyword">const</font> vec2&amp; b);      <font class="comment">// cross product</font>
00083 <font class="keyword">friend</font> <font class="keywordtype">int</font> operator == (<font class="keyword">const</font> vec2&amp; a, <font class="keyword">const</font> vec2&amp; b);      <font class="comment">// v1 == v2 ?</font>
00084 <font class="keyword">friend</font> <font class="keywordtype">int</font> operator != (<font class="keyword">const</font> vec2&amp; a, <font class="keyword">const</font> vec2&amp; b);      <font class="comment">// v1 != v2 ?</font>
00085 <font class="keyword">friend</font> std::ostream&amp; operator &lt;&lt; (std::ostream&amp; s, vec2&amp; v);<font class="comment">// output to stream</font>
00086 <font class="keyword">friend</font> std::istream&amp; operator &gt;&gt; (std::istream&amp; s, vec2&amp; v);<font class="comment">// input from strm.</font>
00087 <font class="keyword">friend</font> <font class="keywordtype">void</font> swap(vec2&amp; a, vec2&amp; b);                         <font class="comment">// swap v1 &amp; v2</font>
00088 <font class="keyword">friend</font> vec2 min(<font class="keyword">const</font> vec2&amp; a, <font class="keyword">const</font> vec2&amp; b);              <font class="comment">// min(v1, v2)</font>
00089 <font class="keyword">friend</font> vec2 max(<font class="keyword">const</font> vec2&amp; a, <font class="keyword">const</font> vec2&amp; b);              <font class="comment">// max(v1, v2)</font>
00090 <font class="keyword">friend</font> vec2 prod(<font class="keyword">const</font> vec2&amp; a, <font class="keyword">const</font> vec2&amp; b);             <font class="comment">// term by term *</font>
00091 
00092 <font class="comment">// necessary friend declarations</font>
00093 
00094 <font class="keyword">friend</font> <font class="keyword">class </font>vec3;
00095 };
00096 
00097 <font class="comment">/****************************************************************</font>
00098 <font class="comment">*                                                               *</font>
00099 <font class="comment">*                           3D Vector                           *</font>
00100 <font class="comment">*                                                               *</font>
00101 <font class="comment">****************************************************************/</font>
00102 
00103 <font class="keyword">class </font>vec3
00104 {
00105 <font class="keyword">protected</font>:
00106 
00107  <font class="keywordtype">double</font> n[3];
00108 
00109 <font class="keyword">public</font>:
00110 
00111 <font class="comment">// Constructors</font>
00112 
00113 vec3();
00114 vec3(<font class="keyword">const</font> <font class="keywordtype">double</font> x, <font class="keyword">const</font> <font class="keywordtype">double</font> y, <font class="keyword">const</font> <font class="keywordtype">double</font> z);
00115 vec3(<font class="keyword">const</font> <font class="keywordtype">double</font> d);
00116 vec3(<font class="keyword">const</font> vec3&amp; v);                        <font class="comment">// copy constructor</font>
00117 vec3(<font class="keyword">const</font> vec2&amp; v);                        <font class="comment">// cast v2 to v3</font>
00118 vec3(<font class="keyword">const</font> vec2&amp; v, <font class="keywordtype">double</font> d);              <font class="comment">// cast v2 to v3</font>
00119 vec3(<font class="keyword">const</font> vec4&amp; v);                        <font class="comment">// cast v4 to v3</font>
00120 vec3(<font class="keyword">const</font> vec4&amp; v, <font class="keywordtype">int</font> dropAxis);          <font class="comment">// cast v4 to v3</font>
00121 
00122 <font class="comment">// Assignment operators</font>
00123 
00124 vec3&amp; operator  = ( <font class="keyword">const</font> vec3&amp; v );        <font class="comment">// assignment of a vec3</font>
00125 vec3&amp; operator += ( <font class="keyword">const</font> vec3&amp; v );        <font class="comment">// incrementation by a vec3</font>
00126 vec3&amp; operator -= ( <font class="keyword">const</font> vec3&amp; v );        <font class="comment">// decrementation by a vec3</font>
00127 vec3&amp; operator *= ( <font class="keyword">const</font> <font class="keywordtype">double</font> d );       <font class="comment">// multiplication by a constant</font>
00128 vec3&amp; operator /= ( <font class="keyword">const</font> <font class="keywordtype">double</font> d );       <font class="comment">// division by a constant</font>
00129 <font class="keywordtype">double</font>&amp; operator [] ( <font class="keywordtype">int</font> i);               <font class="comment">// indexing</font>
00130 <font class="keyword">const</font> <font class="keywordtype">double</font>&amp; operator[](<font class="keywordtype">int</font> i) <font class="keyword">const</font>;      <font class="comment">// indexing</font>
00131 
00132 <font class="comment">// special functions</font>
00133 
00134 <font class="keywordtype">double</font> length();                            <font class="comment">// length of a vec3</font>
00135 <font class="keywordtype">double</font> length2();                           <font class="comment">// squared length of a vec3</font>
00136 vec3&amp; normalize();                          <font class="comment">// normalize a vec3</font>
00137 vec3&amp; apply(V_FCT_PTR fct);                 <font class="comment">// apply a func. to each component</font>
00138 
00139 <font class="comment">// friends</font>
00140 
00141 <font class="keyword">friend</font> vec3 operator - (<font class="keyword">const</font> vec3&amp; v);                     <font class="comment">// -v1</font>
00142 <font class="keyword">friend</font> vec3 operator + (<font class="keyword">const</font> vec3&amp; a, <font class="keyword">const</font> vec3&amp; b);      <font class="comment">// v1 + v2</font>
00143 <font class="keyword">friend</font> vec3 operator - (<font class="keyword">const</font> vec3&amp; a, <font class="keyword">const</font> vec3&amp; b);      <font class="comment">// v1 - v2</font>
00144 <font class="keyword">friend</font> vec3 operator * (<font class="keyword">const</font> vec3&amp; a, <font class="keyword">const</font> <font class="keywordtype">double</font> d);     <font class="comment">// v1 * 3.0</font>
00145 <font class="keyword">friend</font> vec3 operator * (<font class="keyword">const</font> <font class="keywordtype">double</font> d, <font class="keyword">const</font> vec3&amp; a);     <font class="comment">// 3.0 * v1</font>
00146 <font class="keyword">friend</font> vec3 operator * (<font class="keyword">const</font> mat4&amp; a, <font class="keyword">const</font> vec3&amp; v);      <font class="comment">// M . v</font>
00147 <font class="keyword">friend</font> vec3 operator * (<font class="keyword">const</font> vec3&amp; v, <font class="keyword">const</font> mat4&amp; a);      <font class="comment">// v . M</font>
00148 <font class="keyword">friend</font> <font class="keywordtype">double</font> operator * (<font class="keyword">const</font> vec3&amp; a, <font class="keyword">const</font> vec3&amp; b);    <font class="comment">// dot product</font>
00149 <font class="keyword">friend</font> vec3 operator / (<font class="keyword">const</font> vec3&amp; a, <font class="keyword">const</font> <font class="keywordtype">double</font> d);     <font class="comment">// v1 / 3.0</font>
00150 <font class="keyword">friend</font> vec3 operator ^ (<font class="keyword">const</font> vec3&amp; a, <font class="keyword">const</font> vec3&amp; b);      <font class="comment">// cross product</font>
00151 <font class="keyword">friend</font> <font class="keywordtype">int</font> operator == (<font class="keyword">const</font> vec3&amp; a, <font class="keyword">const</font> vec3&amp; b);      <font class="comment">// v1 == v2 ?</font>
00152 <font class="keyword">friend</font> <font class="keywordtype">int</font> operator != (<font class="keyword">const</font> vec3&amp; a, <font class="keyword">const</font> vec3&amp; b);      <font class="comment">// v1 != v2 ?</font>
00153 <font class="keyword">friend</font> std::ostream&amp; operator &lt;&lt; (std::ostream&amp; s, vec3&amp; v);<font class="comment">// output to stream</font>
00154 <font class="keyword">friend</font> std::istream&amp; operator &gt;&gt; (std::istream&amp; s, vec3&amp; v);<font class="comment">// input from strm.</font>
00155 <font class="keyword">friend</font> <font class="keywordtype">void</font> swap(vec3&amp; a, vec3&amp; b);                         <font class="comment">// swap v1 &amp; v2</font>
00156 <font class="keyword">friend</font> vec3 min(<font class="keyword">const</font> vec3&amp; a, <font class="keyword">const</font> vec3&amp; b);              <font class="comment">// min(v1, v2)</font>
00157 <font class="keyword">friend</font> vec3 max(<font class="keyword">const</font> vec3&amp; a, <font class="keyword">const</font> vec3&amp; b);              <font class="comment">// max(v1, v2)</font>
00158 <font class="keyword">friend</font> vec3 prod(<font class="keyword">const</font> vec3&amp; a, <font class="keyword">const</font> vec3&amp; b);             <font class="comment">// term by term *</font>
00159 
00160 <font class="comment">// necessary friend declarations</font>
00161 
00162 <font class="keyword">friend</font> <font class="keyword">class </font>vec2;
00163 <font class="keyword">friend</font> <font class="keyword">class </font>vec4;
00164 <font class="keyword">friend</font> <font class="keyword">class </font>mat3;
00165 <font class="keyword">friend</font> vec2 operator * (<font class="keyword">const</font> mat3&amp; a, <font class="keyword">const</font> vec2&amp; v);      <font class="comment">// linear transform</font>
00166 <font class="keyword">friend</font> mat3 operator * (<font class="keyword">const</font> mat3&amp; a, <font class="keyword">const</font> mat3&amp; b);              <font class="comment">// matrix 3 product</font>
00167 };
00168 
00169 <font class="comment">/****************************************************************</font>
00170 <font class="comment">*                                                               *</font>
00171 <font class="comment">*                           4D Vector                           *</font>
00172 <font class="comment">*                                                               *</font>
00173 <font class="comment">****************************************************************/</font>
00174 
00175 <font class="keyword">class </font>vec4
00176 {
00177 <font class="keyword">protected</font>:
00178 
00179  <font class="keywordtype">double</font> n[4];
00180 
00181 <font class="keyword">public</font>:
00182 
00183 <font class="comment">// Constructors</font>
00184 
00185 vec4();
00186 vec4(<font class="keyword">const</font> <font class="keywordtype">double</font> x, <font class="keyword">const</font> <font class="keywordtype">double</font> y, <font class="keyword">const</font> <font class="keywordtype">double</font> z, <font class="keyword">const</font> <font class="keywordtype">double</font> w);
00187 vec4(<font class="keyword">const</font> <font class="keywordtype">double</font> d);
00188 vec4(<font class="keyword">const</font> vec4&amp; v);                        <font class="comment">// copy constructor</font>
00189 vec4(<font class="keyword">const</font> vec3&amp; v);                        <font class="comment">// cast vec3 to vec4</font>
00190 vec4(<font class="keyword">const</font> vec3&amp; v, <font class="keyword">const</font> <font class="keywordtype">double</font> d);        <font class="comment">// cast vec3 to vec4</font>
00191 
00192 <font class="comment">// Assignment operators</font>
00193 
00194 vec4&amp; operator  = ( <font class="keyword">const</font> vec4&amp; v );        <font class="comment">// assignment of a vec4</font>
00195 vec4&amp; operator += ( <font class="keyword">const</font> vec4&amp; v );        <font class="comment">// incrementation by a vec4</font>
00196 vec4&amp; operator -= ( <font class="keyword">const</font> vec4&amp; v );        <font class="comment">// decrementation by a vec4</font>
00197 vec4&amp; operator *= ( <font class="keyword">const</font> <font class="keywordtype">double</font> d );       <font class="comment">// multiplication by a constant</font>
00198 vec4&amp; operator /= ( <font class="keyword">const</font> <font class="keywordtype">double</font> d );       <font class="comment">// division by a constant</font>
00199 <font class="keywordtype">double</font>&amp; operator [] ( <font class="keywordtype">int</font> i);               <font class="comment">// indexing</font>
00200 <font class="keyword">const</font> <font class="keywordtype">double</font>&amp; operator [] ( <font class="keywordtype">int</font> i) <font class="keyword">const</font>;                   <font class="comment">// indexing</font>
00201 
00202 <font class="comment">// special functions</font>
00203 
00204 <font class="keywordtype">double</font> length();                            <font class="comment">// length of a vec4</font>
00205 <font class="keywordtype">double</font> length2();                           <font class="comment">// squared length of a vec4</font>
00206 vec4&amp; normalize();                          <font class="comment">// normalize a vec4</font>
00207 vec4&amp; apply(V_FCT_PTR fct);                 <font class="comment">// apply a func. to each component</font>
00208 
00209 <font class="comment">// friends</font>
00210 
00211 <font class="keyword">friend</font> vec4 operator - (<font class="keyword">const</font> vec4&amp; v);                     <font class="comment">// -v1</font>
00212 <font class="keyword">friend</font> vec4 operator + (<font class="keyword">const</font> vec4&amp; a, <font class="keyword">const</font> vec4&amp; b);      <font class="comment">// v1 + v2</font>
00213 <font class="keyword">friend</font> vec4 operator - (<font class="keyword">const</font> vec4&amp; a, <font class="keyword">const</font> vec4&amp; b);      <font class="comment">// v1 - v2</font>
00214 <font class="keyword">friend</font> vec4 operator * (<font class="keyword">const</font> vec4&amp; a, <font class="keyword">const</font> <font class="keywordtype">double</font> d);     <font class="comment">// v1 * 3.0</font>
00215 <font class="keyword">friend</font> vec4 operator * (<font class="keyword">const</font> <font class="keywordtype">double</font> d, <font class="keyword">const</font> vec4&amp; a);     <font class="comment">// 3.0 * v1</font>
00216 <font class="keyword">friend</font> vec4 operator * (<font class="keyword">const</font> mat4&amp; a, <font class="keyword">const</font> vec4&amp; v);      <font class="comment">// M . v</font>
00217 <font class="keyword">friend</font> vec4 operator * (<font class="keyword">const</font> vec4&amp; v, <font class="keyword">const</font> mat4&amp; a);      <font class="comment">// v . M</font>
00218 <font class="keyword">friend</font> <font class="keywordtype">double</font> operator * (<font class="keyword">const</font> vec4&amp; a, <font class="keyword">const</font> vec4&amp; b);    <font class="comment">// dot product</font>
00219 <font class="keyword">friend</font> vec4 operator / (<font class="keyword">const</font> vec4&amp; a, <font class="keyword">const</font> <font class="keywordtype">double</font> d);     <font class="comment">// v1 / 3.0</font>
00220 <font class="keyword">friend</font> <font class="keywordtype">int</font> operator == (<font class="keyword">const</font> vec4&amp; a, <font class="keyword">const</font> vec4&amp; b);      <font class="comment">// v1 == v2 ?</font>
00221 <font class="keyword">friend</font> <font class="keywordtype">int</font> operator != (<font class="keyword">const</font> vec4&amp; a, <font class="keyword">const</font> vec4&amp; b);      <font class="comment">// v1 != v2 ?</font>
00222 <font class="keyword">friend</font> std::ostream&amp; operator &lt;&lt; (std::ostream&amp; s, vec4&amp; v);<font class="comment">// output to stream</font>
00223 <font class="keyword">friend</font> std::istream&amp; operator &gt;&gt; (std::istream&amp; s, vec4&amp; v);<font class="comment">// input from strm.</font>
00224 <font class="keyword">friend</font> <font class="keywordtype">void</font> swap(vec4&amp; a, vec4&amp; b);                         <font class="comment">// swap v1 &amp; v2</font>
00225 <font class="keyword">friend</font> vec4 min(<font class="keyword">const</font> vec4&amp; a, <font class="keyword">const</font> vec4&amp; b);              <font class="comment">// min(v1, v2)</font>
00226 <font class="keyword">friend</font> vec4 max(<font class="keyword">const</font> vec4&amp; a, <font class="keyword">const</font> vec4&amp; b);              <font class="comment">// max(v1, v2)</font>
00227 <font class="keyword">friend</font> vec4 prod(<font class="keyword">const</font> vec4&amp; a, <font class="keyword">const</font> vec4&amp; b);             <font class="comment">// term by term *</font>
00228 
00229 <font class="comment">// necessary friend declarations</font>
00230 
00231 <font class="keyword">friend</font> <font class="keyword">class </font>vec3;
00232 <font class="keyword">friend</font> <font class="keyword">class </font>mat4;
00233 <font class="keyword">friend</font> vec3 operator * (<font class="keyword">const</font> mat4&amp; a, <font class="keyword">const</font> vec3&amp; v);      <font class="comment">// linear transform</font>
00234 <font class="keyword">friend</font> mat4 operator * (<font class="keyword">const</font> mat4&amp; a, <font class="keyword">const</font> mat4&amp; b);              <font class="comment">// matrix 4 product</font>
00235 };
00236 
00237 <font class="comment">/****************************************************************</font>
00238 <font class="comment">*                                                               *</font>
00239 <font class="comment">*                          3x3 Matrix                           *</font>
00240 <font class="comment">*                                                               *</font>
00241 <font class="comment">****************************************************************/</font>
00242 
00243 <font class="keyword">class </font>mat3
00244 {
00245 <font class="keyword">protected</font>:
00246 
00247  vec3 v[3];
00248 
00249 <font class="keyword">public</font>:
00250 
00251 <font class="comment">// Constructors</font>
00252 
00253 mat3();
00254 mat3(<font class="keyword">const</font> vec3&amp; v0, <font class="keyword">const</font> vec3&amp; v1, <font class="keyword">const</font> vec3&amp; v2);
00255 mat3(<font class="keyword">const</font> <font class="keywordtype">double</font> d);
00256 mat3(<font class="keyword">const</font> mat3&amp; m);
00257 
00258 <font class="comment">// Assignment operators</font>
00259 
00260 mat3&amp; operator  = ( <font class="keyword">const</font> mat3&amp; m );        <font class="comment">// assignment of a mat3</font>
00261 mat3&amp; operator += ( <font class="keyword">const</font> mat3&amp; m );        <font class="comment">// incrementation by a mat3</font>
00262 mat3&amp; operator -= ( <font class="keyword">const</font> mat3&amp; m );        <font class="comment">// decrementation by a mat3</font>
00263 mat3&amp; operator *= ( <font class="keyword">const</font> <font class="keywordtype">double</font> d );       <font class="comment">// multiplication by a constant</font>
00264 mat3&amp; operator /= ( <font class="keyword">const</font> <font class="keywordtype">double</font> d );       <font class="comment">// division by a constant</font>
00265 vec3&amp; operator [] ( <font class="keywordtype">int</font> i);                 <font class="comment">// indexing</font>
00266 <font class="keyword">const</font> vec3&amp; operator [] ( <font class="keywordtype">int</font> i) <font class="keyword">const</font>;             <font class="comment">// indexing</font>
00267 
00268 <font class="comment">// special functions</font>
00269 
00270 mat3 transpose() <font class="keyword">const</font>;                     <font class="comment">// transpose</font>
00271 mat3 inverse();                             <font class="comment">// inverse</font>
00272 mat3&amp; apply(V_FCT_PTR fct);                 <font class="comment">// apply a func. to each element</font>
00273 
00274 <font class="comment">// friends</font>
00275 
00276 <font class="keyword">friend</font> mat3 operator - (<font class="keyword">const</font> mat3&amp; a);                     <font class="comment">// -m1</font>
00277 <font class="keyword">friend</font> mat3 operator + (<font class="keyword">const</font> mat3&amp; a, <font class="keyword">const</font> mat3&amp; b);      <font class="comment">// m1 + m2</font>
00278 <font class="keyword">friend</font> mat3 operator - (<font class="keyword">const</font> mat3&amp; a, <font class="keyword">const</font> mat3&amp; b);      <font class="comment">// m1 - m2</font>
00279 <font class="keyword">friend</font> mat3 operator * (<font class="keyword">const</font> mat3&amp; a, <font class="keyword">const</font> mat3&amp; b);              <font class="comment">// m1 * m2</font>
00280 <font class="keyword">friend</font> mat3 operator * (<font class="keyword">const</font> mat3&amp; a, <font class="keyword">const</font> <font class="keywordtype">double</font> d);     <font class="comment">// m1 * 3.0</font>
00281 <font class="keyword">friend</font> mat3 operator * (<font class="keyword">const</font> <font class="keywordtype">double</font> d, <font class="keyword">const</font> mat3&amp; a);     <font class="comment">// 3.0 * m1</font>
00282 <font class="keyword">friend</font> mat3 operator / (<font class="keyword">const</font> mat3&amp; a, <font class="keyword">const</font> <font class="keywordtype">double</font> d);     <font class="comment">// m1 / 3.0</font>
00283 <font class="keyword">friend</font> <font class="keywordtype">int</font> operator == (<font class="keyword">const</font> mat3&amp; a, <font class="keyword">const</font> mat3&amp; b);      <font class="comment">// m1 == m2 ?</font>
00284 <font class="keyword">friend</font> <font class="keywordtype">int</font> operator != (<font class="keyword">const</font> mat3&amp; a, <font class="keyword">const</font> mat3&amp; b);      <font class="comment">// m1 != m2 ?</font>
00285 <font class="keyword">friend</font> std::ostream&amp; operator &lt;&lt; (std::ostream&amp; s, mat3&amp; m);<font class="comment">// output to stream</font>
00286 <font class="keyword">friend</font> std::istream&amp; operator &gt;&gt; (std::istream&amp; s, mat3&amp; m);<font class="comment">// input from strm.</font>
00287 <font class="keyword">friend</font> <font class="keywordtype">void</font> swap(mat3&amp; a, mat3&amp; b);                         <font class="comment">// swap m1 &amp; m2</font>
00288 
00289 <font class="comment">// necessary friend declarations</font>
00290 
00291 <font class="keyword">friend</font> vec3 operator * (<font class="keyword">const</font> mat3&amp; a, <font class="keyword">const</font> vec3&amp; v);      <font class="comment">// linear transform</font>
00292 <font class="keyword">friend</font> vec2 operator * (<font class="keyword">const</font> mat3&amp; a, <font class="keyword">const</font> vec2&amp; v);      <font class="comment">// linear transform</font>
00293 };
00294 
00295 <font class="comment">/****************************************************************</font>
00296 <font class="comment">*                                                               *</font>
00297 <font class="comment">*                          4x4 Matrix                           *</font>
00298 <font class="comment">*                                                               *</font>
00299 <font class="comment">****************************************************************/</font>
00300 
00301 <font class="keyword">class </font>mat4
00302 {
00303 <font class="keyword">protected</font>:
00304 
00305  vec4 v[4];
00306 
00307 <font class="keyword">public</font>:
00308 
00309 <font class="comment">// Constructors</font>
00310 
00311 mat4();
00312 mat4(<font class="keyword">const</font> vec4&amp; v0, <font class="keyword">const</font> vec4&amp; v1, <font class="keyword">const</font> vec4&amp; v2, <font class="keyword">const</font> vec4&amp; v3);
00313 mat4(<font class="keyword">const</font> <font class="keywordtype">double</font> d);
00314 mat4(<font class="keyword">const</font> mat4&amp; m);
00315 
00316 <font class="comment">// Assignment operators</font>
00317 
00318 mat4&amp; operator  = ( <font class="keyword">const</font> mat4&amp; m );        <font class="comment">// assignment of a mat4</font>
00319 mat4&amp; operator += ( <font class="keyword">const</font> mat4&amp; m );        <font class="comment">// incrementation by a mat4</font>
00320 mat4&amp; operator -= ( <font class="keyword">const</font> mat4&amp; m );        <font class="comment">// decrementation by a mat4</font>
00321 mat4&amp; operator *= ( <font class="keyword">const</font> <font class="keywordtype">double</font> d );       <font class="comment">// multiplication by a constant</font>
00322 mat4&amp; operator /= ( <font class="keyword">const</font> <font class="keywordtype">double</font> d );       <font class="comment">// division by a constant</font>
00323 vec4&amp; operator [] ( <font class="keywordtype">int</font> i);                 <font class="comment">// indexing</font>
00324 <font class="keyword">const</font> vec4&amp; operator [] ( <font class="keywordtype">int</font> i) <font class="keyword">const</font>;             <font class="comment">// indexing</font>
00325 
00326 <font class="comment">// special functions</font>
00327 
00328 mat4 transpose() <font class="keyword">const</font>;                     <font class="comment">// transpose</font>
00329 mat4 inverse();                             <font class="comment">// inverse</font>
00330 mat4&amp; apply(V_FCT_PTR fct);                 <font class="comment">// apply a func. to each element</font>
00331 
00332 <font class="comment">// friends</font>
00333 
00334 <font class="keyword">friend</font> mat4 operator - (<font class="keyword">const</font> mat4&amp; a);                     <font class="comment">// -m1</font>
00335 <font class="keyword">friend</font> mat4 operator + (<font class="keyword">const</font> mat4&amp; a, <font class="keyword">const</font> mat4&amp; b);      <font class="comment">// m1 + m2</font>
00336 <font class="keyword">friend</font> mat4 operator - (<font class="keyword">const</font> mat4&amp; a, <font class="keyword">const</font> mat4&amp; b);      <font class="comment">// m1 - m2</font>
00337 <font class="keyword">friend</font> mat4 operator * (<font class="keyword">const</font> mat4&amp; a, <font class="keyword">const</font> mat4&amp; b);              <font class="comment">// m1 * m2</font>
00338 <font class="keyword">friend</font> mat4 operator * (<font class="keyword">const</font> mat4&amp; a, <font class="keyword">const</font> <font class="keywordtype">double</font> d);     <font class="comment">// m1 * 4.0</font>
00339 <font class="keyword">friend</font> mat4 operator * (<font class="keyword">const</font> <font class="keywordtype">double</font> d, <font class="keyword">const</font> mat4&amp; a);     <font class="comment">// 4.0 * m1</font>
00340 <font class="keyword">friend</font> mat4 operator / (<font class="keyword">const</font> mat4&amp; a, <font class="keyword">const</font> <font class="keywordtype">double</font> d);     <font class="comment">// m1 / 3.0</font>
00341 <font class="keyword">friend</font> <font class="keywordtype">int</font> operator == (<font class="keyword">const</font> mat4&amp; a, <font class="keyword">const</font> mat4&amp; b);      <font class="comment">// m1 == m2 ?</font>
00342 <font class="keyword">friend</font> <font class="keywordtype">int</font> operator != (<font class="keyword">const</font> mat4&amp; a, <font class="keyword">const</font> mat4&amp; b);      <font class="comment">// m1 != m2 ?</font>
00343 <font class="keyword">friend</font> std::ostream&amp; operator &lt;&lt; (std::ostream&amp; s, mat4&amp; m);<font class="comment">// output to stream</font>
00344 <font class="keyword">friend</font> std::istream&amp; operator &gt;&gt; (std::istream&amp; s, mat4&amp; m);<font class="comment">// input from strm.</font>
00345 <font class="keyword">friend</font> <font class="keywordtype">void</font> swap(mat4&amp; a, mat4&amp; b);                         <font class="comment">// swap m1 &amp; m2</font>
00346 
00347 <font class="comment">// necessary friend declarations</font>
00348 
00349 <font class="keyword">friend</font> vec4 operator * (<font class="keyword">const</font> mat4&amp; a, <font class="keyword">const</font> vec4&amp; v);      <font class="comment">// linear transform</font>
00350 <font class="keyword">friend</font> vec3 operator * (<font class="keyword">const</font> mat4&amp; a, <font class="keyword">const</font> vec3&amp; v);      <font class="comment">// linear transform</font>
00351 };
00352 
00353 <font class="comment">/****************************************************************</font>
00354 <font class="comment">*                                                               *</font>
00355 <font class="comment">*              2D functions and 3D functions                    *</font>
00356 <font class="comment">*                                                               *</font>
00357 <font class="comment">****************************************************************/</font>
00358 
00359 mat3 identity2D();                                          <font class="comment">// identity 2D</font>
00360 mat3 translation2D(<font class="keyword">const</font> vec2&amp; v);                          <font class="comment">// translation 2D</font>
00361 mat3 rotation2D(<font class="keyword">const</font> vec2&amp; Center, <font class="keyword">const</font> <font class="keywordtype">double</font> angleDeg); <font class="comment">// rotation 2D</font>
00362 mat3 scaling2D(<font class="keyword">const</font> vec2&amp; scaleVector);                    <font class="comment">// scaling 2D</font>
00363 mat4 identity3D();                                          <font class="comment">// identity 3D</font>
00364 mat4 translation3D(<font class="keyword">const</font> vec3&amp; v);                          <font class="comment">// translation 3D</font>
00365 mat4 rotation3D(<font class="keyword">const</font> vec3&amp; Axis, <font class="keyword">const</font> <font class="keywordtype">double</font> angleDeg);   <font class="comment">// rotation 3D</font>
00366 mat4 scaling3D(<font class="keyword">const</font> vec3&amp; scaleVector);                    <font class="comment">// scaling 3D</font>
00367 mat4 perspective3D(<font class="keyword">const</font> <font class="keywordtype">double</font> d);                         <font class="comment">// perspective 3D</font>
00368 
00369 }
00370 
00371 <font class="preprocessor">#endif</font>
</font></div></pre><hr>
<address>
<small>

Generated at Mon Oct 14 14:16:35 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>