累积弦长参数化

struct  Point
{
    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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值