2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 График функции в delphi (вопрос)
Сообщение17.06.2015, 12:58 
Аватара пользователя


27/03/14
1091
Вот мне нужно построить график какой-нибудь функции в delphi и для удобства нужно перейти от экранных координат к физическим.
Если известен диапазон изменения $(x_{min};x_{max})$ и значения функции $(y_{min};y_{max})$, то формулы перехода выглядят так:
Используется синтаксис Pascal
 
  kx:=(w/(xmax-xmin));
  ky:= (h/(ymax-ymin));
  Bx:= -kx*xmin;
  By:= -ky*ymin;
  u:= round(xmin*kx+Bx);
  v:= round(h-(ky*f(xmin)+By));

где $h$- высота области построения $w$- ширина, $(u,v)$- новые координаты.
Сам вопрос: при таких преобразованиях и дальнейшем построении график функции должен быть на весь экран при любом выборе $(x_{min};x_{max})$ ?

 Профиль  
                  
 
 Re: График функции в delphi (вопрос)
Сообщение17.06.2015, 14:23 
Заслуженный участник


06/07/11
5627
кран.набрать.грамота
Не на весь экран, а на всю область высотой $h$ и шириной $w$. Но это если я правильно понял идею, которую вы хотите реализовать, потому что по вашему коду это понять невозможно - с реализацией у вас проблемы. Если мы возьмем формулу из третьей строки вашего кода

$Bx = -kx \cdot xmin$

и подставим в пятую, то

$ u= round(xmin \cdot kx + Bx) = round(xmin \cdot kx -kx \cdot xmin )$

получим ноль при любых значениях переменных. Возможно, ваша проблема в этом.

-- 17.06.2015, 15:25 --

А в шестой строке у вас вообще xmin, хотя по смыслу тут вроде должно быть ymin

 Профиль  
                  
 
 Re: График функции в delphi (вопрос)
Сообщение17.06.2015, 15:27 


11/12/14
893
fronnya в сообщении #1028108 писал(а):
для удобства нужно перейти от экранных координат к физическим


Для удобства сперва решите частную задачу математического характера.
Пусть некоторая величина меняется от $L$ до $R$, так же обозначены нижний и верхний пределы некоторого "окна" $Lw$ и $Rw$.
Построить такую функцию
Используется синтаксис Pascal
function f( x, L, R, Lw, Rw: Double ): Double;
 

которая бы при $x=L$ возвращала бы $Lw$, а при $x=R$ возвращала бы $Rw$, а в промежуточных значениях - линейно менялась бы от $Lw$ до $Rw$.
Далее через неё всё становится тривиально.
Постоянно это функция в таких задачах всплывает, да.

 Профиль  
                  
 
 Re: График функции в delphi (вопрос)
Сообщение18.06.2015, 18:27 
Аватара пользователя


27/03/14
1091
Вообще я не понимаю, как происходит преобразование экранных координат в физические, можно об этом где-то почитать?

 Профиль  
                  
 
 Re: График функции в delphi (вопрос)
Сообщение18.06.2015, 18:32 
Заслуженный участник


27/04/09
28128
Это аффинное отображение по очевидным соображениям. Добавляем некоторое количество ограничений (куда начало переходит, куда орты) — и вот они, формулы.

Может, это было не совсем ясно написано.

 Профиль  
                  
 
 Re: График функции в delphi (вопрос)
Сообщение18.06.2015, 18:48 
Заслуженный участник


06/07/11
5627
кран.набрать.грамота
fronnya в сообщении #1028596 писал(а):
Вообще я не понимаю, как происходит преобразование экранных координат в физические, можно об этом где-то почитать?
Если у вас просто учебное задание вида "построить график функции $y = x + 1$", то, собственно, ничего читать не надо, должно хватить школьного курса математики, остальное вполне просто придумывается само. У вас есть окно (заданное 4 точками с известными координатами), у вас есть координатная плоскость, из которой надо взять кусок и сопоставить его с окном, то есть написать формулы пересчета из одних координат в другие и обратно. Просто нарисуйте рядом на бумажке две картинки (окно программы и график функции), должно стать понятнее.

А если надо написать программу для вывода 3D моделей на экран, то тут уже понадобится книжки читать. Точно уже не подскажу, теория более-менее вроде бы изложена тут (это первое, что нагуглилось, глянул по диагонали - вроде теория есть какая-то). Там уже все по-взрослому.

 Профиль  
                  
 
 Re: График функции в delphi (вопрос)
Сообщение18.06.2015, 19:00 
Заслуженный участник


27/04/09
28128
Кстати, совет по мотивам aa_dav и rockclimber про рисование: просто найти сначала линейные функции, отображающие $[a;b]$ в $[0;1]$ и назад. (Взаимно однозначно, конечно, а не не сюръективную инъекцию.)

 Профиль  
                  
 
 Re: График функции в delphi (вопрос)
Сообщение18.06.2015, 19:24 
Аватара пользователя


31/10/08
1244
arseniiv
arseniiv в сообщении #1028598 писал(а):
Это аффинное отображение по очевидным соображениям.

Необязательно аффинное. Есть логарифмическое есть и перспективное и др.

-- Чт июн 18, 2015 20:26:25 --

fronnya
fronnya в сообщении #1028596 писал(а):
Вообще я не понимаю, как происходит преобразование экранных координат в физические, можно об этом где-то почитать?

Увы, но это настолько простое преобразование, что не в одной книге об этом не написано.

 Профиль  
                  
 
 Re: График функции в delphi (вопрос)
Сообщение18.06.2015, 19:26 
Заслуженный участник


27/04/09
28128
Pavia в сообщении #1028630 писал(а):
Необязательно аффинное. Есть логарифмическое есть и перспективное и др.
К сожалению, я имел в виду то, что с большой вероятностью имел в виду ТС.

 Профиль  
                  
 
 Re: График функции в delphi (вопрос)
Сообщение18.06.2015, 20:54 
Аватара пользователя


31/10/08
1244
fronnya
Долго думал как вам ответить. Можно было вас послать читать. Но с вашими умственными способностями думаю это вам не поможет.
Что такое график Функции знаете? Это задания соответствия точек на плоскости точкам значением функции. См 1)

Для вывода точек используется видовое преобразование. 3)
$X_{Screen}:=X \cdot Scale_X+Shift_X$;
$Y_{Screen}:=Y \cdot Scale_Y+Shift_Y$;

Для того чтобы решить вашу задачу надо выполнить обратное преобразование.
$X:=(X_{Screen}-Shift_X)/Scale_X$;
$Y:=(Y_{Screen}-Shift_Y)/Scale_Y$;

В матричной форме это ещё короче. см 3)
$V_{Screen}=A V$
$V=A^{-1} V_{Screen}$

Откуда взять масштаб(Scale) и смещение(Shift)? Это уже вам должно быть виднее. Всё таки задача не такая простая как кажется на первый взгляд. В реальном проекте идёт серия преобразований, а часть из них ещё и сокрыта от программиста. И все их надо обратить. И найти недостающие данные. В разных программах программисты разбили свои программы на разные составляющие блоки(подпрограммы, функции, объекты).

1) Фихтенгольц Г.М.-Основы математического анализа. Том 1 (1968) обязательно издание шестое стереотипное.
см конец 1 главы и вторую про функции и обратные функции.
2) Мантуров О.В., Матвеев Н.М. Курс высшей математики Линейная алгебра. Аналитическая геометрия. Дифференциальное исчисление функций одной переменной 1986 первая глава.
Тоже почитайте полезно будет для понимания книги из 3)
3) Роджерс Д., Адамс Дж.-Математические основы машинной графики-Мир (2001)

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group