Форум: "Потрепаться";
Текущий архив: 2003.08.21;
Скачать: [xml.tar.bz2];
ВнизПишу программу рисования графика по точкам, и никак не получается Найти похожие ветки
← →
Александр_ИСТ (2003-08-04 13:55) [0]придумать оптимальный алгоритм для нахождения шага и минимального и максимального значения, которое нужно показывать на графике.
Исходные данные: множество y-координат точек (с x-координатами все просто), высота графика в px, можно заставить пользователя еще вводить количество промежутков.
Требуется: нарисовать график таким образом, чтобы он был как можно красивее помещался на рисунке (примерно посередине, и чтобы верхняя его точка была как можно ближе к верхнему краю графика, а нижняя - к нижнему), и шаг, а также значения, по которым ведется отчет, были как можно красивее (1,2,5,10 и т п).
Может какие алгоритмы подобные уже есть?
Пожалуйста, помогите!
← →
Vlad Oshin (2003-08-04 14:14) [1]
> Исходные данные: множество y-координат точек (с x-координатами
> все просто), высота графика в px, можно заставить пользователя
> еще вводить количество промежутков.
не понятно
← →
Александр_ИСТ (2003-08-04 14:24) [2]>не понятно
График, похожий на: http://chart.yahoo.com/c/1y/_/_dji.gif
Они каким-то образом выбрали из минимального и максимального значения (примерно 7300 и 9200 соответственно) вот так:
min = 7000
max = 10000
шаг = 1000
И красиво все смотрится... Вот как можно так выбрать?
← →
Vlad Oshin (2003-08-04 14:39) [3]обычный график,
отсечем область снизу(q) = min-(max-min)*0.1 (10% до min чтоб осталось)
накинем область сверху(w) = max+(max-min)*0.1 (10% до max чтоб осталось)
шаг - (w-q)/сколько шагов надо
пропорционально растянуть график.
← →
Александр_ИСТ (2003-08-04 15:20) [4]Это слишком просто, я тоже так думал...
q = 7300-1900*0,1 = 7300-190 = 7110
w = 9200+1900*0,1 = 9200+190 = 9390
шаг = 9390 - 7110 / 3 = 760
Ну и что это за значения? У них - красивее... 10000, 7000 и 1000 соответственно. Как вот такие получить, вот в чем вопрос. :-(
← →
Александр_ИСТ (2003-08-04 15:25) [5]У меня был вариант, который работает на этих числах, но на других не работает :-( :
1. Считаем шаг таким образом:
h = (max-min)/k , где max - максимальный, min - минимальный элемент данной последовательности, k - кол-во интервалов.
таким образом получаем предварительный шаг.
Например - максимум 9200, минимум 7300, нужно разделить на 3 интервала, и
h = (9200-7300)/3 = 633,3(3)
2. Далее, такая мысль, делаем h в виде
h = h_осн * 10 в степени step
Пример:
h = 6,333 * 10 в степени 2 ;
3. h округляем до ближайшей из цифр: 2, 5 или 10 - и получаем тот шаг, который нам нужен
h = 10 * 10 в степени 2 = 1000;
4. Высчитываем максимальное значение на графике:
maxgraph = (floor(max/h)+1)*h , где floor - выделение целой части
maxgraph = (floor(9200/1000)+1)*1000 = 10000
5. Строим график из этих предположений:
maxgraph = 10000
h = 1000
10000 -------------------------------------
9000 -------------------------------------
8000 -------------------------------------
7000 -------------------------------------
И все помещается красиво. В общем все, как у них.
Но, если возьмем цифры, например - 81 и 15, интервалов 4
1. h = (81-15)/4 = 16,5
2. h = 1,65 * 10 в степени 1 ;
3. h = 2 * 10 в степени 1 = 20;
4. maxgraph = (floor(81/20)+1)*20 = 100
5. Строим график из этих предположений:
maxgraph = 100
h = 20
100 ------------------------------------
80 ------------------------------------
60 ------------------------------------
40 ------------------------------------
20 ------------------------------------
И тут нас ждет большое разочарование, поскольку 15 не входит в наш график, оно ниже, что недопустимо.
Были еще подобные алгоритмы, но все они заканчивались вот такими несоответствиями :-( Или же график вообще был только в первом интервале, а в остальных - пусто.
Вот я и подумал, ведь задача то часто встречающаяся. Может есть какой-нибудь стандартный способ, который хорошо к этой задаче подходит, потому как я уже 3 дня сижу, а ничего дельного в голову не приходит. :-(
← →
Vlad Oshin (2003-08-04 15:35) [6]при вычислении шага надо накинуть к мах и мин пропорционально их разницы несколько процентов
← →
Vlad Oshin (2003-08-04 15:38) [7]еще одна безумная идея...
забить значения в exсel и пусть сам строит
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2003.08.21;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c