2010-09-30 12 views
1

Я ищу эффективный способ преобразования координат осей в координаты пикселей для разрешения нескольких экранов.Преобразование координат осей в координаты пикселей

Например, если был набор данных значений температуры с течением времени, что-то вроде:

int temps[] = {-8, -5, -4, 0, 1, 0, 3}; 
int times[] = {0, 12, 16, 30, 42, 50, 57}; 

Что является наиболее эффективным способом для преобразования набора данных пикселя координаты, чтобы я мог нарисовать график на экране 800х600 ,

ответ

1

Предполагая, что вы собираетесь с TEMP_MIN в TEMP_MAX, просто сделать:

y[i] = (int)((float)(temps[i] - TEMP_MIN) * ((float)Y_MAX/(float)(TEMP_MAX - TEMP_MIN))); 

где #define Y_MAX (600). Аналогично для х-координаты. Это не проверено, поэтому вам может понадобиться немного изменить его, чтобы правильно обработать крайний край (temps[i] == TEMP_MAX).

+0

... но пример имеет температуру ниже 0 ... – caf

+0

@caf: Хорошая точка; изменение ответа теперь ... –

1

Сначала вам необходимо определить максимальные и минимальные значения вдоль каждой оси. Тогда вы можете сделать:

x_coord[i] = (x_val[i] - x_max) * X_RES/(x_max - x_min); 

... и то же самое для Y. (Хотя вы, вероятно, захотите инвертировать ось Y).

+0

Вам, вероятно, понадобится сделать это с плавающей точкой, чтобы достичь правильной точности (как в моем ответе) и избежать проблем с переполнением. –

+0

@ Oli: Да, это может быть достигнуто путем создания константы с плавающей запятой 'X_RES', такой как' 800.0'. – caf

Смежные вопросы