Поиск ближайшего цвета по RGB


Смысл этой задачи состоит в том, что есть некоторая палитра цветов -
нумерованный список цветов, состоящих из троек RGB, и есть некоторый
отдельно заданный цвет со значениями RGB, не входящими в эту палитру.
Нужно найти цвет из заданной палитры, наиболее близкий по окраске к
заданному. Решение задачи состоит в том, что нужно рассмотреть цветовой
куб RGB и найти в нем наименьшее расстояние до заданной точки, которое,
как известно, определяется суммой квадратов по каждой из координат.

Решение написано немного коряво, но я старался использовать самые-самые
понятные и простые конструкции, избегая преимуществ STL, указателей и т.п.

/*///////////////////////////////////////////////////////////////

 RGB Search, GNU C++, 2011-01-15
 
 Artix, master@7masterov.ru, icq:53666599, skype:artixmaster
 
 * Error in code? Nothing is perfect!
 * Free source for free Linux, use it for free!
 * Please, do not remove this comment!

///////////////////////////////////////////////////////////////*/

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

class Color
{
    private:
        int R,G,B;
    public:
        Color();
        void show();
        double distance(Color x);
};

Color::Color()
{
    R = rand() % 256;
    G = rand() % 256;
    B = rand() % 256;
}

void Color::show()
{
    printf("(%d,%d,%d)\n",R,G,B);
}

double Color::distance(Color x)
{
    return sqrt( (R-x.R)*(R-x.R)+(G-x.G)*(G-x.G)+(B-x.B)*(B-x.B) );
}

const int N = 10;

int main()
{
    srand(time(NULL));
    // Palette
    Color list[N];
    // Search color
    Color search;
    for(int i=0;i<N;i++)
    {
        printf("%d: ",i);
        list[i].show();
    }
    printf("\n");
    search.show();
    
    // Search nearest color number
    int n=-1;
    double d;
    double min_d = list[0].distance(search);
    for(int i=0; i<N; i++)
    {
        d=list[i].distance(search);
        if (d<min_d)
        {
            min_d=d; n=i;
        }
    }
    printf("Nearest color: %d\n",n);
    return 0;
}