问一个关于求直线和圆交点算法~解决方法

问一个关于求直线和圆交点算法~~~
如题~~在纸上是可以算出来的~~~
但是用C++语言来描述   那个求解过程的话`~~~就头疼了
~~~大虾们~~帮忙咯~~~

------解决方案--------------------
建两个链表:一个存圆的点的位置,一个存直线的点的位置,判断两个链表中是否是想同的值
------解决方案--------------------
看你的图形在计算机中是怎样描述的
如果是用矢量描述的,就按照数学中的公式计算,只是个坐标的换算问题
如果是用标题描述的,可以顺着直线搜索下去,如果某个点周围的点个数大于2,就是交点,当然这只针对于一像素单位的直线
------解决方案--------------------
现实问题中怎么描述就怎么去做呀~

需求分析
------解决方案--------------------
#include <stdio.h>

#define abs(x) ((x) > = 0 ? (x) : -(x))

/*
用牛顿迭代法求方程的根:
解非线性方程f(x)=0的牛顿法是把非线性方程线性化的一种近似方法。把f(x)在x0点附近展开成泰勒级数
f(x) = f(x0) + (x - x0)f '(x0) + (x - x0)^2 + …
取其线性部分,作为非线性方程f(x)=0的近似方程,则有
f(x0) + f '(x0)(x - x0) = 0
设f '(x0)!=0则其解为
x1 = x0 - f(x0) / f '(x0)
再把f(x)在x1附近展开成泰勒级数,也取其线性部分作f(x)=0的近似方程。若f(x1)!=0,则得
x2 = x1 - f(x1) / f '(x1)
这样,得到牛顿法的一个迭代序列
xn+1 = xn - f(xn) / f '(xn)
*/

/*
y = k * x + c, (x - a)^2 + (y - b)^2 = r^2 =>
(1 + k^2) * x^2 + 2 * (k * c - a - b) * x + (c - b)^2 + a^2 - r^2 = 0 =>
f(x) = (1 + k^2) * x^2 + 2 * (k * c - a - b) * x + (c - b)^2 + a^2 - r^2 =>
f '(x) = 2 * (1 + k^2) * x + 2 * (k * c - a - b) (为f(x)的导数)
*/

// precision 为根的精度
void point(double k, double c, double a, double b, double r, double precision)
{
for(int i = 0; i < 2; i++)
{
double s = i == 0 ? -r : r;
double x = a + s;
double x1 = a + s;
double delta = 0;
int first = 1;
do
{
x = x1;

double fx = (1 + k * k) * x * x +
2 * (k * c - a - b) * x +
(c - b) * (c - b) + a * a - r * r;
double dfx = 2 * (1 + k * k) * x + 2 * (k * c - a - b);

x1 = x - fx / dfx;

if(!first && delta < abs(x1 - x))
{
break; // 没有根
}

first = 0;
delta = abs(x1 - x);


} while(delta > precision);

if(delta < precision)
{
double xx = x;
double yy = k * x + c;

printf( "x = %f, y = %f\n ", xx, yy);
}
}
}

int main(int argc, char* argv[])
{
point(1, 0, 0, 0, 1, 0.000001);

return 0;
}
------解决方案--------------------
看圆心到直线之间的距离,再求三角形找圆心的偏移量(x,y),也太简单拉



------解决方案--------------------
参看《计算机图形学几何工具算法详解》P176.
to tufaqing() 你为什么要把简单的问题复杂化。