Files
igl/examples/sort/example.cpp
T
jalec fa03862cee dmat matrix file format reader, writer and example
sort, reorder vectors and eigen (dynamic) matrices like matlabs sort (with example)
function to retrieve shader uniform names and locations,
function to report open gl errors to stderr
example that prints opengl version and glsl version,


Former-commit-id: 729936710f
2011-09-28 10:11:55 +00:00

70 lines
1.6 KiB
C++

// g++ -o main main.cpp -I. -I/usr/local/include/eigen3
#include <Eigen/Core>
#include <iostream>
using namespace std;
#include "sort.h"
using namespace igl;
template <typename T>
void matlab_print(const string name, const T & X)
{
cout<<name<<"=["<<endl<<X<<endl<<"];"<<endl;
}
int main(int argc, char * argv[])
{
Eigen::MatrixXd X(2,3);
X << 3,5,2,1,3,8;
matlab_print("X",X);
// sort each row independently
int dim = 2;
// sort ascending order
int ascending = true;
// Sorted output matrix
Eigen::MatrixXd Y;
// sorted indices for sort dimension
Eigen::MatrixXi IX;
sort(X,dim,ascending,Y,IX);
matlab_print<Eigen::MatrixXd>("Y",Y);
matlab_print<Eigen::MatrixXi>("IX",IX);
// Verify that IX really does sort X into Y
int num_outer = (dim == 1 ? X.cols() : X.rows() );
// get number of rows (or columns)
int num_inner = (dim == 1 ? X.rows() : X.cols() );
bool verified = true;
for(int i = 0;i<num_outer;i++)
{
for(int j = 0;j<num_inner;j++)
{
if(dim == 1)
{
if( Y(j,i) != X(IX(j,i),i))
{
printf("Y(%d,%d) = %g != %g = X(%d,%d) = X(IX(%d,%d),%d)\n",
j,i,Y(j,i),X(IX(j,i),i),IX(j,i),i,j,i,i);
verified = false;
}
}else
{
if( Y(i,j) != X(i,IX(i,j)))
{
printf("Y(%d,%d) = %g != %g = X(%d,%d) = X(IX(%d,%d),%d)\n",
i,j,Y(i,j),X(i,IX(i,j)),IX(i,j),i,i,j,i);
verified = false;
}
}
}
}
if(verified)
{
printf("Sorting succeeded\n");
}else
{
printf("Sorting failed\n");
}
return (verified?0:1);
}