matlab程序中已知圆M圆心坐标(9,6)半径2.5,以及圆外一点p(1,2)怎样求p点到圆M切线上的切点的坐标。 150
3个回答
展开全部
求解方程组即可,设点切点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
展开全部
我学的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");
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你可以设切点坐标(x.y)然后设一条过P点的直线,斜率用x、y表示,在与圆方程联立,不就可以求出切点坐标么,
追问
要用matlab程序语言做
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询