matlab程序中已知圆M圆心坐标(9,6)半径2.5,以及圆外一点p(1,2)怎样求p点到圆M切线上的切点的坐标。

麻烦给出可以运行的matlab程序
解决出差不多我就给分

求解方程组即可,设点切点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)')
 
x =
 
 9.448472752332354265425053211902
 7.301527247667645734574946788098
 
 
y =
 
 3.540554495335291469149893576196
 7.834445504664708530850106423804

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-08-26
我学的C,,思路应该是一样的......先求出p到圆心的距离l=sqrt((9-1)*(9-1)+(6-2)*(6-2)) =4*根号5; 再算出p到切点的距离,R=sqrt(2.5*2.5+(4*根号5)*(4*根号5))=根号86.25; 然后再判断切点(x,y) 必须是已经知圆上的点,且也是以p为圆心,R为半径的圆上.应该有两个点!追问

能不能写出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");

本回答被网友采纳
第2个回答  2014-08-26
你可以设切点坐标(x.y)然后设一条过P点的直线,斜率用x、y表示,在与圆方程联立,不就可以求出切点坐标么,追问

要用matlab程序语言做

相似回答