{
double m_dX;
double m_dY;
double m_dZ;
};
void AccluArcLenParam(const Point* pPoint, double* p, int n);
#include "stdafx.h"
#include "AccluArcLenParam.h"
#include <cmath>
double PointToPointLenght(const Point& pS, const Point& pE)
{
return sqrtf( (pE.m_dX - pS.m_dX)*(pE.m_dX - pS.m_dX)
+ (pE.m_dY - pS.m_dY)*(pE.m_dY - pS.m_dY) +
(pE.m_dZ - pS.m_dZ)*(pE.m_dZ - pS.m_dZ) );
}
void AccluArcLenParam(const Point* pPoint, double* p, int n)
{
if ( n < 2)
{
return;
}
double dTotalLen = 0;
double* pSingleLen = new double[n];
pSingleLen[0] = 0.0;
Point pS = pPoint[0];
for ( int i = 1; i < n ; i ++)
{
Point pE = pPoint[i];
double dLength = PointToPointLenght(pS, pE);
pSingleLen[i] = dLength + dTotalLen;
dTotalLen += dLength;
pS = pE;
}
for ( int i = 0; i < n - 1; i ++)
{
*p++ = pSingleLen[i]/dTotalLen;
}
*p = 1.0; //最后一个点。
delete[] pSingleLen;
}
#include "stdafx.h"
#include "AccluArcLenParam.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
Point point[10];
double ratio[10];
for ( int i = 0 ; i < 10; i++)
{
point[i].m_dX = i;
point[i].m_dY = i;
point[i].m_dZ = i;
}
AccluArcLenParam(point, ratio, 10);
for ( int i = 0; i < 10; i ++)
{
cout << ratio[i] << ", ";
}
cout << endl;
return 0;
}