判断线段与圆是否相交

您所在的位置:网站首页 直线与圆相切算有交点吗 判断线段与圆是否相交

判断线段与圆是否相交

2024-07-13 10:52| 来源: 网络整理| 查看: 265

                                             判断线段与圆是否相交

 

 

一、知识点

1、判断点是否在圆内的方法:设点到圆心的距离为d,圆的半径为r,那么有

 

dr在圆外

(其中d可由两点距离公式求出)

 

2、已知两点p1(x1,y1)、p2(x2,y2),求直线p1p2的一般式方程Ax+By+C=0

先求出两点式直线方程,然后由两点式直线方程求出一般式方程

3.点到直线的距离公式

点(x,y)到直线Ax+By+C=0的距离公式为

4、余弦定理

二、判断线段与圆是否相交

情况一、两点都在圆内。不相交 

情况二、一个点在圆内,一个点在圆外。相交 

情况三、两个点都在圆外

设点p1和p2均在圆外,判断线段p1p2与圆是否相交的方法

1、求出直线p1p2的一般式方程

2、用距离公式判断圆心到直线p1p2的距离是否大于半径:距离大于半径,则不相交;距离小于等于半径,执行3

3、设圆心为o,使用余弦定理判断角op1p2和角op2p1是否都为锐角,都为锐角则相交,否则不相交。

注意:可用向量来实现余弦定理

三、C++实现

//点 struct Point{ double x,y; Point(){} Point(int x,int y):x(x),y(y){} }; //圆 struct Circle{ double r,x,y; Circle(){}; Circle(double r,double x,double y):r(r),x(x),y(y){} }; //判断直线p1p2与圆c是否相交,相交返回true,否则返回false bool judge(Point p1,Point p2,Circle c) { bool flag1=(p1.x-c.x)*(p1.x-c.x)+(p1.y-c.y)*(p1.y-c.y)0&&angle2>0)//余弦为正,则是锐角,一定相交 return true; else return false; } }

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3