让微积分穿梭于工作与学习之间(17):圆弧直线在端点处的切线及其在趋于直线时的极限

本文主要是介绍让微积分穿梭于工作与学习之间(17):圆弧直线在端点处的切线及其在趋于直线时的极限,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

对CAD圆弧直线不了解的朋友可以先阅读以下博文:

https://blog.csdn.net/iloveas2014/article/details/103837857

https://blog.csdn.net/iloveas2014/article/details/103848611

在上篇的末尾,我提到了线条端点处的切线在寻找封闭图形中的重要性,但没给出任何解释,为此我转发一篇博文。

https://blog.csdn.net/keng_s/article/details/67102867

大家在阅读的过程中可以看到其中的一步是要对线条进行角度排序。对于直线线段来说,角度取两点的连线即可,而曲线则不能再取连线了。大家看下面的图。

我们想要把AB,弧AC,AD三条线在A端点处按顺时针排序,正确的结果是AB,AC,AD,但若用连线AC来作为排序依据的话,那么顺序就变成AC,AB,AD了。

 

所以要改用弧AC在A点处的切线AC'来计算角度,如下图所示。

下面我们来尝试计算圆弧直线在端点上的切线斜率,显然当圆弧的凸度趋于0时,圆弧变为直线,切线跟连线的方向一致,如下面的动图所示。

求切线斜率,相信大家都会想到用求导的方法,不过圆弧是多值函数,所以计算的方法也特殊一些。

总的来说,要计算这种曲线的切线及其趋于直线时的极限,我想到的方法有3种:

1 利用圆弧切线的几何性质——跟切点上的半径垂直进行计算,然后计算bulge趋于0时的极限

2 对圆弧直线的一般方程进行隐函数的求导

3 把圆弧直线的一般方程看作二元函数,然后求出其偏导数,再根据以下公式求得y对x的导数

方法2和方法3其实都是隐函数的求导,只是3更为简便,同时也更难理解,毕竟涉及了二元函数。

此处我们使用方法2。感兴趣的朋友可以自行用方法1或者方法3来推导,也可以留言跟我讨论。

我们把二元二次方程的一般式搬过来,在最普通的情况下进行求导。然后,圆和直线都不包含xy项,可以省略

两侧对x进行求导,得到

然后我们把圆弧曲线中对应的系数代进去

至此,圆弧直线在线上任一点(x,y)的切线斜率就算出来了。

然而这个式子还是蛮复杂的,但是我们用得最多的一般都是起点和终点,那么我们分别把(sx,sy)和(ex,ey)代进去算一下。

看着还是蛮复杂,但是起点和终点都是常量,因此在编程的时候我们可以把起点和终点的差值用一个向量(Δx,Δy)存起来从而让代码更清晰。那么这里的公式也能简写为

这样就简洁多了,类似地,终点的导数结果为

y's,y'e这两个导数值的意义是圆弧在S和E处的切线斜率,如下图的红线和蓝线所示。

然后我们算一下它们在b趋于0的时候等于多少。

它们在凸度趋于0的时候都等于起点和终点连线的斜率,跟我们的期望完全一致。

然而问题并没到此结束,因为算出来的切线没有方向,而进行角度排序的时候我们需要给出的是指定方向的切线向量,如下图所示,我们要的是AC'和水平线的夹角而非AC''

切线斜率并没有给出它们的方向,所以在项目里我用的是方法1,从而更好地对x和y的方向分别进行把控。

那么此处我就不在推导的情况下给出切线向量的结果,其实只是把导数结果拆出来,并且根据不同情况对xy给出不同的符号

起点的切线向量为

终点的切线向量为

跟导数的分子分母对照下,可以发现,起点刚好是把分子分母拆开,而终点则是把分子分母拆开后再分别取反。所以说这地方其实还是存在着很微妙的规律,就留给读者们慢慢品味了。

下篇我会给大家讲解圆弧直线的等分公式及其在趋于直线时的极限,敬请期待!

 

 

这篇关于让微积分穿梭于工作与学习之间(17):圆弧直线在端点处的切线及其在趋于直线时的极限的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/382297

相关文章

C#利用Free Spire.XLS for .NET复制Excel工作表

《C#利用FreeSpire.XLSfor.NET复制Excel工作表》在日常的.NET开发中,我们经常需要操作Excel文件,本文将详细介绍C#如何使用FreeSpire.XLSfor.NET... 目录1. 环境准备2. 核心功能3. android示例代码3.1 在同一工作簿内复制工作表3.2 在不同

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

Java中数组与栈和堆之间的关系说明

《Java中数组与栈和堆之间的关系说明》文章讲解了Java数组的初始化方式、内存存储机制、引用传递特性及遍历、排序、拷贝技巧,强调引用数据类型方法调用时形参可能修改实参,但需注意引用指向单一对象的特性... 目录Java中数组与栈和堆的关系遍历数组接下来是一些编程小技巧总结Java中数组与栈和堆的关系关于

setsid 命令工作原理和使用案例介绍

《setsid命令工作原理和使用案例介绍》setsid命令在Linux中创建独立会话,使进程脱离终端运行,适用于守护进程和后台任务,通过重定向输出和确保权限,可有效管理长时间运行的进程,本文给大家介... 目录setsid 命令介绍和使用案例基本介绍基本语法主要特点命令参数使用案例1. 在后台运行命令2.

在Java中实现线程之间的数据共享的几种方式总结

《在Java中实现线程之间的数据共享的几种方式总结》在Java中实现线程间数据共享是并发编程的核心需求,但需要谨慎处理同步问题以避免竞态条件,本文通过代码示例给大家介绍了几种主要实现方式及其最佳实践,... 目录1. 共享变量与同步机制2. 轻量级通信机制3. 线程安全容器4. 线程局部变量(ThreadL

Java中的xxl-job调度器线程池工作机制

《Java中的xxl-job调度器线程池工作机制》xxl-job通过快慢线程池分离短时与长时任务,动态降级超时任务至慢池,结合异步触发和资源隔离机制,提升高频调度的性能与稳定性,支撑高并发场景下的可靠... 目录⚙️ 一、调度器线程池的核心设计 二、线程池的工作流程 三、线程池配置参数与优化 四、总结:线程

Javaee多线程之进程和线程之间的区别和联系(最新整理)

《Javaee多线程之进程和线程之间的区别和联系(最新整理)》进程是资源分配单位,线程是调度执行单位,共享资源更高效,创建线程五种方式:继承Thread、Runnable接口、匿名类、lambda,r... 目录进程和线程进程线程进程和线程的区别创建线程的五种写法继承Thread,重写run实现Runnab