fiddling ...

This commit is contained in:
Hartmut Seichter 2019-01-21 17:11:10 +01:00
parent bf834a33e0
commit b2172d88fb
3 changed files with 203 additions and 194 deletions

View file

@ -31,19 +31,34 @@
namespace pw {
template <std::size_t R,std::size_t C,bool RowMajor = false>
struct matrixtraits_
{
//! rows
inline std::size_t rows() const { return R; }
//! return number of columns
inline std::size_t cols() const { return C; }
};
template <typename T, std::size_t R,std::size_t C,bool RowMajor = false>
struct matrix_ : matrixbase_<T, matrix_<T, R, C>> {
struct matrix_ : matrixbase_<T, matrix_<T, R, C>>,matrixtraits_<R,C,RowMajor>
{
T data[R*C];
typedef matrixbase_<T, matrix_<T, R, C>> Base;
using Base::Base;
// typedef matrixbase_<T, matrix_<T, R, C>> Base;
using matrixbase_<T, matrix_<T, R, C>>::matrixbase_;
using matrixtraits_<R,C,RowMajor>::rows;
using matrixtraits_<R,C,RowMajor>::cols;
matrix_(const matrix_& other)
{
*this = other;
}
explicit matrix_(std::initializer_list<T> args)
{
typename std::initializer_list<T>::iterator it = args.begin();
@ -64,14 +79,9 @@ struct matrix_ : matrixbase_<T, matrix_<T, R, C>> {
return *this;
}
//! rows
inline std::size_t rows() const { return R; }
//! return number of columns
inline std::size_t cols() const { return C; }
//! get cell count
inline std::size_t coefficients() const { return this->size(); }
// //! get cell count
// inline std::size_t coefficients() const { return this->size(); }
inline size_t offset(size_t r,size_t c) const {
return (RowMajor) ? r * C + c : c * R + r;

View file

@ -42,7 +42,7 @@ struct quaternion_ : vector4_<T> {
using Base::w;
// using Base::lerp;
// using Base::operator*;
// using Base::operator/;
using Base::operator/;
inline const quaternion_ operator * (const quaternion_& rhs) const {
return quaternion_(
@ -57,7 +57,7 @@ struct quaternion_ : vector4_<T> {
inline quaternion_ conjugate() const { return quaternion_( { -x(),-y(),-z(),w() } ); }
//! compute inverse
inline auto inverse() const {
inline quaternion_ inverse() const {
return conjugate() / this->norm();
}

View file

@ -27,7 +27,6 @@
namespace pw {
template <typename T, std::size_t N>
struct vector_ : matrix_<T, N, 1,false>
{
@ -36,12 +35,12 @@ struct vector_ : matrix_<T, N, 1,false>
using typename Base::value_type;
using Base::Base;
static T dot(const vector_ &a,const vector_ &b) {
static T dot(const Base &a,const Base &b) {
vector_ r; for (size_t i = 0;i < N;i++) r[i] = a[i] * b[i];
return std::accumulate(std::begin(r), std::end(r), T(0));
}
static T angle_between(const vector_ &a,const vector_ &b) {
static T angle_between(const Base &a,const Base &b) {
return std::acos( dot( a.normalized(), b.normalized() ) );
}