主题:有关nurbs曲线编程的相关问题
CRPoint CRSpline::Dbordv(double u, int iDegree)
/*
输入参数:
k表示次数,l表示相异节点个数,u表示参数值,t[l]表示相异节点数组,r[l]表示重复度数组,
d[dim][kl]表示所涉及的控制顶点。
输出参数:
p表示B样条曲线上参数为u值的一点
*/
{
int k = Knot_Index(u) - iDegree; //相关节点的起始点索引号
if(k < 0)
return CRPoint(0,0);
CArray<double,double> dt0,dt1, dw;
dt0.SetSize(iDegree + 1);
dt1.SetSize(iDegree + 1);
dw.SetSize(iDegree + 1); //权值
for(int i = 0;i <= iDegree;i++)
{
dw[i] = m_pW[k + i];
dt0[i] = dw[i] * m_pCtrlPtList[k + i].x;
dt1[i] = dw[i] * m_pCtrlPtList[k + i].y;
}
for(int II = 1;II <= iDegree;II++)
{
for(int j = 0;j <= iDegree - II;j++)
{
double denom,alpha;
denom = Knot_Value(j+iDegree+1+k) - Knot_Value(j+II+k);
if(fabs(denom) <= 1e-5)
alpha = 0.0;
else
alpha = (u - Knot_Value(j+II+k))/denom;
dt0[j] = (1.0 - alpha) * dt0[j] + alpha * dt0[j+1];
dt1[j] = (1.0 - alpha) * dt1[j] + alpha * dt1[j+1];
dw[j] = (1.0 - alpha) * dw[j] + alpha * dw[j+1]; //权值
}
}
CRPoint p;
p.x = dt0.GetAt(0) / dw.GetAt(0); //权值
p.y = dt1.GetAt(0) / dw.GetAt(0);
return p;
}
请问denom和alpha这两个变量代表的是什么意思啊?
/*
输入参数:
k表示次数,l表示相异节点个数,u表示参数值,t[l]表示相异节点数组,r[l]表示重复度数组,
d[dim][kl]表示所涉及的控制顶点。
输出参数:
p表示B样条曲线上参数为u值的一点
*/
{
int k = Knot_Index(u) - iDegree; //相关节点的起始点索引号
if(k < 0)
return CRPoint(0,0);
CArray<double,double> dt0,dt1, dw;
dt0.SetSize(iDegree + 1);
dt1.SetSize(iDegree + 1);
dw.SetSize(iDegree + 1); //权值
for(int i = 0;i <= iDegree;i++)
{
dw[i] = m_pW[k + i];
dt0[i] = dw[i] * m_pCtrlPtList[k + i].x;
dt1[i] = dw[i] * m_pCtrlPtList[k + i].y;
}
for(int II = 1;II <= iDegree;II++)
{
for(int j = 0;j <= iDegree - II;j++)
{
double denom,alpha;
denom = Knot_Value(j+iDegree+1+k) - Knot_Value(j+II+k);
if(fabs(denom) <= 1e-5)
alpha = 0.0;
else
alpha = (u - Knot_Value(j+II+k))/denom;
dt0[j] = (1.0 - alpha) * dt0[j] + alpha * dt0[j+1];
dt1[j] = (1.0 - alpha) * dt1[j] + alpha * dt1[j+1];
dw[j] = (1.0 - alpha) * dw[j] + alpha * dw[j+1]; //权值
}
}
CRPoint p;
p.x = dt0.GetAt(0) / dw.GetAt(0); //权值
p.y = dt1.GetAt(0) / dw.GetAt(0);
return p;
}
请问denom和alpha这两个变量代表的是什么意思啊?