Math 不使用sqrt计算二次方程的平方解

Math 不使用sqrt计算二次方程的平方解,math,collision-detection,intersection,quadratic,Math,Collision Detection,Intersection,Quadratic,我试图写一个圆到线段的碰撞检测算法,它涉及到确定圆和线段的交点。线段表示子弹在最后一帧的轨迹,这意味着即使有多个圆与直线相交,子弹也会击中第一个圆 我想获得交点的t值,它是测量交点沿线段的距离。计算t值需要求解一个二次方程,该方程涉及公式t=(-b-sqrt(det))/(2*a)。为了加快代码的速度,我试图避免完全使用sqrt,这意味着我将尝试为所有可能的圆找到最小的t,而不是进行比较以找到最小的t^2。然而,我不知道如何在没有sqrt的情况下找到t^2,即使给定t=-b-sqrt(det))

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

我想获得交点的
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

(x0 - cx + dx * t)^2 + (y0 - cy + dy * t)^2 = r^2
对于圆集合中的每个
(cx,cy,r)
。在一般情况下,如果没有二次方程解和sqrt,就不可能找到
t


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

我已经在使用空间哈希来减少测试的圆的数量。有没有数学证明
t^2
是不可能得到的?方程包括t和t^2,它是一般类型的二次方程。您可以在不使用sqrt的情况下检查相交事实(当直线方程被规格化时),但需要它来获取点。