C# 如何找到圆的重叠

C# 如何找到圆的重叠,c#,winforms,math,graphics,opentk,C#,Winforms,Math,Graphics,Opentk,嗨,我做了一个有两个球的申请。红色和黄色。 用户必须拖动红色球并将其放置在黄色球上。它位于X-Y平面。现在我想计算重叠的精度。我知道如果目标的X-Y等于前锋的X-Y,那么它是100%,但是你怎么计算呢?就好像你把红球往右移了一步,前锋的X值变大了,百分比就不准确了?我一直在用百分比误差公式,但它不准确 double percentErrorX =(CurrentX-targetX)*100/targetX; double percentErrorY = (Curre

嗨,我做了一个有两个球的申请。红色和黄色。 用户必须拖动
红色球
并将其放置在
黄色球
上。它位于X-Y平面。现在我想计算重叠的精度。我知道如果目标的X-Y等于前锋的X-Y,那么它是100%,但是你怎么计算呢?就好像你把红球往右移了一步,前锋的X值变大了,百分比就不准确了?我一直在用百分比误差公式,但它不准确

   double percentErrorX =(CurrentX-targetX)*100/targetX;
            double percentErrorY = (CurrentY -targetY)*100/targetY;

我认为最直观的百分比计算形式是计算每个重叠圆的面积百分比

您使用的是哪种粒度?你的x-y坐标代表什么,每个圆的中心?如果x-y坐标为中心,则可以使用距离公式:

d = sqrt[ (x1-x2)^2 + (y1-y2)^2 ]
其中,目标的x-y坐标为x1,y1,前锋的x-y坐标为x2,y2

使用此d,您可以按如下方式计算百分比:

Percent = (d / radius)

有很多种类型的碰撞。还有一篇关于圆碰撞的好文章:

你需要一些数学来计算精确的结果,但这里有一个eat方法,可以给你很好的近似值。 通过sqrt((x1-x2)^2+(y1-y2)^2)计算球之间的距离 您的结果约为(距离/半径*2)^1.8
试试这个公式,看看精度是否足够好

看看

我在
MouseMove
event@Lagrangian你不应该用圆心来代替吗?你可以在边缘“抓住”这个圆,然后将它完美地拖到另一个圆上,但你的x-y仍然会检测到它不是完美的重叠。@Lagrangian我同意YetAnotherUser的观点。如果你知道每个圆的中心,这个问题就相对简单了。因为它必须小于2,大于1.5。我不想计算精确的公式,所以1.8似乎是一个很好的经验法则。试试看。您可以随时将其更改为1.9、1.7 e.t