找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 4359|回复: 14

[求助] 如何清除掉SPLINE上不必要的控制点?

[复制链接]

已领礼包: 19个

财富等级: 恭喜发财

发表于 2014-11-4 00:06:28 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 Lisphk 于 2014-11-4 00:10 编辑

如图,起始和结束部分,密集的几个点都是直线段,请问怎么清理掉中间的不必要的控制点,让直线部分就有2个点?

BaiduShurufa_2014-11-4_0-3-4.png


请点击此处下载

查看状态:需购买或无权限

您的用户组是:游客

文件名称:Drawing2.rar 
下载次数:5  文件大小:14.29 KB 
下载权限: 不限 以上  [免费赚D豆]


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

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-11-4 01:01:03 | 显示全部楼层
遍历控制点,
判断相邻点的一阶导数,是否共线
共线,删除控制点
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2014-11-4 16:46:29 | 显示全部楼层
其实样条曲线的每个点都是有用的,看似直线段的中间那些点都像是没用的,如果真删除,顶端曲线的形状也会跟着改变的。
1111.jpg

点评

再上个图对比,可以发现,一个直线段最少需要4个控制点,只要在直线段范围内保证有4个控制点,其他的点都可以删除掉。 直线段中间的两个点的位置在线上可以随意的。 图中,最左边图是原SPLINE, 第二个图是直接延  详情 回复 发表于 2014-11-4 20:45
研究下,如图,黄圈里面那些点是可以删除的。 [attachimg]10966[/attachimg]  详情 回复 发表于 2014-11-4 20:07
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-11-4 16:57:21 | 显示全部楼层
Spline 的特性是调整控制点只影响本段吧
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-11-4 20:07:15 | 显示全部楼层
本帖最后由 newer 于 2014-11-4 20:12 编辑
ll_j 发表于 2014-11-4 16:46
其实样条曲线的每个点都是有用的,看似直线段的中间那些点都像是没用的,如果真删除,顶端曲线的形状也会跟 ...

研究下,如图,黄圈里面那些点是可以删除的。

BaiduShurufa_2014-11-4_20-5-43.png

使用的代码是: (xdrx_setpropertyvalue e "removeControlPointAt" vertex)  
ACAD2013+版本支持删除控制点。再多删除一个顶点曲线形状就要改变。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-11-4 20:45:23 | 显示全部楼层
ll_j 发表于 2014-11-4 16:46
其实样条曲线的每个点都是有用的,看似直线段的中间那些点都像是没用的,如果真删除,顶端曲线的形状也会跟 ...

再上个图对比,可以发现,一个直线段最少需要4个控制点,只要在直线段范围内保证有4个控制点,其他的点都可以删除掉。 直线段中间的两个点的位置在线上可以随意的。

图中,最左边图是原SPLINE, 第二个图是直接延伸到最下面直线的,控制点最少,直线段被中间2个点等分。我们简化的目标就是要和这个形状一致,控制点数也一样。

图中第三个图是分别延伸到每条直线的,造成了中间有很多多余的无用的控制点,看每个白线间隔中每个直线段都是4个控制点。
图中第四个图,是用 (xdrx_setpropertyvalue e "removeControlPointAt" vertex) 手工删除控制点的结果,黄圈内的点都可以删除,可以看到只要保证直线段有4个控制点,中间的点的位置是可以任意的,形状保持不变。

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

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2014-11-4 21:47:34 | 显示全部楼层
newer 发表于 2014-11-4 20:45
再上个图对比,可以发现,一个直线段最少需要4个控制点,只要在直线段范围内保证有4个控制点,其他的点都 ...

不是几个控制点的问题,学工程力学的大概都知道三弯矩方程和五弯矩方程,spline本身是拟合的样条曲线,每个点对线条都有影响,只是在众多的(直线)点之间的某个点的影响可能比较小,就像五弯矩方程的跨数,多了并不是不影响,而是影响小,效应可以忽略而已。
样条曲线直线段间的点可以删除,删除后可能在视觉上不影响,甚至也可能对实际使用不影响(误差在控制中),但实际完成这样的任务可能需要的不仅仅是判断4个点而已。
从我们道桥专业来说,经常也会拿到来自园林、景观等专业的“手绘”图纸,实际表达就是spline的随意曲线,对于实际使用而言,并不是去点,而是直接使用圆弧拟合,也只有这样,才能真正地放样到实地上。

点评

从可能存在连续的直线段样条曲线来看,可以认清和理解SPLINE的数据,既然有这样的样条的存在,也就存在控制点简化的需求。这样的讨论和解决方案我觉得是有意义的,你说尼,长老。 你说的圆弧模拟SPLINE,我倒是  详情 回复 发表于 2014-11-4 22:05
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 264个

财富等级: 日进斗金

发表于 2014-11-4 21:51:22 来自手机 | 显示全部楼层
对line获取spline后生成看看有几个controlPoint

点评

单独一根线,转成SPLINE是两个控制点, 如果是在弯曲的SPLINE线上,增加一条直线,这条直线就受约束了,就有4个点。  详情 回复 发表于 2014-11-4 23:11
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-11-4 22:05:51 | 显示全部楼层
本帖最后由 newer 于 2014-11-4 22:07 编辑
ll_j 发表于 2014-11-4 21:47
不是几个控制点的问题,学工程力学的大概都知道三弯矩方程和五弯矩方程,spline本身是拟合的样条曲线,每 ...

从可能存在连续的直线段样条曲线来看,可以认清和理解SPLINE的数据,既然有这样的样条的存在,也就存在控制点简化的需求。这样的讨论和解决方案我觉得是有意义的,你说尼,长老。


你说的圆弧模拟SPLINE,我倒是前几天写过一个,等完善下发上来,所有的圆弧都是一阶导数连续的,也就是说所有的圆弧都是光滑连接起来的。需要完善的地方就是尽量的想让控制点少,也就是让圆弧数少,不知道长老有什么高见?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-11-4 23:11:50 | 显示全部楼层
iLisp 发表于 2014-11-4 21:51
对line获取spline后生成看看有几个controlPoint

单独一根线,转成SPLINE是两个控制点,

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-11-4 23:50:11 | 显示全部楼层
本帖最后由 newer 于 2014-11-4 23:53 编辑

试试程序
要2013+版本才行。
BaiduShurufa_2014-11-4_23-48-39.png

  1. (defun c:tt ()
  2.   (if (setq e (car (xdrx_entsel "\n选取要处理的SPLINE<退出>:" '((0 .
  3.                                                                    "SPLINE"
  4.                                                                 )
  5.                                 )
  6.                    )
  7.               )
  8.       )
  9.     (progn
  10.       (setq ctrls (xdrx_getpropertyvalue e "controlpoints"))
  11.       (setq ctrls1 ctrls)
  12.       (setq i 0)
  13.       (while (and ctrls1 (cadr ctrls1)(caddr ctrls1)(cadddr ctrls1))
  14.         (setq p1 (car ctrls1))
  15.         (while (and
  16.                  (setq temp (cdr temp))
  17.                  (setq p2 (car temp))
  18.                  (setq p3 (cadr temp))
  19.                  (setq p4 (caddr temp))
  20.                  (xdrx_curve_getparamatpoint e p1)
  21.                  (xdrx_curve_getparamatpoint e p2)
  22.                  (xdrx_curve_getparamatpoint e p3)
  23.                  (xdrx_curve_getparamatpoint e p4)
  24.                  (equal '(0. 0. 0.) (xdrx_vector_crossproduct (mapcar '- p1 p2)(mapcar '- p2 p3))1e-3) ;;向量叉积=0 共线
  25.                )
  26.           (xdrx_setpropertyvalue e "removeControlPointAt" (+ 1 i))
  27.           (setq ctrls1 (xd::list:removeE p2 ctrls1 nil))
  28.           (setq temp (xd::list:removeE p2 temp nil))
  29.         )
  30.         (setq ctrls1 (cdr ctrls1))
  31.       )
  32.     )
  33.   )
  34.   (princ)
  35. )


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

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2014-11-5 10:58:09 | 显示全部楼层
newer 发表于 2014-11-4 23:11
单独一根线,转成SPLINE是两个控制点,

如果是在弯曲的SPLINE线上,增加一条直线,这条直线就受约束了 ...

看看我夸张的表述:
22222.jpg

整条样条曲线自身有一个“张力”,任何点都是一个“约束”,删除任一个点都是有影响的。
但对工程应用而言,就是怎样保证在删除点(简化约束)后,精度还能满足使用要求,这就需要在简化是有一个判断,而实际上,工程中使用spline(样条曲线),本身就是一种“粗糙”的拟合。

点评

长老你这直线是怎么画出来的? 另外,你少删除一个顶点试试,如果是正确的方法画的直线,那你删多了。  详情 回复 发表于 2014-11-5 11:43
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-11-5 11:43:40 | 显示全部楼层
ll_j 发表于 2014-11-5 10:58
看看我夸张的表述:

长老你这直线是怎么画出来的? 另外,你少删除一个顶点试试,如果是正确的方法画的直线,那你删多了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2014-11-5 12:39:37 | 显示全部楼层
newer 发表于 2014-11-5 11:43
长老你这直线是怎么画出来的? 另外,你少删除一个顶点试试,如果是正确的方法画的直线,那你删多了。

我这是随意画的直线,十等分点,为了表现“张力”,故意画成这样张口的,右面的左面的拷贝。样条曲线是画出来的,我这里没有装晓东api,无法删除,只能重画。
控制spline样条曲线的除了控制点以外,还有起终点的切线方向,这些都是采用默认的,当两个点画出以后,这个方向也就定了,所以,两边样条曲线除了控制点以外,其余条件可以视为相同的。
至于少删几个点的情况,变化仍是有的,只是差别会小一些。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8个

财富等级: 恭喜发财

发表于 2015-1-8 00:26:25 | 显示全部楼层
这种Spl*线在机械中很麻烦,一般都需要重新编辑,常用的方法是在sP*上线,一定长度等分点,然后3点建弧。麻烦的很。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-27 19:57 , Processed in 0.240215 second(s), 64 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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