读取CAD的DXF文件中的SPLINE 样条曲线数据 求绘制此曲线的算法与实现

xgc2067598 2010-11-10 03:14:59
如题,大家帮帮忙啊
...全文
1610 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
geruiguang 2012-07-31
  • 打赏
  • 举报
回复
能不能给我发一份啊,谢谢了,现在正在研究这个
867519280@qq.com
zhaoyong1105 2012-07-11
  • 打赏
  • 举报
回复
小弟也在摸索,楼主能否发份代码,不胜感激
1044369245@qq.com
swmnet 2012-06-24
  • 打赏
  • 举报
回复
楼主可否也发发份代码。。谢谢!在下也在摸索。。。
swmnet@126.com

cuiyaer 2012-02-28
  • 打赏
  • 举报
回复
楼主能否发份代码。。谢谢!
Jorry721 2011-08-19
  • 打赏
  • 举报
回复
楼主能否发份代码给我?多谢
453436534@qq.com
csuchen6 2011-06-13
  • 打赏
  • 举报
回复
楼主已完成?能否发份代码给我?多谢
190523797@qq.com
LIUKUN1106 2011-05-23
  • 打赏
  • 举报
回复
麻烦你也帮我发一份代码吧 谢谢了 liukun1106@126.com
xgc2067598 2010-11-16
  • 打赏
  • 举报
回复
非常感谢 buluori 的大力支持! 结贴了 基本完成了
xgc2067598 2010-11-12
  • 打赏
  • 举报
回复
好的 我已经发你右键了
buluori 2010-11-11
  • 打赏
  • 举报
回复
改成NURBS 要在 取点的 d布尔算法那函数里 加权值 的

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;

}
buluori 2010-11-11
  • 打赏
  • 举报
回复
对,曲线逼近那里 也要改下,他用的步进值好像是du为 0.1 的,太绝对了, 用2分法去切要好点
hn13723899236 2010-11-11
  • 打赏
  • 举报
回复
给我也发一份代码吧
xgc2067598 2010-11-11
  • 打赏
  • 举报
回复
你发的那份代码 曲线逼近的算法 很不柔和,autocad里面 6个控制点 画出来的两个波段都是很柔和的

不过还是要谢谢你 不知道如何使得更加柔和 据我所致 autocad里面的样条曲线时 NURBS的算法貌似
xgc2067598 2010-11-11
  • 打赏
  • 举报
回复
好的 xgc2067598@163.com
buluori 2010-11-11
  • 打赏
  • 举报
回复
有没有邮箱,发段例子给你把,只要把里面的 哈特利-贾德方法 算法,改下就可以了, 加入 权值, 节点的计算用DXF读取的值替换掉
buluori 2010-11-11
  • 打赏
  • 举报
回复
通讯工具在公司用起来不方便,公司禁止,有事可以邮件留言
xgc2067598 2010-11-11
  • 打赏
  • 举报
回复
朋友可否加QQ 或者MSN 来交流下 这里效率太慢


我的QQ 123504023
MSN xgc2067598@hotmail.com
请注明 NURBS
xgc2067598 2010-11-11
  • 打赏
  • 举报
回复
Dj * Nj,k一般样条曲线, 而 NURBS用的是 Wj * Dj * Nj,k / Wj * Nj,k 能解释下么 我对算法的公式不是很了解 而且公式体现在程序的那一块里
buluori 2010-11-11
  • 打赏
  • 举报
回复
而且用的公式是不一样的 例子里用的公式是 Dj * Nj,k一般样条曲线, 而 NURBS用的是 Wj * Dj * Nj,k / Wj * Nj,k
buluori 2010-11-11
  • 打赏
  • 举报
回复
不,cad里面省略是因为我们在画spline的时候没有去编辑控制点权值的值,默认都是1的,所以生成DXF的时候cad会自动省略掉,一旦用户编辑过spline的权值,DXF里就会有权值这组数据了,所以你如果不想以后解析出来的曲线变形的话就在程序里加入进去
加载更多回复(8)

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧