![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
qwerty |
|
|||
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 26.10.2002 Репутация: нет Всего: нет |
Нужно построить график функции (сложной, т.е. не элементарной) под DOS.
С центром координат в точке с координатами (X1,Y1). Как это сделать? ![]() Раньше делал, но сейчас забыл и исход. не осталось. И еще как масштабировать график функции, а то при значительном изменении аргумента функции само значение функции изменяется очень не значительно(в десятитысячных, при изменении аргумента на единицу). Разрешение экрана 640х480. |
|||
|
||||
Paradox |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1135 Регистрация: 18.11.2002 Где: Россия Репутация: нет Всего: 1 |
Координаты пересчитывать
-------------------- --- |
|||
|
||||
DENNN |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
Вариант Paradox'а наверное оптимальный. Добавлю, что удобно завести матрицу преобразований, по которой функция постоения графика будет рассчитывать координаты пикселов. Тогда для изменения/растяжения/сжатия/поворота изображения достаточно модифицировать эту матрицу.
|
|||
|
||||
qwerty |
|
|||
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 26.10.2002 Репутация: нет Всего: нет |
Paradox
Координаты пересчитывать Это я и так знал. Вопрос как это сделать. DENNN Вариант Paradox'а наверное оптимальный. Добавлю, что удобно завести матрицу преобразований, по которой функция постоения графика будет рассчитывать координаты пикселов. Тогда для изменения/растяжения/ сжатия/поворота изображения достаточно модифицировать эту матрицу. Можно более подробно. Если можно привести пример кода для какой-нибудь элементарной функции. |
|||
|
||||
DENNN |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
Сначала мат. теория. То что ты хочешь сделать можно назвать как переход от системы координат графика к системе координат дисплея. Наиболее удобно это описывает матрица аффинных преобразований. Матрица эта квадратная, размерность ее зависист от числа используемых координат. Для 3D это обычно 3x3 или 4x4. Во втором варианте точка будет представлена как матричный вектор размерностью 4 строки на один столбец. Так точка (0,0,0) представляется как (0,0,0,1); Чтоб получить координаты этой точки в новой СК необходимо умножить матрицу-вектор на матрицу аффинных преобразований. Такой способ позволяет учесть абсолютно все виды преобразований, даже неперпендикулярность осей координат. Как рассчитать требуемую матрицу поищи сам - благо примеров в инете и литературе по графике навалом. Когда старая и новая СК совпадают "один в один" матрица преобразований выглядит так 1,0,0,0 0,1,0,0 0,0,1,0 0,0,0,1 размерность 4x4 избавляет от некоторых побочных трудностей, связанных с матричной алгеброй. Почему матрицы? На компьютере данный способ реализуется быстрей всего и при использованиии "на поток" дает наилучшие показатели производительности для обобщенного случая. |
|||
|
||||
DENNN |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
Навсякий случай, если у тебя 3D график. Аффинными преобразованиями можно выразить только ортографическую проекцию пространства на плоскость, но не перспективную.
|
|||
|
||||
qwerty |
|
|||
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 26.10.2002 Репутация: нет Всего: нет |
DENNN
Да. нет график 2мерный. Если не сложно бросьте ссылки на материалы по построению графиков 2D функций, а на счет матриц это не шутка?(1апрельская) Это сообщение отредактировал(а) qwerty - 2.4.2003, 00:59 |
|||
|
||||
DENNN |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
Нет это совершенно серьезно.
|
|||
|
||||
AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: нет Всего: 118 |
Для 2D графика делалось очень просто: 1. Находим минимальное и максимальное значение из самой функции по одной координаты - MAXfun и MINfun. Также известно маскимальный размер на экране - MAXscreen и MINscreen 2. Находим то же самое для другой координаты. Потом вычисляем коэффициент преобразования каждой координаты (MAXscreen-MINscreen)/(MAXfun-MINfun) Теперь просто значение функции по каждой оси умножается на коэффициент - получаем значение в координатах экрана А афинные преобразования реально интересно применять при сложных случаях - трехмерность, повороты и т.д. |
|||
|
||||
DENNN |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
Даже если предоставить пользователю возможность увеличивать часть графика или накладывать один на другой, то аффинные преобразования становятся удобны. Реализовав такой подход один раз его потом можно применять для разных целей не переделывая программу.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |