00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef freecloth_sim_simMatrix_h
00020 #define freecloth_sim_simMatrix_h
00021
00022 #ifndef freecloth_simulator_package_h
00023 #include <freecloth/simulator/package.h>
00024 #endif
00025
00026 #ifndef freecloth_geom_geMatrix3_h
00027 #include <freecloth/geom/geMatrix3.h>
00028 #endif
00029
00030 #ifndef freecloth_base_list
00031 #include <freecloth/base/list>
00032 #endif
00033
00034 #ifndef freecloth_base_vector
00035 #include <freecloth/base/vector>
00036 #endif
00037
00038 FREECLOTH_NAMESPACE_START
00039
00040
00041
00042
00043 class SimVector;
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067 class SimMatrix
00068 {
00069 public:
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080 class Element {
00081 public:
00082 Element( const GeMatrix3& data, UInt32 column );
00083 GeMatrix3 _data;
00084 UInt32 _column;
00085 };
00086
00087
00088 typedef std::list<Element> ColumnContainer;
00089 typedef ColumnContainer::iterator ColumnIterator;
00090 typedef ColumnContainer::const_iterator ColumnConstIterator;
00091
00092
00093
00094
00095
00096
00097
00098 class Row {
00099 public:
00100 ColumnContainer _columns;
00101
00102 ColumnIterator beginColumn();
00103 ColumnIterator endColumn();
00104 ColumnConstIterator beginColumn() const;
00105 ColumnConstIterator endColumn() const;
00106
00107 const GeMatrix3& operator[]( UInt32 column ) const;
00108
00109 GeMatrix3& operator[]( UInt32 column );
00110 };
00111
00112
00113
00114 typedef std::vector<Row> RowContainer;
00115 typedef RowContainer::iterator RowIterator;
00116 typedef RowContainer::const_iterator RowConstIterator;
00117
00118
00119
00120 static void multiply(
00121 SimVector& destV,
00122 const SimMatrix& srcM,
00123 const SimVector& srcV
00124 );
00125
00126
00127
00128 SimMatrix();
00129 SimMatrix( UInt32 nbRows, UInt32 nbColumns );
00130
00131
00132 UInt32 nbRows() const;
00133 UInt32 nbColumns() const;
00134 RowIterator beginRow();
00135 RowIterator endRow();
00136 RowConstIterator beginRow() const;
00137 RowConstIterator endRow() const;
00138
00139
00140 const Row& operator[]( UInt32 row ) const;
00141 Row& operator[]( UInt32 row );
00142 const GeMatrix3& operator()( UInt32 row, UInt32 col ) const;
00143
00144 GeMatrix3& operator()( UInt32 row, UInt32 col );
00145 SimMatrix& operator*=( Float );
00146 SimMatrix& operator+=( const SimMatrix& );
00147 SimVector operator*( const SimVector& ) const;
00148 SimMatrix operator*( Float ) const;
00149 SimMatrix operator+( const SimMatrix& ) const;
00150
00151
00152
00153 private:
00154
00155
00156
00157
00158 UInt32 _nbRows, _nbColumns;
00159 RowContainer _rows;
00160 };
00161
00162
00163
00164
00165 std::ostream& operator<<( std::ostream&, const SimMatrix& );
00166 SimMatrix operator*( Float, const SimMatrix& );
00167
00168 FREECLOTH_NAMESPACE_END
00169
00170 #include <freecloth/simulator/simMatrix.inline.h>
00171
00172 #endif