【问题标题】:how to find overlapping of circle如何找到圆的重叠
【发布时间】:2011-06-14 20:58:22
【问题描述】:

您好,我做了一个应用程序,它有两个球。红色和黄色。 用户必须拖动RED BALL 并将其放在YELLOW BALL 上。它在 X-Y 平面中。现在我想计算重叠的精度是多少。我知道如果目标的 X-Y 等于前锋的 X-Y 那么它是 100% 但你将如何计算呢?好像你把红球往右移动,前锋的 X 值变大,百分比会不准确?我一直在使用百分比误差公式,但它不准确

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

【问题讨论】:

    标签: c# winforms math graphics opentk


    【解决方案1】:

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

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

    d = sqrt[ (x1-x2)^2 + (y1-y2)^2 ]
    

    其中目标的x-y坐标为x1,y1,前锋的x-y坐标为x2,y2。

    有了这个 d,你可以像这样计算一个百分比:

    Percent = (d / radius)
    

    【讨论】:

    • 我在 MouseMove 事件中从鼠标指针获取 X-Y 坐标
    • @Lagrangian 你不应该改用圆心吗?可以在边缘“握住”圆圈并将其完美地拖动到其他圆圈上,但您的 x-y 仍会将其检测为不太完美的重叠。
    • @Lagrangian 我同意 YetAnotherUser 的观点。如果知道每个圆的中心,这个问题就变得相对简单了。
    【解决方案2】:

    【讨论】:

      【解决方案3】:

      有很多类型的碰撞。还有一篇关于圆碰撞的好文章: http://compsci.ca/v3/viewtopic.php?t=14897

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 因为它必须小于 2 且大于 1.5。我不想计算确切的公式,所以 1.8 似乎是一个很好的经验法则。尝试一下。您可以随时将其更改为 1.9、1.7 e.t
        猜你喜欢
        • 2012-10-05
        • 1970-01-01
        • 2016-07-23
        • 1970-01-01
        • 2021-07-19
        • 2012-03-28
        • 2022-01-09
        • 2022-12-18
        • 1970-01-01
        相关资源
        最近更新 更多