0

如果这被认为是一个重复的问题,我们深表歉意,但我在这里看到的答案对于我的需要来说太复杂了。

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

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

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

( R R ( (Ax-Bx)(Ax-Bx) + (Ay-By)(Ay-By) ) ) -( ((Ax-Cx)(By-Cy))-((Bx-Cx)(Ay -Cy))) > 0

此公式取自链接文本,并基于 0,0 圆心圆。

我发布的原因是我得到了奇怪的结果,我想知道我是否做了一些愚蠢的事情。:(

4

1 回答 1

0

尽管这并不能完全回答您的问题:您真的必须在 SQL-Select 上即时计算吗?这意味着数据库系统必须为表中的每一行(或其余条件分别成立的每一行)计算公式,这可能会导致性能不佳。

相反,您可能会考虑创建一个单独的布尔列并在 on-insert/on-update 触发器中计算其值。反过来,您甚至不需要将测试放在单行公式中。使用单独的列还有另一个优点:您可以在该列上创建一个索引,这样您就可以非常快速地获得一组相交/不相交的记录。

于 2010-06-04T14:52:01.993 回答