使用mysql在3d中找到欧几里德距离的最有效方法是什么?

sou*_*php 11 php mysql algorithm math euclidean-distance

我有一个MySQL表,其中有数千个数据点存储在3列R,G,B中.如何使用欧几里德距离找到哪个数据点最接近给定点(a,b,c)?

我在表格中单独保存RGB颜色值,因此每列中的值限制为0-255.我想要做的是通过找到欧氏距离最小的颜色找到最接近的颜色匹配.

我显然可以通过表格中的每个点来计算距离,但这不足以扩展.有任何想法吗?

use*_*279 2

  1. 由于您正在寻找最小距离而不是精确距离,因此您可以跳过平方根。我认为平方欧几里得距离适用于此。
  2. 您已经说过这些值的范围是 0-255,因此您可以创建一个包含 255 个值的索引查找表。

这是我在 SQL 方面的想法。r0g0b0代表目标颜色。该表Vector将保存上面#2 中提到的平方值。此解决方案将访问所有记录,但可以通过排序并仅选择第一行将结果集设置为 1。

select 
    c.r, c.g, c.b,
    mR.dist + mG.dist + mB.dist as squared_dist
from 
    colors c,
    vector mR,
    vector mG,
    vector mB
where
    c.r-r0 = mR.point and
    c.g-g0 = mG.point and
    c.b-b0 = mB.point
group by
    c.r, c.g, c.b
Run Code Online (Sandbox Code Playgroud)