| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Алгоритмы > Система координат |
| Автор: vinter 25.4.2007, 20:23 |
| Привет всем! появилась следующая проблема: нужно сделать систему координат(функцию), которая бы строила график функции по переданным в нее массивам. Проблема в следующем, массивы могут приходить как с очень малыми числами, так и с очень большими(допустим возьмем ф-ию логарифма). ф-ии типа LineTo принимают только целочисленные аргументы, следовательно мне нужно по какому то принципу преобразовать вещщественные числа чтобы не нарушился порядок следования чисел, вопрос как это сделать? |
| Автор: anwe 25.4.2007, 21:51 |
| Ну, наверное, через масштаб. Надо определить максимальное значение и должны быть известны размеры части окна, где будет прорисовываться график. Получится масшаб. Ну, а как вся графика - она дискретна - и реальные результаты надо "подводить" под дискретные значения, которые пойдут в LineTo. |
| Автор: vinter 26.4.2007, 10:35 |
вот как это сделать, меня как раз и интересует мне кроме как найти коээфициент, который делает минимальное число целым, а потом умножить всю последовательность на этот коэффициент ниче в голову нелезет |
| Автор: Oluka 26.4.2007, 11:27 | ||
ну, можно сделать так: 1) Ты строишь все-равно не весь график, а его часть (чаще всего, за искл случая замкнутой кривой и т.п.), поэтому ты можешь найти макс и мин значения на строящемся участке. 2) Разность между ними/количество пикселей = кол-во единиц измерения/пиксель 3) Попиксельно рисуешь)))) |
| Автор: S.A.G. 26.4.2007, 12:09 |
| vinter, а какие данные содержаться в массивах? |
| Автор: S.A.G. 26.4.2007, 12:45 | ||
Координаты точек графика? Тоесть их придеться линиями потом соединять? |
| Автор: likehood 26.4.2007, 13:25 |
| пусть 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 26.4.2007, 15:12 | ||
да likehood , спасибо за инфу а где мне взять |
| Автор: likehood 26.4.2007, 18:58 |
| Сначала считаются коэффициенты Kx и Ky по первой формуле, а затем берется меньший из них. |
| Автор: vinter 29.4.2007, 13:03 |
| спасибо |
| Автор: vinter 29.4.2007, 17:34 |
| likehood, появилась некоторая проблема, например когда строю график синуса, то получается что верхушки выходят за границы экрана, обрезаются вершины как это поправить кстати ты тут наверно ошибся? должно быть так? Sy = So + K(Y-Yo) |
| Автор: vinter 29.4.2007, 17:57 |
| кхм.. решил проверить на обычной ф-ии x=y , и получил неправильный результат, считал по формулам которые ты сказал.. мой косяк в коде извиняюсь Добавлено через 14 минут и 40 секунд ну вот вообщем последний вопрос то у меня и остался, как сжимать/разжимать график |
| Автор: likehood 29.4.2007, 21:20 | ||
Возможно. Главное чтобы ось Y смотрела вверх, а не вниз.
Все тем же коэфициентом K. Если тебе не важны пропорции, для каждой из осей можно использовать свой коэффициент. |