![]() |
|
|
![]()
|
|
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: нет Всего: 56 |
Привет всем!
появилась следующая проблема: нужно сделать систему координат(функцию), которая бы строила график функции по переданным в нее массивам. Проблема в следующем, массивы могут приходить как с очень малыми числами, так и с очень большими(допустим возьмем ф-ию логарифма). ф-ии типа LineTo принимают только целочисленные аргументы, следовательно мне нужно по какому то принципу преобразовать вещщественные числа чтобы не нарушился порядок следования чисел, вопрос как это сделать? |
|||
|
||||
| anwe |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 748 Регистрация: 2.9.2006 Репутация: нет Всего: 23 |
Ну, наверное, через масштаб. Надо определить максимальное значение и должны быть известны размеры части окна, где будет прорисовываться график. Получится масшаб.
Ну, а как вся графика - она дискретна - и реальные результаты надо "подводить" под дискретные значения, которые пойдут в LineTo. |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: нет Всего: 56 |
вот как это сделать, меня как раз и интересует мне кроме как найти коээфициент, который делает минимальное число целым, а потом умножить всю последовательность на этот коэффициент ниче в голову нелезет |
|||
|
||||
| Oluka |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 26.4.2007 Где: Н.Новгород Репутация: нет Всего: нет |
ну, можно сделать так: 1) Ты строишь все-равно не весь график, а его часть (чаще всего, за искл случая замкнутой кривой и т.п.), поэтому ты можешь найти макс и мин значения на строящемся участке. 2) Разность между ними/количество пикселей = кол-во единиц измерения/пиксель 3) Попиксельно рисуешь)))) |
|||
|
||||
| S.A.G. |
|
|||
![]() не эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1339 Регистрация: 20.7.2006 Где: in ad equate Репутация: нет Всего: 19 |
vinter, а какие данные содержаться в массивах?
-------------------- Вот она задачка: спасти себя от себя самого © Cube Sometimes good people do evil things © A Simple Plan |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: нет Всего: 56 |
вещественные числа Добавлено через 2 минуты и 10 секунд я строю весь график, пример выше это просто в качестве примера, строю я совсем другое
я понимаю, вот только вопрос то стоит в алгоритме преобразования вещественных чисел в целые |
|||
|
||||
| S.A.G. |
|
|||
![]() не эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1339 Регистрация: 20.7.2006 Где: in ad equate Репутация: нет Всего: 19 |
Координаты точек графика? Тоесть их придеться линиями потом соединять? -------------------- Вот она задачка: спасти себя от себя самого © Cube Sometimes good people do evil things © A Simple Plan |
|||
|
||||
| likehood |
|
|||
|
666 ![]() ![]() Профиль Группа: Участник Сообщений: 536 Регистрация: 21.12.2005 Репутация: 1 Всего: 24 |
пусть X, Y - координаты точек из входного массива
Xmin - минимальное значение из всех X Sx, Sy - экранные координаты (целые числа) Sx max, Sx min - границы экранной области, в которой строится график Дальше пишем простую пропорцию: (X-Xmin)/(Sx-Sx min) = (Xmax-Xmin)/(Sx max-Sx min) = 1/Kx Sx = Sx min + K(X-Xmin) Sy = So - K(Y-Yo) // центрируем график по оси Y здесь K = min{Kx, Ky}, So = (Sy max + Sy min)/2, Yo = (Ymax-Ymin)/2 |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: нет Всего: 56 |
||||
|
||||
| likehood |
|
|||
|
666 ![]() ![]() Профиль Группа: Участник Сообщений: 536 Регистрация: 21.12.2005 Репутация: 1 Всего: 24 |
Сначала считаются коэффициенты Kx и Ky по первой формуле, а затем берется меньший из них.
|
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: нет Всего: 56 |
спасибо
|
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: нет Всего: 56 |
likehood, появилась некоторая проблема, например когда строю график синуса, то получается что верхушки выходят за границы экрана, обрезаются вершины как это поправить
кстати ты тут наверно ошибся? должно быть так? Sy = So + K(Y-Yo) |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: нет Всего: 56 |
кхм.. решил проверить на обычной ф-ии x=y , и получил неправильный результат, считал по формулам которые ты сказал..
мой косяк в коде извиняюсь Добавлено через 14 минут и 40 секунд ну вот вообщем последний вопрос то у меня и остался, как сжимать/разжимать график Это сообщение отредактировал(а) vinter - 29.4.2007, 18:04 |
|||
|
||||
| likehood |
|
|||
|
666 ![]() ![]() Профиль Группа: Участник Сообщений: 536 Регистрация: 21.12.2005 Репутация: 1 Всего: 24 |
||||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |