sync with private repository.

This commit is contained in:
castano
2007-07-01 08:52:38 +00:00
parent 8f7086a8ee
commit b2252fc828
15 changed files with 190 additions and 88 deletions

View File

@ -10,7 +10,8 @@ SET(MATH_SRCS
Fitting.h Fitting.cpp
Montecarlo.h Montecarlo.cpp
Random.h Random.cpp
SphericalHarmonic.h SphericalHarmonic.cpp)
SphericalHarmonic.h SphericalHarmonic.cpp
Basis.h Basis.cpp)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
@ -25,3 +26,7 @@ ENDIF(NVMATH_SHARED)
TARGET_LINK_LIBRARIES(nvmath ${LIBS} nvcore)
INSTALL(TARGETS nvmath
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib/static)

View File

@ -33,12 +33,12 @@ public:
Vector4 row(uint i) const;
Vector4 column(uint i) const;
void scale(double s);
void scale(scalar s);
void scale(Vector3::Arg s);
void translate(Vector3::Arg t);
void rotate(scalar theta, scalar v0, scalar v1, scalar v2);
Matrix inverse();
double determinant();
scalar determinant();
void apply(Matrix::Arg m);
@ -110,7 +110,7 @@ inline Vector4 Matrix::column(uint i) const
}
/// Apply scale.
inline void Matrix::scale(double s)
inline void Matrix::scale(scalar s)
{
m_data[0] *= s; m_data[1] *= s; m_data[2] *= s; m_data[3] *= s;
m_data[4] *= s; m_data[5] *= s; m_data[6] *= s; m_data[7] *= s;
@ -150,7 +150,7 @@ inline void Matrix::apply(Matrix::Arg m)
nvDebugCheck(this != &m);
for(int i = 0; i < 4; i++) {
const float ai0 = get(i,0), ai1 = get(i,1), ai2 = get(i,2), ai3 = get(i,3);
const scalar ai0 = get(i,0), ai1 = get(i,1), ai2 = get(i,2), ai3 = get(i,3);
m_data[0 + i] = ai0 * m(0,0) + ai1 * m(1,0) + ai2 * m(2,0) + ai3 * m(3,0);
m_data[4 + i] = ai0 * m(0,1) + ai1 * m(1,1) + ai2 * m(2,1) + ai3 * m(3,1);
m_data[8 + i] = ai0 * m(0,2) + ai1 * m(1,2) + ai2 * m(2,2) + ai3 * m(3,2);
@ -305,7 +305,7 @@ inline Matrix perspective(scalar fovy, scalar aspect, scalar zNear)
}
/// Get matrix determinant.
inline double Matrix::determinant()
inline scalar Matrix::determinant()
{
return m_data[3] * m_data[6] * m_data[9] * m_data[12]-m_data[2] * m_data[7] * m_data[9] * m_data[12]-m_data[3] * m_data[5] * m_data[10] * m_data[12]+m_data[1] * m_data[7] * m_data[10] * m_data[12]+
m_data[2] * m_data[5] * m_data[11] * m_data[12]-m_data[1] * m_data[6] * m_data[11] * m_data[12]-m_data[3] * m_data[6] * m_data[8] * m_data[13]+m_data[2] * m_data[7] * m_data[8] * m_data[13]+
@ -315,9 +315,19 @@ inline double Matrix::determinant()
m_data[2] * m_data[4] * m_data[9] * m_data[15]-m_data[0] * m_data[6] * m_data[9] * m_data[15]-m_data[1] * m_data[4] * m_data[10] * m_data[15]+m_data[0] * m_data[5] * m_data[10] * m_data[15];
}
//inline Matrix transpose(Matrix::Arg m)
//{
//}
inline Matrix transpose(Matrix::Arg m)
{
Matrix r;
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; i++)
{
r(i, j) = m(j, i);
}
}
return r;
}
inline Matrix Matrix::inverse()
{
Matrix r;

View File

@ -30,6 +30,8 @@ public:
scalar x() const;
scalar y() const;
const scalar * ptr() const;
void set(scalar x, scalar y);
Vector2 operator-() const;
@ -143,6 +145,11 @@ inline const Vector2 & Vector2::operator=(Vector2::Arg v)
inline scalar Vector2::x() const { return m_x; }
inline scalar Vector2::y() const { return m_y; }
inline const scalar * Vector2::ptr() const
{
return &m_x;
}
inline void Vector2::set(scalar x, scalar y)
{
m_x = x;
@ -397,6 +404,11 @@ inline Vector2 operator*(Vector2::Arg v, scalar s)
return scale(v, s);
}
inline Vector2 operator*(Vector2::Arg v1, Vector2::Arg v2)
{
return Vector2(v1.x()*v2.x(), v1.y()*v2.y());
}
inline Vector2 operator*(scalar s, Vector2::Arg v)
{
return scale(v, s);
@ -417,6 +429,11 @@ inline scalar length(Vector2::Arg v)
return sqrtf(length_squared(v));
}
inline bool equal(Vector2::Arg v1, Vector2::Arg v2, float epsilon = NV_EPSILON)
{
return equal(v1.x(), v2.x(), epsilon) && equal(v1.y(), v2.y(), epsilon);
}
inline Vector2 min(Vector2::Arg a, Vector2::Arg b)
{
return Vector2(min(a.x(), b.x()), min(a.y(), b.y()));
@ -532,6 +549,11 @@ inline Vector3 normalizeSafe(Vector3::Arg v, Vector3::Arg fallback, float epsilo
return scale(v, 1.0f / l);
}
inline bool equal(Vector3::Arg v1, Vector3::Arg v2, float epsilon = NV_EPSILON)
{
return equal(v1.x(), v2.x(), epsilon) && equal(v1.y(), v2.y(), epsilon) && equal(v1.z(), v2.z(), epsilon);
}
inline Vector3 min(Vector3::Arg a, Vector3::Arg b)
{
return Vector3(min(a.x(), b.x()), min(a.y(), b.y()), min(a.z(), b.z()));
@ -643,6 +665,11 @@ inline Vector4 normalizeSafe(Vector4::Arg v, Vector4::Arg fallback, float epsilo
return scale(v, 1.0f / l);
}
inline bool equal(Vector4::Arg v1, Vector4::Arg v2, float epsilon = NV_EPSILON)
{
return equal(v1.x(), v2.x(), epsilon) && equal(v1.y(), v2.y(), epsilon) && equal(v1.z(), v2.z(), epsilon) && equal(v1.w(), v2.w(), epsilon);
}
inline Vector4 min(Vector4::Arg a, Vector4::Arg b)
{
return Vector4(min(a.x(), b.x()), min(a.y(), b.y()), min(a.z(), b.z()), min(a.w(), b.w()));