2014 dxdy logo

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

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




 
 График функции в delphi (вопрос)
Сообщение17.06.2015, 12:58 
Аватара пользователя
Вот мне нужно построить график какой-нибудь функции в 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 
Не на весь экран, а на всю область высотой $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 
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 
Аватара пользователя
Вообще я не понимаю, как происходит преобразование экранных координат в физические, можно об этом где-то почитать?

 
 
 
 Re: График функции в delphi (вопрос)
Сообщение18.06.2015, 18:32 
Это аффинное отображение по очевидным соображениям. Добавляем некоторое количество ограничений (куда начало переходит, куда орты) — и вот они, формулы.

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

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

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

 
 
 
 Re: График функции в delphi (вопрос)
Сообщение18.06.2015, 19:00 
Кстати, совет по мотивам aa_dav и rockclimber про рисование: просто найти сначала линейные функции, отображающие $[a;b]$ в $[0;1]$ и назад. (Взаимно однозначно, конечно, а не не сюръективную инъекцию.)

 
 
 
 Re: График функции в delphi (вопрос)
Сообщение18.06.2015, 19:24 
Аватара пользователя
arseniiv
arseniiv в сообщении #1028598 писал(а):
Это аффинное отображение по очевидным соображениям.

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

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

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

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

 
 
 
 Re: График функции в delphi (вопрос)
Сообщение18.06.2015, 19:26 
Pavia в сообщении #1028630 писал(а):
Необязательно аффинное. Есть логарифмическое есть и перспективное и др.
К сожалению, я имел в виду то, что с большой вероятностью имел в виду ТС.

 
 
 
 Re: График функции в delphi (вопрос)
Сообщение18.06.2015, 20:54 
Аватара пользователя
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 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group