离散点的曲率计算

描述

我有一个点集,里面都是[x,y]这样的二维点,这个点集能形成一个曲线。
在并不想去求这个曲线的表达式时,怎么得到某一点的曲率呢

相关知识

曲率的定义是:
针对曲线上某个点的切线方向角对弧长的转动率,而曲率的倒数就是曲率半径
K    =    ∣ Δ θ l ∣    =    ∣ 1 r ∣    K\; =\; \left| \frac{\Delta \theta }{l} \right|\; =\; \left| \frac{1}{r} \right|\; K= lΔθ = r1

式子中 K K K代表的就是曲率, Δ θ Δθ Δθ代表的就是切线方向角的变化, l l l代表弧长, r r r代表的就是曲率半径

式子也挺好看懂的。我们都知道圆的周长是 2 π r 2πr 2πr,任意一段弧长 的计算方式是
l    =    θ    ⋅    r l\; =\; \theta \; \cdot \; r l=θr

式子中的 θ θ θ代表的就是弧长对应的角度

解决

我有一段圆弧ab,对应的圆内角 θ θ θ是啥我不用解释了吧,初中数学
在这里插入图片描述

那么到这儿也比较简单了,如果离散点中,ab就是相邻的两个点,那么a点(或者b点或者随便哪个点)的曲率怎么计算呢

我们设要求的点 p p p,在点集 P P P 的位置是 i i i ,点集实际上是 0 0 0 n n n 的一系列二维点,那么点p的曲率 K i K_{i} Ki的表达式
K i    =    ∣ arctan ⁡ ( y i + 2    −    y i + 1 x i + 2    −    x i + 1 )    −    arctan ⁡ ( y i + 1    −    y i x i + 1    −    x i ) ( x i + 1    −    x i ) 2 + ( y i + 1    −    y i ) 2 ∣ K_{i\; }=\; \left| \frac{\arctan \left( \frac{y_{i+2}\; -\; y_{i+1}}{x_{i+2}\; -\; x_{i+1}} \right)\; -\; \arctan \left( \frac{y_{i+1}\; -\; y_{i}}{x_{i+1}\; -\; x_{i}} \right)}{\sqrt{\left( x_{i+1}\; -\; x_{i} \right)^{2}+\left( y_{i+1}\; -\; y_{i} \right)^{2}}} \right| Ki= (xi+1xi)2+(yi+1yi)2 arctan(xi+2xi+1yi+2yi+1)arctan(xi+1xiyi+1yi)

挺好理解的,下面的是两点之间的距离,上面是切线方向角之差,不解释啦

补充

上面计算方式写的很清楚了,但其实有个小小问题
假设我有100个点,按照上面的公式,第1个点到第98个点都是可以很快计算出来的。

但99个点和100个点,因为没有101和102两个点,这两个点的曲率是无法计算的。

解决办法也很简单:

  • 我使用离散点曲率计算,主要是在路径规划当中使用,我的这个离散点集在最后两个点上,实际上可以认为是路径终点,需要轨迹很平滑的。我的操作就是,将最后两个点的曲率,赋值成了倒数第三个点一样,问题应该不大。你可以根据自己的需求任意设置。
  • 如果你就是不想自己设定,非要计算的来。造102个点,使用前100个,造n+2个点,使用前n个。(挺无聊的解决办法哈)
  • 10
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
要使用MATLAB计算离散曲率半径,可以使用以下步骤: 1. 定义离散的坐标。在给定的MATLAB代码中,x0和y0分别表示离散的x坐标和y坐标。 2. 计算离散之间的间隔。使用diff函数计算x坐标间的间隔,然后将最后一个间隔复制到末尾,以确保向量长度一致。在给定的代码中,h1和h分别表示x坐标间的间隔。 3. 计算数值近似的一阶导数。使用gradient函数计算y坐标对x坐标的数值近似一阶导数。在给定的代码中,yapp1表示数值近似的一阶导数。 4. 计算数值近似的二阶导数。使用del2函数计算y坐标对x坐标的数值近似二阶导数。在给定的代码中,yapp2表示数值近似的二阶导数。 5. 计算曲率。使用以下公式计算曲率:k2 = abs(yapp2)./(1 + yapp1.^2).^(3/2)。在给定的代码中,k2表示曲率。 6. 绘制曲率曲线。使用plot函数绘制曲率曲线。在给定的代码中,plot(k2)绘制了曲率曲线。 7. 标注曲率最大。使用max函数找到曲率最大的索引,然后根据索引找到对应的x坐标和y坐标。在给定的代码中,maxFlag表示曲率最大的索引,x_max和y_max分别表示曲率最大的x坐标和y坐标。 8. 绘制带有标注的图像。使用plot函数绘制原始的离散图像,并使用plot函数绘制标注曲率最大的图像。 综上所述,以上是使用MATLAB求解离散曲率半径的步骤和方法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [计算离散曲率(matlab)](https://blog.csdn.net/weixin_40356612/article/details/125892886)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [PJCurvature:计算离散曲率](https://download.csdn.net/download/weixin_42140716/18412808)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值