我使用的是Django,並有一個充滿任意RGB顏色的MySQL數據庫。 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
。
Pythagorus告訴我們,以下是這一切的範圍內各點的真實:
(R-a)**2 + (G-b)**2 + (B-c)**2 <= x**2
我想轉換成有效的Django查詢此。而且,如果失敗了,那就是MySQL查詢。
我不是MySQL專家,但我有一些懷疑Django查詢語法可能是非常有限的在這種情況下。編寫一個原始的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
哇,真的,這將工作嗎?我想說,Django查詢語言是有限的,是一個巨大的輕描淡寫。 – 2011-03-31 23:03:02
@Chris /當然你需要使用正確的語法,'POW()'函數而不是SQL-Server ^操作符! – RichardTheKiwi 2011-03-31 23:08:54