找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: Highflybird

[飞鸟集] 曲线的转弯半径和曲率

[复制链接]

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-8-12 18:38:46 | 显示全部楼层
vlax-curve-getSecondDeriv
vlax-curve-getFirstDeriv
这两个函数是什么意思呢?


这个是你提出的问题,你接着提供的代码也是为了说这个函数的意义的,你一楼的代码解释了 vlax-curve-getSecondDeriv 这个到底是什么意思了吗? 二阶导数大家都知道,可他的返回值向量为什么带长度,长度值代表什么意思,你探讨了吗? 你只写了个求转弯半径的就能说明这个函数的意思了? 这仅仅是一个应用,我用这个函数画个曲线的法线,一样也是这个函数的用法例子。 可有助于研究这个函数的返回值到底什么意义吗? 为什么它不是单位向量,为什么圆的实体,它的长度是半径值,那对于椭圆和SPLINE,它的长度又代表什么? 这才是值得研究的地方。而你有这个能力带大家去深入,而不是纠结于影响结论的地方。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8121个

财富等级: 富甲天下

 楼主| 发表于 2017-8-12 20:42:21 | 显示全部楼层


我解释vlax-curve-getSecondDeriv还没够么? 你究竟有没有看到我的帖子? 我一楼解释的清清楚楚。
如果把FirstDeriv这个返回值(一个向量)代表物理学的速度,那么SecondDeriv就是代表加速度。
再说 你说“可他的返回值向量为什么带长度”,明明vlax-curve-GetSecondDeriv仅仅是返回一个数值,那就是一个三维点,代表一个向量,哪里还返回另外带什么长度的值?任何向量都是有长度的啊。   
我的15#楼,16#楼,22#楼都阐明了这个向量。如果你非要说这个长度,那么从物理学的意思来说,就是加速度的数值大小。在圆形的时候,加速度就是向心力,AutoCAD中恰恰等于圆的半径。在直线段的时候,代表做匀速运动,因而加速度大小为0 ,这个SecondDeriv也为零向量。所以,我就很纳闷,你还要研究这个长度干嘛呢? 我认为这个向量的长度不是值得研究的地方。往这个方向研究才是错误的。

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-8-12 21:30:47 | 显示全部楼层

[quote]代表一个向量,哪里还返回另外带什么长度的值?[/qutoe]

你的主题上来就说,这两个函数是什么含义,如果仅仅是想说他们是一阶导数和二阶导数,看过帮助的都知道,那你写的代码,是应用。 而不是论证。也就是你的代码没去说明这两个函数有什么含义。理会错你想表达的了,你是用这两个函数,我以为你要深入研究背后的。

上面讨论,什么时候说过这个函数还要返回一个长度值,说的是返回的这个向量的长度,为什么对圆 ,向量的长度是半径,你认为 数学计算的值就是这个吗? 不是ADESK在单位向量的基础上人为的把半径的长度加到这个向量里面? 我想和你讨论这个长度值是什么,ADESK是把什么的长度值写到这个向量里面了。

为什么返回的向量不是一个单位向量,对于切线和法线本身,单位向量就足够描述。

我想和你说的是,这两个函数返回的向量的长度,有ADESK付给的额外含义。至于是什么,你没兴趣研究不代表事实不存在。


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

使用道具 举报

已领礼包: 8121个

财富等级: 富甲天下

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

使用道具 举报

已领礼包: 8121个

财富等级: 富甲天下

 楼主| 发表于 2017-8-12 22:05:28 | 显示全部楼层
我一条条回复你好吧:
你的主题上来就说,这两个函数是什么含义,如果仅仅是想说他们是一阶导数和二阶导数,看过帮助的都知道,那你写的代码,是应用。 而不是论证。也就是你的代码没去说明这两个函数有什么含义。理会错你想表达的了,你是用这两个函数,我以为你要深入研究背后的。

---回复,我就是要研究背后的,因为这个一阶导数和二阶导数,我们就可以利用它来计算离心半径和圆心,当然还有其他的。譬如曲线的方向,曲线的切线方向等等。


上面讨论,什么时候说过这个函数还要返回一个长度值,说的是返回的这个向量的长度,为什么对圆 ,向量的长度是半径,你认为 数学计算的值就是这个吗? 不是ADESK在单位向量的基础上人为的把半径的长度加到这个向量里面? 我想和你讨论这个长度值是什么,ADESK是把什么的长度值写到这个向量里面了。

--回复:我认为不是autodesk人为加进去的,它这个长度值就是 一阶导数和二阶导数向量的长度值!!!在物理学的意义我已经在楼上说明。

为什么返回的向量不是一个单位向量,对于切线和法线本身,单位向量就足够描述。
--回复:就像速度和加速度有大小,有方向,所以这个地方不能用单位向量描述。

我想和你说的是,这两个函数返回的向量的长度,有ADESK付给的额外含义。至于是什么,你没兴趣研究不代表事实不存在。
--回复:如果你手上有Autodesk公司的内部资料,说这个地方有什么其他含义,请贴出原文。我们没法去猜测什么额外含义。如果Autodesk公司确实有这样的内部资料说这个二阶导数的长度就代表曲率半径,我相信那绝对不是专业人士写的。

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-8-13 00:27:20 | 显示全部楼层
本帖最后由 newer 于 2017-8-13 00:38 编辑

就回复你一个吧

--回复:如果你手上有Autodesk公司的内部资料,说这个地方有什么其他含义,请贴出原文。我们没法去猜测什么额外含义。如果Autodesk公司确实有这样的内部资料说这个二阶导数的长度就代表曲率半径,我相信那绝对不是专业人士写的。

圆的一阶导数 firstDeriv ,得到的向量,它的长度等于圆的半径。这个你不否认吧。

为什么这个向量的长度要等于圆的半径? 没讨论这个帖子前,你可能还没注意吧。你从数学角度算圆的切线矢量,向量长度会一定等于圆的半径?

为什么它相等了,是因为ADESK给你加进去的,通过向量可以得到更多的信息。

从上面出发,对SPLINE,一阶导数和二阶导数向量的长度也不是单位的,公开文献虽然没说,但这个长度一定是“代表”什么的,这符合逻辑的,也符合推理的。
我和你探讨的就是这个向量长度代表什么,去研究。 你非得扣住字眼,是不是曲率半径,上面帖子和你说了,可能是什么其他的名词,代表着什么。

我想和你去探讨这个向量长度代表的是什么。暂时不知道不可怕,怕的是没有探究精神。ADESK有很多BUG,也有很多隐藏的东西,这些不靠长期深入的写代码和探究是找不到的。


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

使用道具 举报

已领礼包: 8121个

财富等级: 富甲天下

 楼主| 发表于 2017-8-13 08:40:23 | 显示全部楼层
本帖最后由 Highflybird 于 2017-8-13 08:42 编辑

你从数学角度算圆的切线矢量,向量长度会一定等于圆的半径?

你仔细看看15#楼,对圆来说,firstDeriv从数学角度推导就是推出向量长度等于圆的半径!这个不是什么人为添加进去的。

对圆来说,firstDeriv和SecondDeriv长度都是等于半径,这个是可以从数学角度推出来的。 你老在强调autodesk加进去什么东西,
我说你探讨方向错了,你就说我没有探究精神。我也是服了。
拜托你仔细看看我的帖子吧。


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

使用道具 举报

已领礼包: 1861个

财富等级: 堆金积玉

发表于 2017-8-14 09:51:39 | 显示全部楼层
看来需要重温曲线函数的曲率半径知识了……

平面几何的复向量方法.pdf

2.25 MB, 下载次数: 32, 下载积分: D豆 -1 , 活跃度 1

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

使用道具 举报

已领礼包: 8121个

财富等级: 富甲天下

 楼主| 发表于 2017-8-14 11:21:08 | 显示全部楼层
本帖最后由 Highflybird 于 2017-8-14 11:22 编辑

对我的代码稍微修正一下:
  1. ;;;=============================================================
  2. ;;; 一般平面曲线参数方程的曲率离心公式                          
  3. ;;; 功能: 获取曲线上一点处的离心半径和离心圆圆心               
  4. ;;; 参数: 曲线实体和曲线上的一点                                
  5. ;;; 返回: 此处离心圆圆心、离心半径                              
  6. ;;;=============================================================
  7. (defun CUR:GetCurvature (en pt / ob px v1 v2 v3 x1 y1 x2 y2 cen rad d1 d2)
  8.   (setq ob (vlax-ename->vla-object en))
  9.   (setq pt (vlax-curve-getclosestpointto en pt))                ;保证此点在曲线上
  10.   (setq px (vlax-curve-getParamAtPoint en pt))                  ;此点的曲线参数
  11.   (setq v1 (vlax-curve-getFirstDeriv en px))                    ;此点的一阶矢量
  12.   (setq v2 (vlax-curve-getSecondDeriv en px))                        ;此点的二阶矢量
  13.   (setq v3 (list (- (cadr v1)) (car v1) (caddr v1)))            ;此点的切线矢量
  14.   (setq x1 (car  v1))                                           ;一阶导数的 X值
  15.   (setq y1 (cadr v1))                                                ;一阶导数的 Y值
  16.   (setq x2 (car  v2))                                                ;二阶导数的 X值
  17.   (setq y2 (cadr v2))                                                ;二阶导数的 Y值
  18.   (setq d1 (expt (+ (* y1 y1) (* x1 x1)) 1.5))           
  19.   (setq d2 (- (* x1 y2) (* x2 y1)))                                ;转弯内外的判定
  20.   (if (/= d2 0)                                                 ;如果不为直线段
  21.     (progn
  22.       (setq rad (/ d1 d2))
  23.       (if (vlax-method-applicable-p ob 'GetBulge)               ;如果为多段线(含圆弧)
  24.         (if (< (vla-GetBulge ob (fix px)) 0)                        ;如果此段凸度小于0
  25.           (setq rad (- rad))                                       
  26.         )
  27.       )
  28.       (list (polar pt (angle '(0 0 0) v3) rad) (abs rad))        ;圆心及半径
  29.     )
  30.   )
  31. )




主要针对于有圆弧的多段线,如果此段凸度小于0,圆心位置方向应当要反向。
另外 对26#楼的代码有两点建议:
1,vlax-curve-函数的参数可以直接用图元名,不用转化,而且这样效率更高。
2.
  •   r    (if (zerop d)

  •                                
    登录/注册后可看大图
                   0.0

  •                                
    登录/注册后可看大图
                   (/ k d)

  •                                
    登录/注册后可看大图
                 )


这个地方当d为0的时候,实际是曲率为0,而不是曲率半径为0,半径实际为无穷大,曲率为0,意味着这段为直线段。

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 10:35 , Processed in 0.213890 second(s), 45 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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