回 帖 发 新 帖 刷新版面

主题:有关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这两个变量代表的是什么意思啊?

回复列表 (共1个回复)

沙发


请问你用的是什么库呢?能分享一下不

我来回复

您尚未登录,请登录后再回复。点此登录或注册