设计一个算法,判断(x一xo)^2十(y一y0)^2=r^2,与直线ax十by十c=0的位置关系
答案:1 悬赏:20 手机版
解决时间 2021-02-19 04:10
- 提问者网友:未信
- 2021-02-18 15:17
设计一个算法,判断(x一xo)^2十(y一y0)^2=r^2,与直线ax十by十c=0的位置关系
最佳答案
- 五星知识达人网友:夜余生
- 2021-02-18 16:23
思路:求出直线到圆心的距离,和半径比较,即可知道是相离、相交、还是相切,即求直线ax+by+c=0到点(x0,y0)的最短距离,和r进行比较
过点O(x0,y0)分别做平行于x轴和y轴的线段,于直线交于A,B。带入方程解得点A((-b*y0-c)/a,y0)和点B(x0,(-a*x0-c)/b)。易知点O到直线的距离为AO*BO/AB。
伪码:
function f(a, b, c, x0, y0, r)
ao <- abs(x0 + (b * y0 + c) / a) //abs表示取绝对值
bo <- abs(y0 + (a * x0 + c) / b)
ab <- sqrt(ao^2 + bo^2) //sqrt表示开平方
d <- ao * bo / ab
if d = 0 then
return "过圆心"
else if d < r then
return "相交"
else if d = r then
return "相切"
else
return "相离"实际编码需要注意浮点数的精度问题
过点O(x0,y0)分别做平行于x轴和y轴的线段,于直线交于A,B。带入方程解得点A((-b*y0-c)/a,y0)和点B(x0,(-a*x0-c)/b)。易知点O到直线的距离为AO*BO/AB。
伪码:
function f(a, b, c, x0, y0, r)
ao <- abs(x0 + (b * y0 + c) / a) //abs表示取绝对值
bo <- abs(y0 + (a * x0 + c) / b)
ab <- sqrt(ao^2 + bo^2) //sqrt表示开平方
d <- ao * bo / ab
if d = 0 then
return "过圆心"
else if d < r then
return "相交"
else if d = r then
return "相切"
else
return "相离"实际编码需要注意浮点数的精度问题
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯