Векторная графика

Алгоритмы: от сортировки пузырьком до численных методов

Модераторы: C_O_D_E, DeeJayC

Ответить
DeeJayC
Сообщения: 497
Зарегистрирован: 17 фев 2004, 11:26
Откуда: Ленинград (который Город на Неве)
Контактная информация:

По поводу второго сказать ничего не могу. По поводу первого:

Проверять каждую точку + делать преобразование rgb->hsv,
далее разбить на 10 отрезков и смотреть к какому отрезку пренадлежит.
"Особое внимание начинающих аквариумистов хотим обратить на то, что рыбки никогда не спят на спинке!" (c)

viel spass, DeeJayC
DeeJayC
Сообщения: 497
Зарегистрирован: 17 фев 2004, 11:26
Откуда: Ленинград (который Город на Неве)
Контактная информация:

1.

Код: Выделить всё


void hsv2rgb(double h, double s, double v, double &r, double &g, double &b) {
	int i;
	double f,p,q,t;

	if (s <= 0.0) {	/* achromatic */
		*r = v;
		*g = v;
		*b = v;
	} else {
		if (h >= 1.0) h = 0.0;
		h = 6.0 * h;
		i = (int)h;
		f = h - (double)i;
		p = v * (1 - s);
		q = v * (1 - (s * f));
		t = v * ( 1 - (s * (1 - f)));

		switch (i) {
			case 0: r = v; g = t; b = p; break;
			case 1: r = q; g = v; b = p; break;
			case 2: r = p; g = v; b = t; break;
			case 3: r = p; g = q; b = v; break;
			case 4: r = t; g = p; b = v; break;
			case 5: r = v; g = p; b = q; break;
		}
	}
}

void rgb2hsv(double r, double g, double b, double &h, double &s, double &v) {

	double		rgbmin,rgbmax;
	double		rc,bc,gc;
	double		ht=0.0,st=0.0;

	rgbmin = MIN(r,MIN(g,b));
	rgbmax = MAX(r,MAX(g,b));

	if (rgbmax > 0.0)
		st = (rgbmax - rgbmin) / rgbmax;

	if (st > 0.0) {
		rc = (rgbmax - r) / (rgbmax - rgbmin);
		gc = (rgbmax - g) / (rgbmax - rgbmin);
		bc = (rgbmax - b) / (rgbmax - rgbmin);
		if (r == rgbmax) ht = bc - gc;
		else if (g == rgbmax) ht = 2 + rc - bc;
		else if (b == rgbmax) ht = 4 + gc - rc;
		ht = ht * 60.0;
		if (ht < 0.0) ht += 360.0;
	}
	h = ht / 360.0;
	v = rgbmax;
	s = st;
}
2. Есть обратная задача - построение "градиента"

Код: Выделить всё


double m_Start[3];
double m_End[3];	


void  GetColor( rgb & color, double factor ) {
	double h1, s1, v1;
	double h2, s2, v2;


	rgb2hsv( m_Start[0], m_Start[1], m_Start[2], h1, s1, v1 );
	rgb2hsv( m_End[0], m_End[1], m_End[2], h2, s2, v2 );

	double h = h1 + (h2 - h1) * factor;
	double s = s1 + (s2 - s1) * factor;
	double v = v1 + (v2 - v1) * factor;

	hsv2rgb( h, s, v, color[0], color[1], color[2] );
};
"Особое внимание начинающих аквариумистов хотим обратить на то, что рыбки никогда не спят на спинке!" (c)

viel spass, DeeJayC
gregor
Сообщения: 2
Зарегистрирован: 22 янв 2005, 11:46

Посоветуйте, пожалуйста, с чего начать? мне необходимо разобраться в работе программы по преобразованию растров в векторную графику.
gregor
Сообщения: 2
Зарегистрирован: 22 янв 2005, 11:46

простите, пожалуйста, дилетанта, что означают аббревиатуры RGB и HSV
DeeJayC
Сообщения: 497
Зарегистрирован: 17 фев 2004, 11:26
Откуда: Ленинград (который Город на Неве)
Контактная информация:

gregor писал(а):простите, пожалуйста, дилетанта, что означают аббревиатуры RGB и HSV
Типы спектрального разложения цвета:

RGB = Red Green Blue
HSV = Hue, Saturation, Value
"Особое внимание начинающих аквариумистов хотим обратить на то, что рыбки никогда не спят на спинке!" (c)

viel spass, DeeJayC
DeeJayC
Сообщения: 497
Зарегистрирован: 17 фев 2004, 11:26
Откуда: Ленинград (который Город на Неве)
Контактная информация:

gregor писал(а):Посоветуйте, пожалуйста, с чего начать? мне необходимо разобраться в работе программы по преобразованию растров в векторную графику.
С линейной алгебры.
"Особое внимание начинающих аквариумистов хотим обратить на то, что рыбки никогда не спят на спинке!" (c)

viel spass, DeeJayC
Defder
Сообщения: 64
Зарегистрирован: 24 май 2005, 12:25

Нейронные сети рулят.
Довести бы до ума свои наработки по трингуляции растровых изображений...
Ответить