Initial
This commit is contained in:
97
mdiwin/MESHFRM.CPP
Normal file
97
mdiwin/MESHFRM.CPP
Normal file
@@ -0,0 +1,97 @@
|
||||
#include <mdiwin/meshfrm.hpp>
|
||||
|
||||
WORD MeshFrames::interpolateMeshFrames(Vector<FloatPairs> &srcPairs,Vector<FloatPairs> &dstPairs,Vector<VectoredPairs> &meshVectors,int nFrames)
|
||||
{
|
||||
Vector<FloatPairs> resamplePairs;
|
||||
Vector<FloatPairs> tempPairs;
|
||||
CatmullRom catmullRom;
|
||||
size_t vectorSize((int)srcPairs.size());
|
||||
meshVectors.size(nFrames);
|
||||
|
||||
resamplePairs.size(nFrames);
|
||||
tempPairs.size(MaxTempPairs);
|
||||
for(int i=0;i<nFrames;i++)meshVectors[i].size(vectorSize);
|
||||
for(i=0;i<vectorSize;i++)
|
||||
{
|
||||
if(distanceBetween(srcPairs[i],dstPairs[i]))
|
||||
{
|
||||
if(srcPairs[i].column()!=dstPairs[i].column())
|
||||
{
|
||||
tempPairs[SourceTempPair].setPairs(srcPairs[i].column(),srcPairs[i].row());
|
||||
tempPairs[DestTempPair].setPairs(dstPairs[i].column(),dstPairs[i].row());
|
||||
distributeMeshPoints(srcPairs[i].column(),dstPairs[i].column(),resamplePairs);
|
||||
catmullRom.performSpline(tempPairs,resamplePairs);
|
||||
replaceMeshColumn(meshVectors,resamplePairs,i);
|
||||
}
|
||||
else
|
||||
{
|
||||
tempPairs[SourceTempPair].setPairs(srcPairs[i].row(),srcPairs[i].column());
|
||||
tempPairs[DestTempPair].setPairs(dstPairs[i].row(),dstPairs[i].column());
|
||||
distributeMeshPoints(srcPairs[i].row(),dstPairs[i].row(),resamplePairs);
|
||||
catmullRom.performSpline(tempPairs,resamplePairs);
|
||||
for(int j=0;j<nFrames;j++)resamplePairs[j].setPairs(srcPairs[i].column(),resamplePairs[j].column());
|
||||
replaceMeshColumn(meshVectors,resamplePairs,i);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for(int j=0;j<nFrames;j++)resamplePairs[j].setPairs(srcPairs[i].column(),dstPairs[i].row());
|
||||
replaceMeshColumn(meshVectors,resamplePairs,i);
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void MeshFrames::distributeMeshPoints(float srcPoint,float dstPoint,Vector<FloatPairs> &resamplePairs)
|
||||
{
|
||||
int nFrames((int)resamplePairs.size());
|
||||
int index;
|
||||
double incremental;
|
||||
double i;
|
||||
|
||||
if(dstPoint>srcPoint)
|
||||
{
|
||||
incremental=((double)dstPoint-(double)srcPoint)/(double)nFrames;
|
||||
for(i=srcPoint+incremental,index=0;index<nFrames;i+=incremental,index++)
|
||||
resamplePairs[index].column(i);
|
||||
}
|
||||
else
|
||||
{
|
||||
incremental=((double)srcPoint-(double)dstPoint)/(double)nFrames;
|
||||
for(i=srcPoint-incremental,index=0;index<nFrames;i-=incremental,index++)
|
||||
resamplePairs[index].column(i);
|
||||
}
|
||||
}
|
||||
|
||||
void MeshFrames::replaceMeshColumn(Vector<VectoredPairs> &meshVectors,Vector<FloatPairs> &resamplePairs,int meshRow)
|
||||
{
|
||||
int nFrames((int)resamplePairs.size());
|
||||
|
||||
if(nFrames!=meshVectors.size())return;
|
||||
for(int i=0;i<nFrames;i++)
|
||||
(meshVectors[i])[meshRow].setPairs(resamplePairs[i].column(),resamplePairs[i].row());
|
||||
}
|
||||
|
||||
WORD MeshFrames::distanceBetween(FloatPairs &srcPair,FloatPairs &dstPair)const
|
||||
{
|
||||
float distanceBetween;
|
||||
|
||||
distanceBetween=
|
||||
((srcPair.column()-dstPair.column())*(srcPair.column()-dstPair.column()))+
|
||||
((srcPair.row()-dstPair.row())*(srcPair.row()-dstPair.row()));
|
||||
return distanceBetween;
|
||||
}
|
||||
|
||||
void MeshFrames::dumpMeshFrames(Vector<VectoredPairs> &meshVectors)
|
||||
{
|
||||
size_t meshCols((int)meshVectors.size());
|
||||
size_t meshRows((int)meshVectors[0].size());
|
||||
ofstream output("OUTPUT.DAT");
|
||||
|
||||
for(int row=0;row<meshRows;row++)
|
||||
{
|
||||
for(int col=0;col<meshCols;col++)
|
||||
output << "(" << (meshVectors[col])[row].column() << "," << (meshVectors[col])[row].row() << "),";
|
||||
output << endl;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user