2d 确定线段是否与圆相交的公式(平面)

2d 确定线段是否与圆相交的公式(平面),2d,line,intersection,geometry,segment,2d,Line,Intersection,Geometry,Segment,如果这是一个重复的问题,我深表歉意,但我在这里看到的答案太复杂了,无法满足我的需要 我只需要找出线段是否与圆相交。我不需要求从圆心到直线的距离,我不需要求交点 我之所以需要一些简单的东西,是因为我必须用SQL编写代码,无法调用外部库,需要在WHERE子句中编写这个公式。。。基本上,它必须在一个语句中完成,我可以将值插入其中 假设两个点A Ax、Ay和B Bx、By来描述线段,以及一个圆心为C Cx、Cy和半径R的圆,我目前使用的公式是: RR Ax BxAx Bx+Ay By By By By

如果这是一个重复的问题,我深表歉意,但我在这里看到的答案太复杂了,无法满足我的需要

我只需要找出线段是否与圆相交。我不需要求从圆心到直线的距离,我不需要求交点

我之所以需要一些简单的东西,是因为我必须用SQL编写代码,无法调用外部库,需要在WHERE子句中编写这个公式。。。基本上,它必须在一个语句中完成,我可以将值插入其中

假设两个点A Ax、Ay和B Bx、By来描述线段,以及一个圆心为C Cx、Cy和半径R的圆,我目前使用的公式是:

RR Ax BxAx Bx+Ay By By By By By -Ax CxBy Y Bx CxAy Cy>0

此公式取自,并基于0,0中心圆


我发帖的原因是我得到了奇怪的结果,我想知道我是否做了傻事

虽然这并不能完全回答您的问题:您真的需要在SQL Select上动态计算吗?这意味着DB系统必须分别为表中的每一行或保留其余条件的每一行计算公式,这可能导致性能不佳


相反,您可以考虑创建一个单独的布尔列,并在插入/更新更新触发器中计算其值。反过来,你甚至不需要把测试放在一行公式中。使用单独的列还有另一个优点:您可以在该列上创建索引,从而可以非常快速地获取相交/非相交记录集。

感谢您的建议,但不幸的是,我每次需要针对数千条线段对许多不同的圆进行此计算,所以我不能提前计算任何东西。我明白了,圆坐标根本不是记录的一部分。你可能想在你的问题中指定它。可能值得一提的是,我在计算之前通过检查来过滤掉大部分线:1至少一个点A,B至少有一个圆心x值-半径2至少有一个点A,B至少有一个圆心x值+半径3至少有一个点A,B至少有一个圆心y值-半径4至少有一个点A,B在最大圆心+半径处有一个y值。如果这些条件都不满足,则整条线位于通过延长一个以圆为中心的正方形(长度为2R)形成的十字形状之外。作为对您关于圆的观点的回应。。。它们在数据库中,只是可能有很多,它们都需要根据所有行进行检查。这个计算将在每个数据库中进行一次,因此您的建议或多或少是实际情况,除了我将只存储一次计算的交点,而不是存储所有非交点。整个数据库经常被擦除,数据被重新导入,每次需要计算相交。