找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1627|回复: 1

[教学] XDGE几何库应用(27)---用圆弧模拟SPLINE

[复制链接]

已领礼包: 51个

财富等级: 招财进宝

发表于 2014-10-15 20:52:40 | 显示全部楼层 |阅读模式

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

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

×
  1. (defun c:tt ()
  2.   (if (and
  3.         (setq e (car (xdrx_entsel "\n拾取SPLINE<退出>:" '((0 . "SPLINE")))))
  4.         (setq dis (getreal "\n输入玄高距<退出>:"))
  5.         (setq ge (xdge::constructor e))
  6.         (setq ePa (xdrx_curve_getEndParam e))
  7.         (setq pts (xdge::getpropertyvalue ge "getsamplepoints" 0.0 ePa dis))
  8.         (setq pts1 (car pts)
  9.               pas1 (cadr pts)
  10.         )
  11.       )
  12.     (progn
  13.       (xdrx_begin)
  14.       (setq pts (XD::List:SnakePair pts1)
  15.             pas (XD::List:SnakePair pas1)
  16.       )
  17.       (setq i 0
  18.             garcl nil
  19.       )
  20.       (mapcar
  21.         '(lambda (x)
  22.            (setq pmid (xdge::getpropertyvalue ge "evalPoint" (/
  23.                                                                 (apply
  24.                                                                   '+
  25.                                                                   (nth i pas)
  26.                                                                 ) 2.0
  27.                                                              )
  28.                       )
  29.                  garc (xdge::constructor "kCircArc2d" (car x) pmid
  30.                                          (cadr x)
  31.                       )
  32.                  garcl (cons garc garcl)
  33.                  i (1+ i)
  34.            )
  35.          )
  36.         pts
  37.       )
  38.       (xdge::entity:make (xdge::constructor "kCompositeCrv2d"
  39.                                             (reverse garcl)
  40.                          )
  41.       )
  42.       (xdrx_entity_setcolor (entlast) 1)
  43. ;;下面代码是测试性能,可以删除     
  44.       (setq area1 (xdrx_getpropertyvalue e "area")
  45.             area2 (xdrx_getpropertyvalue (entlast) "area")
  46.       )
  47.       (xdrx_object_regen (entlast))
  48.       (apply 'xdrx_polyline_make pts1)
  49.       (xdrx_entity_setcolor (entlast) 2)
  50.       (princ (strcat "\n原始面积:" (rtos area1 2 3) ".\n圆弧模拟面积:"
  51.                      (rtos area2 2 3) ".误差:" (rtos (* 100 (/
  52.                                                                 (abs
  53.                                                                      (- area2 area1)
  54.                                                                 ) area1
  55.                                                              )
  56.                                                       ) 2 5
  57.                                                 ) "%" "\n折线模拟面积:"
  58.                      (rtos (setq area3 (abs (apply
  59.                                               'xdrx_points_area
  60.                                               pts1
  61.                                             )
  62.                                        )
  63.                            )
  64.                            2 3
  65.                      ) ".误差:" (rtos (* 100 (/ (abs (- area3 area1)) area1))
  66.                                        2 5
  67.                                  ) "%"
  68.              )
  69.       )
  70. ;;;;      
  71.       (xdrx_end)
  72.     )
  73.   )
  74.   (princ)
  75. )



玄高距离100的时候的截图
BaiduShurufa_2014-10-15_20-57-9.png

玄高距100时候误差


拾取SPLINE<退出>:
输入玄高距<退出>:100

原始面积:74956697.475.
圆弧模拟面积:74958827.643.误差:0.00284%
折线模拟面积:74019558.882.误差:1.25024%


玄高距50时候误差,就不用截图了,因为红色的圆弧线基本和SPLINE重合了。

拾取SPLINE<退出>:
输入玄高距<退出>:50

原始面积:74956697.475.
圆弧模拟面积:74956363.920.误差:0.00044%
折线模拟面积:74481141.091.误差:0.63444%





本帖被以下淘专辑推荐:

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

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-10-15 21:46:56 | 显示全部楼层
很漂亮啊,能不能考虑改下,把相邻圆弧顶点的一阶导数都连续上,这样就更漂亮了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 20:25 , Processed in 0.362750 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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