两个圆公切线求法_如何求两个圆的公切线方程?

点击上方蓝字“高中数学xyz”一起玩耍

    公切线是指同时相切于两条或两条以上的曲线的直线。和两个圆相切的直线叫做这两个圆的公切线。如果两个圆在公切线的同侧,则这公切线叫外公切线;如果两个圆在公切线的异侧,则叫内公切线。

    我们都熟知两个圆的位置关系无外乎五种情况:

    相离、外切、相交、内切和内含.

   那么如何去求两个非内含的两个圆的公切线方程呢?下面以两个相离的圆为例,浅谈公切线方程的两种求法。

eea586eb86fd6e185b903c9c0a034e97.png

解法一

b8b51b5f6e5b0890c8604074644b73bd.png

8d02fe6a2fddc11c153ca6c3e40c3e73.png

解法二

31dcf313bbe115d5f30878af47350927.png

e6ac6eaff3a75ccf4a966531ecc2acdb.png

31b2780c9ad0243bc64f2656dad0a10a.png

01f74e2f0cdf9de477469d2d3dacf928.png

解法一是常规的求两圆公切线的方法,而解法二用到的原理如下:

(1)求两圆内公切线方程的求法如下图:

572c085f46beb0f731b5cd2756ffd538.png

(2)求两圆外公切线方程的求法如下图:

4169ec38b3a27a5a76ac1dea83ce27f6.png

当两圆外切时,有一内公切线,且垂直两圆的连心线;

当两圆内切时,有一外公切线,且垂直两圆的连心线.

这两种公切线方程求解很容易,此处略.

再如:

f501f5e1185b9b99c332c66fdf0f45b5.png

9387bab948403d7078e5d39028cc8fbc.png91ea32138d94a3398710ec21e81ebef2.png

ce1fdc44fa18cb606cc2c6f218c8af9f.png

cef076556091fa177a8f3af6a4985973.png

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 高中数学xyz 5a0ce1f028d551d4bb43a5ffc3b2d6fd.png
在C++中,两个公切线通常涉及到几何计算,特别是当这两个相交或外切时。这里是一个简化的算法概述: 首先,我们需要定义一个Circle类,包含心(x, y)坐标和半径(r)属性。然后我们可以创建一个函数findCommonTangent(Circle circle1, Circle circle2),它会检查两是否相交,并找到它们的公切线。 1. 计算两个的距离d,如果d等于两半径之和,则它们外切;如果d小于半径之和但大于半径之差,它们相交。 ```cpp double distance = sqrt(pow(circle1.centerX - circle2.centerX, 2) + pow(circle1.centerY - circle2.centerY, 2)); if (distance == (circle1.radius + circle2.radius)) { // 外切 } else if (abs(distance - (circle1.radius + circle2.radius)) < epsilon && abs(distance - (circle1.radius - circle2.radius)) < epsilon) { // 相交 } ``` 2. 如果相交,有两种情况:外切时有两条共切线(过公共点),相交时有一条公共切线。你可以通过向量运算找到公共点,然后构造一条直线方程,这个过程需要用到一些数学知识,比如向量夹角、直线斜率等。 ```cpp // 相交部分的计算... Point intersection = calculateIntersection(circle1, circle2); Vector lineVector = vectorFromPointToPoint(intersection, circle1.centerX, circle1.centerY); // 切线方向 double slope = lineVector.getY() / lineVector.getX(); // 斜率 // 然后构造切线方程并返回结果 ``` 注意:这个算法简化了实际过程,对于更精确的结果,可能需要引入额外的数据结构来存储计算过程,并考虑到浮点数精度问题(`epsilon`)。此外,这只是一个大致的框架,具体的实现可能会更复杂。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值