gpt4 book ai didi

php - 使用 mysql 在矩形或圆中查找点

转载 作者:行者123 更新时间:2023-11-29 02:29:03 25 4
gpt4 key购买 nike

我有一个 mysql 数据库表,其中包含一个列表点及其坐标 (x,y)

我想找到落在矩形内的点列表。如果矩形的任一侧平行或垂直于任何轴对齐,这将很简单。但不是。这意味着矩形被旋转了。我还必须找到圆圈内的点。

矩形的已知数据-所有四个点的坐标Circle 的已知数据- 中心和半径的坐标。

如何查询mysql表找到落在矩形和圆上的点?

如果重要,那么我使用的前端是 PHP。

最佳答案

矩形可以由代表相对角的两个点定义,例如:A(x,y) 和 B(x,y)。如果你有一个点 C(x,y) 想要测试它是否在矩形内,那么:

IF( (Cx BETWEEN Ax AND Bx) AND (Cy BETWEEN Ay AND By) ) THEN
point C is in the rectangle defined by points A and B
ELSE
nope
ENDIF

一个圆可以由一个点C(x,y)和半径R定义。如果圆心到点P(x,y)的距离D小于半径R,那么它在里面圆圈:

当然你还记得勾股定理,对吧?

C² = A² + B² SO C = SQRT(A² + B²)

所以:

D = SQRT( ABS(Cx - Px)² + ABS(Cy - Py)²)

IF( D <= R ) THEN
point P is inside the circle with center C and radius R
ELSE
nope
ENDIF

编辑:

检查点是否在多边形内的算法比我希望在 SQL 查询或存储过程中编写的算法稍微复杂一些,但这是完全可行的。值得注意的是,它以恒定时间运行并且非常轻量级。 [对于多边形中的每个点,大约需要 6 个算术运算和 2 到 3 个逻辑运算]

为了减少所需的数量计算,您可以简单地编写您的选择以在进一步处理之前在粗略的边界框中获取点:

WHERE
x BETWEEN MIN(x1,x2,x3,x4) AND MAX(x1,x2,x3,x4)
AND
y BETWEEN MIN(y1,y2,y3,y4) AND MAX(y1,y2,y3,y4)

假设包含 x 和 y 值的列被索引,这可能使用的 CPU 周期比简单地做数学运算要少一些,但这是值得商榷的,我倾向于称之为清洗。

至于圈子,你不可能比它更有效率

WHERE
SQRT( POW(ABS($Cx - x),2) + POW(ABS($Cy - y),2) ) < $radius

您过于关心这些计算的感知成本,只需编写代码并使其运行即可。这不是执行此类琐碎优化的阶段。

关于php - 使用 mysql 在矩形或圆中查找点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15838298/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com