Get a column vector of a matrix
This commit is contained in:
parent
1daf1619ef
commit
c45d698424
6 changed files with 28 additions and 1 deletions
|
@ -6,6 +6,7 @@
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
#include <type_traits>
|
||||||
|
|
||||||
#include "basics/matrix.hh"
|
#include "basics/matrix.hh"
|
||||||
|
|
||||||
|
@ -187,6 +188,14 @@ Matrix4::operator()(UInt i,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Vector4
|
||||||
|
Matrix4::Column(const UInt i)
|
||||||
|
const noexcept
|
||||||
|
{
|
||||||
|
return Vector4(operator()(i,0), operator()(i,1), operator()(i,2), operator()(i,3));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* charles::basics::Matrix4::CArray --
|
* charles::basics::Matrix4::CArray --
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -47,6 +47,7 @@ struct Matrix4
|
||||||
*/
|
*/
|
||||||
Double& operator()(UInt i, UInt j);
|
Double& operator()(UInt i, UInt j);
|
||||||
Double operator()(UInt i, UInt j) const;
|
Double operator()(UInt i, UInt j) const;
|
||||||
|
Vector4 Column(const UInt i) const noexcept;
|
||||||
|
|
||||||
/** Get the underlying C array */
|
/** Get the underlying C array */
|
||||||
const Double *CArray() const;
|
const Double *CArray() const;
|
||||||
|
|
|
@ -33,11 +33,22 @@ Vector4::Vector4()
|
||||||
Vector4::Vector4(Double x,
|
Vector4::Vector4(Double x,
|
||||||
Double y,
|
Double y,
|
||||||
Double z)
|
Double z)
|
||||||
|
: Vector4(x, y, z, 1.0)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* charles::basics::Vector4::Vector4 --
|
||||||
|
*/
|
||||||
|
Vector4::Vector4(Double x,
|
||||||
|
Double y,
|
||||||
|
Double z,
|
||||||
|
Double w)
|
||||||
{
|
{
|
||||||
mData[0] = x;
|
mData[0] = x;
|
||||||
mData[1] = y;
|
mData[1] = y;
|
||||||
mData[2] = z;
|
mData[2] = z;
|
||||||
mData[3] = 1.0;
|
mData[3] = w;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,7 @@ struct Vector4
|
||||||
{
|
{
|
||||||
Vector4();
|
Vector4();
|
||||||
Vector4(Double x, Double y, Double z);
|
Vector4(Double x, Double y, Double z);
|
||||||
|
Vector4(Double x, Double y, Double z, Double w);
|
||||||
|
|
||||||
Vector4 &operator=(const Vector4 &rhs);
|
Vector4 &operator=(const Vector4 &rhs);
|
||||||
|
|
||||||
|
|
|
@ -144,7 +144,9 @@ std::ostream&
|
||||||
operator<<(std::ostream& ost,
|
operator<<(std::ostream& ost,
|
||||||
const Object& object)
|
const Object& object)
|
||||||
{
|
{
|
||||||
|
ost << "[";
|
||||||
object.Write(ost);
|
object.Write(ost);
|
||||||
|
ost << " translate=" << object.mTranslation.Column(3) << "]";
|
||||||
return ost;
|
return ost;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -60,6 +60,9 @@ protected:
|
||||||
virtual basics::Vector4 DoNormal(const basics::Vector4& p) const = 0;
|
virtual basics::Vector4 DoNormal(const basics::Vector4& p) const = 0;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
friend std::ostream& operator<<(std::ostream& ost, const Object& object);
|
||||||
|
|
||||||
|
|
||||||
/** Convert `ray` to object space from global space. */
|
/** Convert `ray` to object space from global space. */
|
||||||
basics::Ray ToObjectSpace(basics::Ray ray) const;
|
basics::Ray ToObjectSpace(basics::Ray ray) const;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue