【发布时间】:2015-11-04 11:29:39
【问题描述】:
我需要能够计算两个圆之间的交点。我确信总会有 2 个交叉点。不是 1,不是 0,不是无限,总是 2。这是我正在尝试做的图表:
这是我目前的尝试:
public static List<Vector2> intersect(Vector3 c1, Vector3 c2, float rad1, float rad2)
{
List<Vector2> rLp = new List<Vector2>();
float d = Vector2.Distance(c1, c2);
if (d > (rad1 + rad2))
return rLp;
else if (d == 0 && rad1 == rad2)
return rLp;
else if ((d + Mathf.Min(rad1, rad2)) < Mathf.Max(rad1, rad2))
return rLp;
else
{
float a = (rad1 * rad1 - rad2 * rad2 + d * d) / (2 * d);
float h = Mathf.Sqrt(rad1 * rad1 - a * a);
Vector2 p2 = new Vector2((float)(c1.x + (a * (c2.x - c1.x)) / d), (float)(c1.y + (a * c2.y - c1.y) / d));
Vector2 i1 = new Vector2((float)(p2.x + (h * (c2.y - c1.y)) / d), (float)(p2.y - (h * (c2.x - c1.x)) / d));
Vector2 i2 = new Vector2((float)(p2.x - (h * (c2.y - c1.y)) / d), (float)(p2.y + (h * (c2.x - c1.x)) / d));
if (d == (rad1 + rad2))
rLp.Add(i1);
else
{
rLp.Add(i1);
rLp.Add(i2);
}
return rLp;
}
}
它给了我以下结果:
如您所见,代表两个圆圈之间的截点的白色方块放错了位置。我真的可以在这方面使用一些帮助。任何人都可以看到有什么问题吗?
【问题讨论】:
-
Intersection 是您使用 Google 搜索的目标; csharphelper.com/blog/2014/09/…
-
我已经在那个页面上,我几乎可以肯定你会在我的 sample.cs 上找到那个页面上的代码
-
发布您在问题中尝试过的内容,而不是某些外部网站。另外,您尝试使用什么数学?这是高中几何
-
我总是在发布链接之前进行测试,该项目允许您绘制 2 个圆圈,然后通过 FindCircleCircleIntersections() 突出显示交点 - 即您的 A1 和 A2 数据点
-
请发布您的代码
标签: c# geometry intersection