让微积分穿梭于工作与学习之间(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

相关文章

Vue中组件之间传值的六种方式(完整版)

《Vue中组件之间传值的六种方式(完整版)》组件是vue.js最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用,针对不同的使用场景,如何选择行之有效的通信方式... 目录前言方法一、props/$emit1.父组件向子组件传值2.子组件向父组件传值(通过事件形式)方

Python实现PDF与多种图片格式之间互转(PNG, JPG, BMP, EMF, SVG)

《Python实现PDF与多种图片格式之间互转(PNG,JPG,BMP,EMF,SVG)》PDF和图片是我们日常生活和工作中常用的文件格式,有时候,我们可能需要将PDF和图片进行格式互转来满足... 目录一、介绍二、安装python库三、Python实现多种图片格式转PDF1、单张图片转换为PDF2、多张图

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

kotlin中的模块化结构组件及工作原理

《kotlin中的模块化结构组件及工作原理》本文介绍了Kotlin中模块化结构组件,包括ViewModel、LiveData、Room和Navigation的工作原理和基础使用,本文通过实例代码给大家... 目录ViewModel 工作原理LiveData 工作原理Room 工作原理Navigation 工

Java对象和JSON字符串之间的转换方法(全网最清晰)

《Java对象和JSON字符串之间的转换方法(全网最清晰)》:本文主要介绍如何在Java中使用Jackson库将对象转换为JSON字符串,并提供了一个简单的工具类示例,该工具类支持基本的转换功能,... 目录前言1. 引入 Jackson 依赖2. 创建 jsON 工具类3. 使用示例转换 Java 对象为

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

java父子线程之间实现共享传递数据

《java父子线程之间实现共享传递数据》本文介绍了Java中父子线程间共享传递数据的几种方法,包括ThreadLocal变量、并发集合和内存队列或消息队列,并提醒注意并发安全问题... 目录通过 ThreadLocal 变量共享数据通过并发集合共享数据通过内存队列或消息队列共享数据注意并发安全问题总结在 J

Java文件与Base64之间的转化方式

《Java文件与Base64之间的转化方式》这篇文章介绍了如何使用Java将文件(如图片、视频)转换为Base64编码,以及如何将Base64编码转换回文件,通过提供具体的工具类实现,作者希望帮助读者... 目录Java文件与Base64之间的转化1、文件转Base64工具类2、Base64转文件工具类3、

SSID究竟是什么? WiFi网络名称及工作方式解析

《SSID究竟是什么?WiFi网络名称及工作方式解析》SID可以看作是无线网络的名称,类似于有线网络中的网络名称或者路由器的名称,在无线网络中,设备通过SSID来识别和连接到特定的无线网络... 当提到 Wi-Fi 网络时,就避不开「SSID」这个术语。简单来说,SSID 就是 Wi-Fi 网络的名称。比如

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert