【发布时间】:2011-07-27 06:54:29
【问题描述】:
我正在使用 Django,并且有一个 MySQL 数据库,其中填充了任意 RGB 颜色。 RGB 值存储为整数。
| Name | R | G | B |
+-------+---+---+---+
| Green | 0 |255| 0 |
| Cyan | 0 |255|255|
| ... | . | . | . |
| Foo |123| 45| 2 |
| ... | . | . | . |
给定任意 RGB 值(a,b,c) 我想计算数据库中的哪些颜色“接近”(a,b,c)。我将在我的查询中预先定义“接近”的含义,但现在让我们称之为x。
您可以将 RGB 颜色空间视为一个三维空间,颜色是该空间中的点。所以(a,b,c) 和x 在该空间中定义了一个球体,其中心点为(a,b,c),半径为x。
毕达哥拉斯告诉我们,对于这个范围内的所有点,以下情况都是正确的:
(R-a)**2 + (G-b)**2 + (B-c)**2 <= x**2
我想把它翻译成一个有效的 Django 查询。并且,失败了,一个 MySQL 查询。
我不是 MySQL 专家,但我怀疑 Django Query 语法在这种情况下可能非常有限。写一个原始的 SQL 查询会是这样吗?会不会更好,因为代码会更清晰?它真的会更快/更高效吗?
Django 颜色模型看起来像:
class Color(models.Model):
name = models.CharField(max_length=32)
r = models.IntegerField()
g = models.IntegerField()
b = models.IntegerField()
一个示例查询:
c = (234, 23, 45)
x = 25
nearby_colors = Color.objects.filter(....) # Awesome-sauce
【问题讨论】:
标签: mysql sql django django-queryset