找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 6981|回复: 6

[越飞越高] 求椭圆上任意一点P的曲率半径

[复制链接]

已领礼包: 8121个

财富等级: 富甲天下

发表于 2013-5-8 18:26:23 | 显示全部楼层 |阅读模式

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

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

×
求椭圆上任意一点P的曲率半径。

实际上是求椭圆上的点的转弯半径。

my234.jpg

QJCHEN的图片:

焦点半径.gif

这是几何作图法:

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

已领礼包: 8121个

财富等级: 富甲天下

 楼主| 发表于 2013-5-8 18:30:56 | 显示全部楼层

一般称 Image383.gif 为曲线在某一点的曲率半径。
几何意义(T5-29)如图为在该点做曲线的法线(在凹的一侧),在法线上取圆心,以ρ为半径做圆,则此圆称为该点处的曲率圆。曲率圆与该点有相同的曲率,切线及一阶、两阶稻树。
应用举例:求 Image384.gif 上任一点的曲率及曲率半径(T5-30)
解:由于: Image385.gif
所以: Image386.gif Image387.gif


我这个画椭圆曲率半径的方法其实可以推广到二次曲线中去,我通过验证,证明了Qjchen和我得到的结果是一样的。


点评

ARX曲线实体的二阶导数向量的长度就是曲率半径。下面代码画出拾取点的曲率圆  详情 回复 发表于 2016-6-27 14:34
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2016-6-27 14:34:52 | 显示全部楼层
Highflybird 发表于 2013-5-8 18:30
一般称为曲线在某一点的曲率半径。
几何意义(T5-29)如图为在该点做曲线的法线(在凹的一侧),在法线 ...

ARX曲线实体的二阶导数向量的长度就是曲率半径。下面代码画出拾取点的曲率圆

  1. (defun c:tt()
  2.    (if (setq e (xdrx_entsel "\n拾取椭圆:" '((0 . "ellipse"))))
  3.      (progn
  4.         (setq p (trans (cadr e) 1 0))
  5.         (setq second (xdrx_getpropertyvalue (car e) "getsecondderiv" p t)
  6.               first (xdrx_getpropertyvalue (car e) "getfirstderiv" p)
  7.         )
  8.         (xdrx_prompt "\n曲率半径是:" (xdrx_vector_length second))
  9.         (setq r (xdrx_vector_length second)
  10.               cen (mapcar '+ p (xdrx_vector_product (xdrx_vector_perpvector first) r))
  11.         )
  12.         (xdrx_circle_make cen r)
  13.      )
  14.    )
  15.    (princ)
  16. )


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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2016-6-27 14:36:46 | 显示全部楼层
每度一个的曲率圆的样子:

搜狗截图20160627142803.png

  1. (defun c:tt ()
  2.   (if (setq e (car (xdrx_entsel "\n拾取椭圆:" '((0 . "ellipse")))))
  3.     (progn
  4.       (setq pts (xdrx_getsamplept e 360))
  5.       (mapcar
  6.         '(lambda (x)
  7.            (setq second (xdrx_getpropertyvalue e "getsecondderiv" x t)
  8.                  first (xdrx_getpropertyvalue e "getfirstderiv" x)
  9.            )
  10.            (setq r (xdrx_vector_length second)
  11.                  cen (mapcar
  12.                        '+
  13.                        x
  14.                        (xdrx_vector_product (xdrx_vector_perpvector first) r)
  15.                      )
  16.            )
  17.            (xdrx_circle_make cen r)
  18.          )
  19.         pts
  20.       )
  21.     )
  22.   )
  23.   (princ)
  24. )


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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2016-6-27 14:41:45 | 显示全部楼层
椭圆曲率圆圆心轨迹,漂亮的蝴蝶结。
搜狗截图20160627143525.png
  1. (defun c:tt (/ pts1)
  2.   (if (setq e (car (xdrx_entsel "\n拾取椭圆:" '((0 . "ellipse")))))
  3.     (progn
  4.       (setq pts (xdrx_getsamplept e 360))
  5.       (mapcar
  6.         '(lambda (x)
  7.            (setq second (xdrx_getpropertyvalue e "getsecondderiv" x t)
  8.                  first (xdrx_getpropertyvalue e "getfirstderiv" x)
  9.            )
  10.            (setq r (xdrx_vector_length second)
  11.                  cen (mapcar
  12.                        '+
  13.                        x
  14.                        (xdrx_vector_product (xdrx_vector_perpvector first) r)
  15.                      )
  16.            )
  17.            (setq pts1 (cons cen pts1))
  18.          )
  19.         pts
  20.       )
  21.       (xdrx_polyline_make pts1 t)
  22.     )
  23.   )
  24.   (princ)
  25. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8121个

财富等级: 富甲天下

 楼主| 发表于 2017-8-11 11:45:56 | 显示全部楼层

注意!!!!!!  SecondDeriv不是代表曲线的曲率!!!!所以XDSoft的求得的不是椭圆的曲率。
椭圆的曲率应通过下面方法求解:
  1. ;;;=============================================================
  2. ;;;功能: 获取椭圆上一点处的曲率和转弯半径                       
  3. ;;;参数: 椭圆实体和椭圆上的一点                                 
  4. ;;;返回: 此处离心圆圆心、转弯半径及其曲率(离心率)            
  5. ;;;说明: 如果要在CAD中几何作图,可以参考此贴:                  
  6. ;;;      http://bbs.mjtd.com/thread-62980-1-1.html              
  7. ;;;=============================================================
  8. (defun ELL:GetCurvature (en pt / dxf maj rat a b p par x y k v1 v2 rad cen)
  9.   (setq dxf (entget en))
  10.   (setq maj (cdr (assoc 11 dxf)))
  11.   (setq rat (cdr (assoc 40 dxf)))
  12.   (setq a   (distance '(0 0) maj))
  13.   (setq b   (* a rat))
  14.   (setq p   (vlax-curve-getclosestpointto en pt))
  15.   (setq par (vlax-curve-getParamAtPoint en p))
  16.   (setq v1  (vlax-curve-getFirstDeriv en par))
  17.   (setq v2  (list (- (cadr v1)) (car v1) (caddr v1)))
  18.   (setq x   (* a (cos par)))
  19.   (setq y   (* b (sin par)))
  20.   (setq k   (expt rat 4))
  21.   (setq rad (/ (expt (+ (* y y) (* k x x)) 1.5) rat rat b b))
  22.   (setq cen (polar p (angle '(0 0 0) v2) rad))
  23.   (list cen rad (/ 1 rad))
  24. )




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

使用道具 举报

已领礼包: 8121个

财富等级: 富甲天下

 楼主| 发表于 2017-8-11 12:15:30 | 显示全部楼层
ell-1.jpg
这个才是椭圆的曲率中心轨迹,它不是蝴蝶结。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 00:42 , Processed in 0.227144 second(s), 51 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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