求解方程组即可,设点切点T(x,y)
1) T到圆心O(9,6)距离为2.5
2)PT与TO相切
会解出两个切点
>> [x y] = solve('(x-9)^2+(y-6)^2-2.5^2', '(x-1)*(x-9)+(y-2)*(y-6)')能不能写出c语言程序
追答double m = 1, n = 2;
double a = 9, b = 6;
double r = 2.5;
cout > a >> b;
cout > r;
cout > m >> n;
// 点到圆心距离的平方
double d2 = (m - a) * (m - a) + (n - b) * (n - b);
// 点到圆心距离
double d = sqrt(d2);
// 半径的平方
double r2 = r * r;
if (d2 圆心的单位向量
double x0 = (a - m) / d;
double y0 = (b - n) / d;
// 计算切线与点心连线的夹角
double f = asin(r / d);
// 向正反两个方向旋转单位向量
double x1 = x0 * cos(f) - y0 * sin(f);
double y1 = x0 * sin(f) + y0 * cos(f);
double x2 = x0 * cos(-f) - y0 * sin(-f);
double y2 = x0 * sin(-f) + y0 * cos(-f);
// 得到新座标
x1 = (x1 + m) * l;
y1 = (y1 + n) * l;
x2 = (x2 + m) * l;
y2 = (y2 + n) * l;
cout << "点在圆外,切点有两个:(" << x1 << ", "
<< y1 << ")和(" << x2 << ", " << y2 << ")" << endl;
}
system("pause");
要用matlab程序语言做