C# 两个圆的切线
我正试图写一些代码来画两个圆之间的切线。到目前为止,我已经能够画出多个圆和中心之间的线。C# 两个圆的切线,c#,graphics,directx,xna,geometry,C#,Graphics,Directx,Xna,Geometry,我正试图写一些代码来画两个圆之间的切线。到目前为止,我已经能够画出多个圆和中心之间的线。 我有一个类,它存储绘制圆时使用的值(半径、位置)。 我需要的是在这个类中找到两个圆之间所有可能的切线的方法。 任何帮助都会很好。 这就是我目前所拥有的(很可能是一堆垃圾) 我想你应该先用铅笔和纸解决这个问题,然后再开始编码。这个链接似乎是一个很好的起点 编辑:看起来很有希望 public static Vector2[] Tangents(circle c1, circle c2) {
我有一个类,它存储绘制圆时使用的值(半径、位置)。 我需要的是在这个类中找到两个圆之间所有可能的切线的方法。
任何帮助都会很好。
这就是我目前所拥有的(很可能是一堆垃圾)
我想你应该先用铅笔和纸解决这个问题,然后再开始编码。这个链接似乎是一个很好的起点 编辑:看起来很有希望
public static Vector2[] Tangents(circle c1, circle c2)
{
if (c2.radius > c1.radius)
{
circle temp = c1;
c1 = c2;
c2 = temp;
}
circle c0 = new circle(c1.radius - c2.radius, c1.center);
Vector2[] tans = new Vector2[2];
Vector2 dir = _point - _center;
float len = (float)Math.Sqrt((dir.X * dir.X) + (dir.Y * dir.Y));
float angle = (float)Math.Atan2(dir.X, dir.Y);
float tan_length = (float)Math.Sqrt((len * len) - (_radius * _radius));
float tan_angle = (float)Math.Asin(_radius / len);
tans[0] = new Vector2((float)Math.Cos(angle + tan_angle), (float)Math.Sin(angle + tan_angle));
tans[1] = new Vector2((float)Math.Cos(angle - tan_angle), (float)Math.Sin(angle - tan_angle));
Vector2 dir0 = c0.center - tans[0];
Vector2 dir1 = c0.center - tans[1];
Vector2 tan00 = Vector2.Add(Vector2.Multiply(tans[0], (float)c2.radius), c1.center);
Vector2 tan01 = c2.center;
Vector2 tan10 = Vector2.Add(Vector2.Multiply(tans[1], (float)c2.radius), c1.center);
Vector2 tan11 = c2.center;
}