直线和圆的交点公式
y=kx+b
(x+c)² + (y+d)² = r²
的形式
转换成
ax+by+c=0
以(x, y)为圆心,r 为半径的形式
c++
// ax+by+c=0
// (x, y)为圆心,r 为半径
double x1_ = -(sqrt(pow(r, 2) * (1 + pow(a / b, 2)) - pow(x, 2) * pow(a / b, 2) -
(2 * x * y + 2 * c * x / b) * a / b - pow(y, 2) - 2 * c * y / b - pow(c / b, 2)) +
(y + c / b) * (a / b) - x) / (1 + pow(a / b, 2));
double y1_ = -(-a / b * (sqrt(pow(a / b, 2) * pow(r, 2) + pow(r, 2)
- pow(x, 2) * pow(a / b, 2) - x * x * y * a / b - x * x * a * c / pow(b, 2) -
pow(y, 2)
- 2 * c * y / b - pow(c / b, 2)) - x) - y * pow(a / b, 2) + c / b) /
(1 + pow(a / b, 2));
double x2_ = (sqrt(pow(r, 2) * (1 + pow(a / b, 2)) - pow(x, 2) * pow(a / b, 2) -
(2 * x * y + 2 * c * x / b) * a / b - pow(y, 2) - 2 * c * y / b - pow(c / b, 2)) -
(y + c / b) * (a / b) + x) / (1 + pow(a / b, 2));
double y2_ = -(-a / b * (-sqrt(pow(a / b, 2) * pow(r, 2) + pow(r, 2)
- pow(x, 2) * pow(a / b, 2) - x * x * y * a / b - x * x * a * c / pow(b, 2) -
pow(y, 2)
- 2 * c * y / b - pow(c / b, 2)) - x) - y * pow(a / b, 2) + c / b) /
(1 + pow(a / b, 2));
有需要根据第一个图片里的样子转换就可以了,或者用贴出的代码(有点乱)自己更改。
题目:直线和直线,直线和圆,直线和矩形的交点
GitHub:源码备份