找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 7295|回复: 62

[求助] 求spline上距某点最近点的切向

[复制链接]
发表于 2014-8-8 15:11:37 | 显示全部楼层 |阅读模式

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

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

×
已知一个点A及一条spline曲线 spl,我先用getClosestPointTo(),求得spl上距A的最近点B,再根据B,利用getFirstDeriv(),想求得spl在B处的切向.但是后一个函数会出错。错误提示是:eGeneralModelingFailure

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

已领礼包: 145个

财富等级: 日进斗金

发表于 2014-8-8 15:34:01 | 显示全部楼层
把你完整的代码都贴上来吧。

点评

部分代码如下: AcGePoint3d pt1,pt2,ptcen(cen[0],cen[1],0.0); spl1->getClosestPointTo(ptcen,pt1); spl2->getClosestPointTo(ptcen,pt2); AcGeVector3d pt1tangent,pt2tangent; Acad::E  详情 回复 发表于 2014-8-8 15:47
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2014-8-8 15:41:06 | 显示全部楼层
试了XDRX_API,没问题

命令: (setq p1 (xdrx_curve_getclosestpoint (entlast) p))
(1042.29 584.289 0.0)

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

使用道具 举报

 楼主| 发表于 2014-8-8 15:47:48 | 显示全部楼层
XDSoft 发表于 2014-8-8 15:34
把你完整的代码都贴上来吧。

  部分代码如下:      
        AcGePoint3d pt1,pt2,ptcen(cen[0],cen[1],0.0);
        spl1->getClosestPointTo(ptcen,pt1);
        spl2->getClosestPointTo(ptcen,pt2);
        AcGeVector3d pt1tangent,pt2tangent;
        Acad::ErrorStatus es1 = spl1->getFirstDeriv(pt1,pt1tangent);
        Acad::ErrorStatus es2 = spl2->getFirstDeriv(pt2,pt2tangent);

getFirstDeriv()有两种形式,一种输入参数是点,另一种是param.
如果是先由pt1, pt2求param1,param2,再求切向不会出错.

点评

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-8-8 15:56:36 | 显示全部楼层
mcfield 发表于 2014-8-8 15:47
部分代码如下:      
        AcGePoint3d pt1,pt2,ptcen(cen[0],cen[1],0.0);
        spl1->getClosestPoi ...


你试试把捕捉关上看看。



点评

这是arx的操作,应该与画图中的捕捉没关系吧.  详情 回复 发表于 2014-8-8 16:22
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-8 16:22:58 | 显示全部楼层
newer 发表于 2014-8-8 15:56
你试试把捕捉关上看看。

这是arx的操作,应该与画图中的捕捉没关系吧.

点评

你试试看,API测试,端点捕捉打开的时候,任何点都最近点都返回的是距离最近的端点。你的出错看应该是点没在SPL线上。  详情 回复 发表于 2014-8-8 16:26
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-8-8 16:26:12 | 显示全部楼层
mcfield 发表于 2014-8-8 16:22
这是arx的操作,应该与画图中的捕捉没关系吧.

你试试看,API测试,端点捕捉打开的时候,任何点都最近点都返回的是距离最近的端点。你的出错看应该是点没在SPL线上。

点评

点在spl上.如图 青色的线是spl.一共有三个圆点.最左边的圆点是点A, 最右边的点是直接求最近点得到的。中间的这个点是得到最近点后,再求param,再根据param反求点得到的。两个点均在spl上。 [attachimg]9030[/atta  详情 回复 发表于 2014-8-8 17:47
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-8 17:47:20 | 显示全部楼层
newer 发表于 2014-8-8 16:26
你试试看,API测试,端点捕捉打开的时候,任何点都最近点都返回的是距离最近的端点。你的出错看应该是点 ...

点在spl上.如图 青色的线是spl.一共有三个圆点.最左边的圆点是点A, 最右边的点是直接求最近点得到的。中间的这个点是得到最近点后,再求param,再根据param反求点得到的。两个点均在spl上。
123.jpg

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

使用道具 举报

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

使用道具 举报

发表于 2014-8-8 19:22:57 | 显示全部楼层
本帖最后由 风树 于 2014-8-8 19:28 编辑

如果不是对象捕捉的问题,
那就这样想:arx求最近点的函数具有我们现在未知的一些约束条件。
可能是哪方面呢?
不清楚,
假如对该函数具体实现及算法未明的情况下猜测:
对于你实例中的例子,
1.拟合点数量?
2.拟合方式?
3.A点相对于曲线的位置特征?
4.是曲线规模过大还是结构相对复杂导致的?
5.是否一定要用该函数?不用效率上有没有特别要求?
6.
如果一定要用该函数,将原规模的曲线"降点复杂度"是否可行?
7."按比例缩放后"是否也出现这种问题??

点评

发现了一个特征。还是那个图中,最右边点(最近点)和中间点(反求点)连线与中间点处的切线是垂直的。或许可以认为,反求点是最近点某种意义上的最近点。  详情 回复 发表于 2014-8-9 20:18
不用这个函数,也没别的函数可用。 其他几项我再看看。 谢谢你的回答。  详情 回复 发表于 2014-8-9 19:09
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-9 19:09:56 | 显示全部楼层
风树 发表于 2014-8-8 19:22
如果不是对象捕捉的问题,
那就这样想:arx求最近点的函数具有我们现在未知的一些约束条件。
可能是哪方 ...

不用这个函数,也没别的函数可用。
其他几项我再看看。

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

使用道具 举报

 楼主| 发表于 2014-8-9 20:18:08 | 显示全部楼层
风树 发表于 2014-8-8 19:22
如果不是对象捕捉的问题,
那就这样想:arx求最近点的函数具有我们现在未知的一些约束条件。
可能是哪方 ...

发现了一个特征。还是那个图中,最右边点(最近点)和中间点(反求点)连线与中间点处的切线是垂直的。或许可以认为,反求点是最近点某种意义上的最近点。

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

使用道具 举报

发表于 2014-8-9 20:38:08 | 显示全部楼层
你那条样条曲线长度是不是很长?是用什么方式拟合的?在图上拟合或控制的点位在哪里?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-8-9 20:44:43 | 显示全部楼层
试一下将样条曲线转换成acge对应类再作处理吧,记忆中提供了更多可处理的函数
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-8-9 20:51:38 | 显示全部楼层
建议提供个例子文件给大家看看吧
这应该是一个普偏的问题,也许答案很简单

点评

附件中是一个dxf文件。与上面的例子不同,更为清晰。里面有三个点ABC。分别为已知点,最近点及反求点。 里面的spline由13个拟合点,及起点终点的切向量拟合,用弦的形式参数节点化。 黄线是C处的切线,可以看到它  详情 回复 发表于 2014-8-10 11:15
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-10 05:39 , Processed in 0.451370 second(s), 69 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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