找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3740|回复: 24

[编程申请] 样条曲线转圆弧

[复制链接]

已领礼包: 106个

财富等级: 日进斗金

发表于 2013-12-16 14:35:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
网上找过,有很多关于这方面的话题.但没找到解决的方法?请大神帮忙谢谢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-12-16 15:20:27 | 显示全部楼层
用多段线模拟不一样吗
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 106个

财富等级: 日进斗金

 楼主| 发表于 2013-12-16 15:48:46 | 显示全部楼层
没有圆弧来得精确,线与线之间会产生锐角.用圆弧的话接口位置非常圆滑,尺寸更接近.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 106个

财富等级: 日进斗金

 楼主| 发表于 2013-12-16 15:51:04 | 显示全部楼层
这个是我在网上找的转成多义线做出的图形,接点会产生锐角.
QQ图片20131216153623.jpg

点评

用XDAPI函数 XDRX_GETSAMPLEPT取得SPLINE的模拟点,然后将模拟点依次按每三点用圆弧连接即可!  详情 回复 发表于 2013-12-16 23:22
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 106个

财富等级: 日进斗金

 楼主| 发表于 2013-12-16 15:54:48 | 显示全部楼层
这个是我用圆弧画出来的
QQ图片20131216153623.jpg
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 106个

财富等级: 日进斗金

 楼主| 发表于 2013-12-16 16:02:09 | 显示全部楼层
精度                  
QQ图片20131216153623.jpg

点评

无限放大是肯定能看到折线的,但是在一定精度下,打印时候看到的,肉眼就看不出来了。  详情 回复 发表于 2013-12-16 16:55
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-12-16 16:55:52 | 显示全部楼层

无限放大是肯定能看到折线的,但是在一定精度下,打印时候看到的,肉眼就看不出来了。

点评

问题是我不单是要打印,还要数据来线切割那就不行了,如果是打印那我都不用转换了直接打印就好  详情 回复 发表于 2013-12-16 17:24
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 106个

财富等级: 日进斗金

 楼主| 发表于 2013-12-16 17:24:07 | 显示全部楼层
newer 发表于 2013-12-16 16:55
无限放大是肯定能看到折线的,但是在一定精度下,打印时候看到的,肉眼就看不出来了。

问题是我不单是要打印,还要数据来线切割那就不行了,如果是打印那我都不用转换了直接打印就好

点评

给你写段测试代码 没有任何东西都是完美的,弧线可以模拟SPLINE,但在无限放大下也还是会有不贴的地方,不过比折线要精确多了。下面的图你点击放大看,白色的是SPLINE,红色的是圆弧,黄色的是折线模拟的。  详情 回复 发表于 2013-12-16 19:02
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-12-16 18:33:36 来自手机 | 显示全部楼层
要保证弧都相切
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-12-16 19:02:08 | 显示全部楼层
ymcui2005 发表于 2013-12-16 17:24
问题是我不单是要打印,还要数据来线切割那就不行了,如果是打印那我都不用转换了直接打印就好

给你写段测试代码

  1. (defun _tt (ent)
  2.   (setq pts (xdrx_getsamplept ent)
  3.         pair (XD::List:SnakePair pts)
  4.         bulge nil
  5.   )
  6.   (setq ss (ssadd))
  7.   (mapcar
  8.     '(lambda (x)
  9.        (setq p1 (car x)
  10.              p2 (cadr x)
  11.              pmid (xdrx_midp p1 p2)
  12.              pin (xdrx_curve_getpointatparam ent (/ (+
  13.                                                        (xdrx_curve_getparamatpoint ent p1)
  14.                                                        (xdrx_curve_getparamatpoint ent p2)
  15.                                                     ) 2.0
  16.                                                  )
  17.                  )
  18.              arcinfo (xdrx_geom_3p2arc p1 pin p2)
  19.             
  20.        )
  21.        (apply 'xdrx_arc_make (cdr arcinfo))
  22.        (xdrx_setpropertyvalue (entlast) "color" 1)
  23.      )
  24.     pair
  25.   )
  26.   (apply 'xdrx_polyline_make pts)
  27.   (xdrx_setpropertyvalue (entlast) "color" 2)
  28. )


  29. (defun c:tt()
  30.    (prompt "\n选取要转换的SPLINE<退出>:")
  31.    (if (setq ss (ssget '((0 . "SPLINE"))))
  32.       (progn
  33.          (mapcar '(lambda(x)(_tt x))(xdrx_pickset->ents ss))
  34.       )
  35.    )
  36.    (princ)
  37. )



没有任何东西都是完美的,弧线可以模拟SPLINE,但在无限放大下也还是会有不贴的地方,不过比折线要精确多了。下面的图你点击放大看,白色的是SPLINE,红色的是圆弧,黄色的是折线模拟的。

图一是整体的形状。
其他是局部放大的。

spline1.PNG


spline2.PNG


spline3.PNG


spline4.PNG


spline5.PNG


点评

; 错误: no function definition: XDRX_PICKSET->ENTS  详情 回复 发表于 2013-12-17 08:33
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-12-16 19:10:13 | 显示全部楼层
原SPLINE面积:431144.5959

折线模拟面积: 431039.7162  误差 0.0243%

圆弧模拟面积:431193.2089   误差 0.0128%

圆弧误差精度提升1倍。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-12-16 19:15:25 | 显示全部楼层
本帖最后由 newer 于 2013-12-16 19:24 编辑

上面测的是满足视觉误差时候的相对的精度,可以通过设置 xdrx_getsamplept的参数,自己设置玄高差数值,让折线更多,同时圆弧会更精确。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-12-16 22:45:55 来自手机 | 显示全部楼层
本帖最后由 st788796 于 2013-12-16 22:47 编辑

By typing SPLINEDIT into command line this allows you to edit the spline, select convert to Polyline from Dynamic Input list or type P into command line and hit enter, you will now be asked to Specify a precision : Just press enter. (You can specify a precision value between 0 and 99, Note: Too high a value could impact performance.)

The PLINECONVERTMODE system variable can also be used to control the accuracy of a spline to polyline conversion. When it is set to 0, it converts splines to polylines composed of linear segments. When it is set to 1, it converts splines to polylines composed of arc segments.
Please note this has been done in AutoCAD 2012 and may not work in older versions of AutoCAD. I believe these tools were available from AutoCAD 2010.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 344个

财富等级: 日进斗金

发表于 2013-12-16 23:22:56 | 显示全部楼层
ymcui2005 发表于 2013-12-16 15:51
这个是我在网上找的转成多义线做出的图形,接点会产生锐角.

用XDAPI函数 XDRX_GETSAMPLEPT取得SPLINE的模拟点,然后将模拟点依次按每三点用圆弧连接即可!

点评

我上面写的代码是xdrx_getsamplept后,2点间找到中点,然后3点圆弧。 如果把getsamplept的三点连圆弧,可能拐角很大的地方,误差会很大,比如下面的图  详情 回复 发表于 2013-12-16 23:50
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-12-16 23:50:19 | 显示全部楼层
牢固 发表于 2013-12-16 23:22
用XDAPI函数 XDRX_GETSAMPLEPT取得SPLINE的模拟点,然后将模拟点依次按每三点用圆弧连接即可!

我上面写的代码是xdrx_getsamplept后,2点间找到中点,然后3点圆弧。

如果把getsamplept的三点连圆弧,可能拐角很大的地方,误差会很大,比如下面的图


                               
登录/注册后可看大图


点评

2点间找到中点,直接将中点最近点投影到曲线上,然后3点圆弧 ,可能会避免上述情况吧!  详情 回复 发表于 2013-12-17 00:14
getsamplept不是按弦高取点么?若按弦高的话,就不应该出现这种状况吧!  详情 回复 发表于 2013-12-17 00:05
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-20 08:06 , Processed in 0.458900 second(s), 69 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表