Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

103 lines (83 sloc) 3.333 kb
/***********************************************************************
* FXRuby -- the Ruby language bindings for the FOX GUI toolkit.
* Copyright (c) 2001-2009 by Lyle Johnson. All Rights Reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser 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
*
* For further information please contact the author by e-mail
* at "lyle@lylejohnson.name".
***********************************************************************/
/// Double-precision 3x3 matrix
class FXMat3d {
protected:
FXVec3d m[3];
public:
/// Default constructor
FXMat3d();
/// Initialize matrix from another matrix
FXMat3d(const FXMat3d& other);
/// Initialize matrix from scalar
FXMat3d(FXdouble w);
/// Initialize matrix from components
FXMat3d(FXdouble a00,FXdouble a01,FXdouble a02,
FXdouble a10,FXdouble a11,FXdouble a12,
FXdouble a20,FXdouble a21,FXdouble a22);
/// Initialize matrix from three vectors
FXMat3d(const FXVec3d& a,const FXVec3d& b,const FXVec3d& c);
/// Initialize matrix from quaternion
FXMat3d(const FXQuatd& quat);
%extend {
/// Indexing
const FXVec3d& __getitem__(FXint i) const {
if(i<0 || i>2) rb_raise(rb_eIndexError,"index %d out of bounds",i);
return (*self)[i];
}
FXVec3d& __setitem__(FXint i,const FXVec3d& other){
if(i<0 || i>2) rb_raise(rb_eIndexError,"index %d out of bounds",i);
(*self)[i]=other;
return (*self)[i];
}
/// Other operators
FXMat3d operator+(const FXMat3d& other) const { return (*self)+other; }
FXMat3d operator-(const FXMat3d& other) const { return (*self)-other; }
FXMat3d operator-() const { return -(*self); }
FXMat3d operator*(const FXMat3d& other) const { return (*self)*other; }
FXMat3d operator*(FXdouble x) const { return (*self)*x; }
FXMat3d operator/(FXdouble x) const {
if(x==0.0) rb_raise(rb_eZeroDivError,"divided by 0");
return (*self)/x;
}
/// Multiply matrix and vector
FXVec3d operator*(const FXVec3d& other) const { return (*self)*other; }
/// Mutiply matrix and vector, for non-projective matrix
FXVec2d operator*(const FXVec2d& other) const { return (*self)*other; }
}
/// Set identity matrix
FXMat3d& eye();
/// Multiply by rotation of phi
FXMat3d& rot(FXdouble c,FXdouble s);
FXMat3d& rot(FXdouble phi);
/// Multiply by translation
FXMat3d& trans(FXdouble tx,FXdouble ty);
/// Multiply by scaling
FXMat3d& scale(FXdouble sx,FXdouble sy);
FXMat3d& scale(FXdouble s);
/// Determinant
FXdouble det() const;
/// Transpose
FXMat3d transpose() const;
/// Invert
FXMat3d invert() const;
};
Jump to Line
Something went wrong with that request. Please try again.