【问题标题】:Compute squared solutions to a quadratic equation without using sqrt不使用 sqrt 计算二次方程的平方解
【发布时间】:2020-03-13 16:52:38
【问题描述】:

我正在尝试编写一个圆到线段的碰撞检测算法,其中涉及确定圆和线段的交点。线段代表子弹在最后一帧上的轨迹,这意味着即使有多个圆与线相交,它也会击中第一个圆。

我想获得交点的t 值,这是对交点沿线段距离的度量。计算t 值需要求解一个二次方程,其中涉及公式t = (-b - sqrt(det)) / (2 * a)。为了使代码更快,我试图完全避免使用sqrt,这意味着我不会比较在所有潜在圈子中找到最小的t,而是尝试为它们找到最小的t^2。但是,我不知道如何在没有sqrt 的情况下找到t^2,即使给定t = (-b - sqrt(det)) / (2 * a),因为二项式展开仍然涉及sqrt

不使用sqrt函数如何计算t^2 = ((-b - sqrt(det)) / (2 * a))^2

【问题讨论】:

    标签: math collision-detection intersection quadratic


    【解决方案1】:

    你需要解决

    (x0 - cx + dx * t)^2 + (y0 - cy + dy * t)^2 = r^2
    

    对于一个圈子集中的每个(cx, cy, r)。一般情况下,没有二次方程解和sqrt是不可能找到t值的。

    但也许你可以(我们不知道所有问题细节)构建一些空间索引结构(分区,即 kd-tree)以避免对所有这些圆圈进行全面检查。

    【讨论】:

    • 我已经在使用空间散列来减少测试的圈数。有数学证明t^2 是不可能得到的吗?
    • 方程包含t和t^2,是一般类的二次方程。您可以在没有 sqrt 的情况下检查相交的事实(当对线方程进行归一化时),但需要获取点。
    猜你喜欢
    • 2020-11-28
    • 2013-11-05
    • 1970-01-01
    • 2015-03-12
    • 2017-04-24
    • 2016-08-06
    • 2013-03-02
    • 1970-01-01
    • 2020-09-13
    相关资源
    最近更新 更多