Add meshgrid and unitTest.
This commit is contained in:
27
src/common/meshgrid.cpp
Normal file
27
src/common/meshgrid.cpp
Normal file
@@ -0,0 +1,27 @@
|
||||
#include "meshgrid.h"
|
||||
#include "Function1D.h"
|
||||
#include "Matrix.h"
|
||||
|
||||
using namespace Aurora;
|
||||
using namespace Recon;
|
||||
|
||||
MeshgridResult Recon::meshgrid(const Aurora::Matrix& aX, const Aurora::Matrix& aY, const Aurora::Matrix& aZ)
|
||||
{
|
||||
MeshgridResult result;
|
||||
if(aX.isNull() || aY.isNull() || aZ.isNull())
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
size_t nx = aX.getDataSize();
|
||||
size_t ny = aY.getDataSize();
|
||||
size_t nz = aZ.getDataSize();
|
||||
Matrix xx = reshape(aX, 1, nx, 1);
|
||||
Matrix yy = reshape(aY, ny, 1, 1);
|
||||
Matrix zz = reshape(aZ, 1, 1, nz);
|
||||
result.xx = repmat(xx, ny, 1, nz);
|
||||
result.yy = repmat(yy, 1, nx, nz);
|
||||
result.zz = repmat3d(zz, ny, nx, 1);
|
||||
|
||||
return result;
|
||||
}
|
||||
18
src/common/meshgrid.h
Normal file
18
src/common/meshgrid.h
Normal file
@@ -0,0 +1,18 @@
|
||||
#ifndef MESHGRID_H
|
||||
#define MESHGRID_H
|
||||
|
||||
#include "Matrix.h"
|
||||
|
||||
namespace Recon
|
||||
{
|
||||
struct MeshgridResult
|
||||
{
|
||||
Aurora::Matrix xx;
|
||||
Aurora::Matrix yy;
|
||||
Aurora::Matrix zz;
|
||||
};
|
||||
|
||||
MeshgridResult meshgrid(const Aurora::Matrix& aX, const Aurora::Matrix& aY, const Aurora::Matrix& aZ);
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -9,6 +9,7 @@
|
||||
#include "common/dataBlockCreation/getAscanBlock.h"
|
||||
#include "common/dataBlockCreation/blockingGeometryInfo.h"
|
||||
#include "common/dataBlockCreation/removeDataFromArrays.h"
|
||||
#include "common/meshgrid.h"
|
||||
|
||||
#include "Parser.h"
|
||||
#include "MatlabReader.h"
|
||||
@@ -340,3 +341,32 @@ TEST_F(Common_Test, removeDataFromArrays) {
|
||||
EXPECT_DOUBLE_EQ(result[2], 5);
|
||||
EXPECT_DOUBLE_EQ(result[3], 6);
|
||||
}
|
||||
|
||||
TEST_F(Common_Test, meshgrid) {
|
||||
MatlabReader m("/home/sun/testData/meshgrid.mat");
|
||||
auto x = m.read("x");
|
||||
auto y = m.read("y");
|
||||
auto z = m.read("z");
|
||||
auto result = Recon::meshgrid(x, y, z);
|
||||
auto xx = m.read("xx");
|
||||
auto yy = m.read("yy");
|
||||
auto zz = m.read("zz");
|
||||
|
||||
EXPECT_DOUBLE_AE(xx.getDataSize(), result.xx.getDataSize());
|
||||
for(int i=0; i<xx.getDataSize(); ++i)
|
||||
{
|
||||
EXPECT_DOUBLE_AE(xx[i], result.xx[i]);
|
||||
}
|
||||
|
||||
EXPECT_DOUBLE_AE(yy.getDataSize(), result.yy.getDataSize());
|
||||
for(int i=0; i<yy.getDataSize(); ++i)
|
||||
{
|
||||
EXPECT_DOUBLE_AE(yy[i], result.yy[i]);
|
||||
}
|
||||
|
||||
EXPECT_DOUBLE_AE(zz.getDataSize(), result.zz.getDataSize());
|
||||
for(int i=0; i<zz.getDataSize(); ++i)
|
||||
{
|
||||
EXPECT_DOUBLE_AE(zz[i], result.zz[i]);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user