继续相切问题。过圆外一点求一个与圆相切的圆的切点

来源:百度知道 编辑:UC知道 时间:2024/06/27 17:03:49
圆外一点ptOutside,
圆心坐标ptCenter,
半径dbRadious,

求切点,要求写出函数

题目比上一题简单,继续200分!
大家加油。

上一题在
http://zhidao.baidu.com/question/8502169.html
注意:是过圆外一点做一个与已知圆相切的圆
是圆哈,求切点坐标

lishimin1972 ,真是谢谢你啊。
你能不能再写一个啊,
已知的是圆外的圆心,不是该圆上的点。
我搞错了。不好意思。

已知的是圆外的圆心,不是该圆上的点。太简单了:
CPoint CalcQieDian(CPoint ptO1, CPoint ptO2, double dbRadious)
{
CPoint O2=ptO2-ptO1; //坐标变换到ptO1为原点,求ptO2变换后坐标O2
double dbradious=sqrt(O2.x*O2.x+O2.y*O2.y)-dbRadious; //得到切园半径
double t=dbRadious/(dbRadious+dbradious); //缩放变换系数
O2.x=long(O2.x*t); O2.y=long(O2.y*t); //缩放变换即可以得到切点坐标
O2+=ptO1; //坐标变换初试原点
return O2;

}

你的题目少一个条件,就是切园的半径,否则应该是一个园系,要求的
切点应该是无穷多的。
CPoint CalcQieDian(CPoint ptCenter, CPoint ptOutside, double dbRadious, double dbradious)
{
//1.用海伦公式求三角形面积,
//定于ptCenter为三角形ABC的B顶点,ptOutside为C顶点,A为切园圆心, 切点M
double S,s; /*S:三角形面积 s=(a+b+c)/2 */
CSize T=ptOutside-ptCenter;
double a,b,c;
a=sqrt(T.cx*T.cx +T.cy*T.cy);
b=dbRadious;
c=dbRadious+dbradious;
s=(a+b+c)/2;
S=sqrt(s*(s-a)*(s-b)*(s-c));

//2.又S=a*c*sin(B)/2, 求角度B
double sinB=S*2/a/c;
double B=asin(sinB);

//3.求BC线段的