Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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
3-68150
Sergeyy
2003-07-25 13:23
2003.08.21
DBGrid внутри DBCtrlGrid


1-68400
_Nobody__
2003-08-07 11:53
2003.08.21
Использование TStrings


1-68273
cjiohobaji
2003-08-07 08:14
2003.08.21
число вхождения строки в строку


14-68552
Juster
2003-08-04 19:25
2003.08.21
Кодек!


1-68364
Zhenka
2003-08-08 10:14
2003.08.21
Как удалить заданное слово из файла





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский