Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Вывод графиков функций на форму.  (Прочитано 13362 раз)
0 Пользователей и 1 Гость смотрят эту тему.
M31
Помогающий

ua
Offline Offline

« : 04-03-2006 14:46 » 

У меня задача вывисти на форму n шт графиков различных функций и провести всевозможные исследования их. С иследованиями проблем не возникло, а вот с выводом графиков ничего не выходит.
Если кто-то может написать пример вывода графиков на форму, чтобы у них были одинаковые оси и тому подобное, буду очень блогадарен. Или скажите где в инете можно про это почитать.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 04-03-2006 17:11 » 

M31, а в чём собствено проблема? Как соединить точки на экране при помощи линий?
Записан

M31
Помогающий

ua
Offline Offline

« Ответ #2 : 05-03-2006 07:24 » 

График я вот уже научился строить(я просто понятия не имел как его строить).
Код:
float X,Y; //координаты функции
float PX,PY; //координаты пикселей
float T; //Температура

 for (T=0.4; T<=1.2; T+=0.1) {
   for(PX=0.4;PX<=Image1->Width;PX++)
   {
  X = PX*10/Image1->Width;
  Y = ((8/3)*T+(1/(X*X))-3/X)/(X-(1/3));
  PY = Image1->Height/2 - Y*Image1->Height/2;
  Image1->Canvas->LineTo(PX,PY);
   }
}
А сейчас вопрос как для всех графиков построить одну систему координат. Прямую по Х и прямую по У.
И вот ещё один вопрос. Как изменять промежутор по У?
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 05-03-2006 08:26 » 

M31, у тебя в программе циклы слишком специфичные выбраны - проще надо.
Итерации должны идти по x - от 0 до Width-1. Все остальные значения - вычисляемые.
Замечания:
1) приоритеты арифметических действий помнишь? Тогда зачем такая куча скобок?
2) именя большими буквами приняты для констант.

По сути вопроса. Догадатся не сложно: рисуешь линии и всего делов. Рисуй их до вывода графика.
Код:
Image1->Canvas->Line(0, 0, Image1->Width - 1, 0);
Image1->Canvas->Line(0, 0, 0, Image1->Height - 1);
Надеюсь, метод Line(x1,y1,x2,y2) существует? Если нет - подбери другой подходящий.

Для изменения масштабы введи множитель.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Bcat5
Гость
« Ответ #4 : 18-10-2008 15:22 » 

График я вот уже научился строить(я просто понятия не имел как его строить).
Код:
float X,Y; //координаты функции
float PX,PY; //координаты пикселей
float T; //Температура

 for (T=0.4; T<=1.2; T+=0.1) {
   for(PX=0.4;PX<=Image1->Width;PX++)
   {
  X = PX*10/Image1->Width;
  Y = ((8/3)*T+(1/(X*X))-3/X)/(X-(1/3));
  PY = Image1->Height/2 - Y*Image1->Height/2;
  Image1->Canvas->LineTo(PX,PY);
   }
}
Простите, вот тоже маюсь с графиками. только с посторением. Объясните, зачем для координат пикселей брать отдельные переменные и что в этих переменных надо высчитывать?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 18-10-2008 16:14 » 

Bcat5, у него всё сводится к высчитыванию координат PX,PY , а всё остальное - промежуточные вычисления

Цитата
Простите, вот тоже маюсь с графиками.
расскажи, что именно вызывает маету ?
Записан

Bcat5
Гость
« Ответ #6 : 19-10-2008 06:54 » 

Цитата
расскажи, что именно вызывает маету ?

Мне надо плсторить график экспоненты.

Пыталась по-простому, вот так:

float x, fx;
Image1->Canvas->MoveTo(0,0) ;
for (x=0; x<10; x++)
{fx=exp(x);
Image1->Canvas->LineTo(x,fx);}

...Не получается. вернее рисуется, но совсем не экспонента. я вроде как поняла, что дело в координатах пикселей, но не знаю, как их высчитать. или может в чем другом ошибка?
Записан
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 19-10-2008 08:09 » 

Bcat5, Начнём с того, что точка с координатами (0,0) - это левый верхний угол канвы. Отсчёт координат производится слева направо и сверху вниз. То есть, скажем, точка (1,1) будет на пиксел ниже и правее начала координат.

Соответственно, тебе нужно учесть, что твоё "начало координат", от которого ты начинаешь строить график, не должно находиться в (0, 0). В случае с экспонентой, думаю, можно для начала принять за начало координат точку (0, Image1->Width) - левый нижний угол. Поскольку, как я уже сказал, отсчёт реальных координат происходит сверху вниз, то правило преобразования выходит такое: при изображении точки нужно для абсциссы прибавить значение фактическое абсциссы "начала координат", а для ординаты из значения "начала координат" вычесть значение по y для изображаемой точки.

Или на пальцах: есть "начало координат" в точке (X0, Y0) и точка (X1, Y1) в относительных координатах для "привычной" ориентации (скажем, твои (x, fx=exp(x)). Тогда реально тебе нужно изобразить точку с координатами (X0+X1, Y0-Y1).

Но это пока для масштаба "1 пиксел = 1". Если хочешь рисовать более крупный график, нужно масштабировать. По сути, домножить твои (X1, Y1) на желаемый коэффициент. Если хочешь, чтобы 1 условная единица была равна 10 пиксел - умножаешь на 10.
« Последнее редактирование: 19-10-2008 08:11 от Вад » Записан
Bcat5
Гость
« Ответ #8 : 19-10-2008 12:35 » new

Ура!! Заработало!!! Улыбаюсь) Улыбаюсь)
ОГРОМНОЕ-ПРЕОГРОМНОЕ ВАМ СПАСИБО!!!
Вы меня спасли!!  Дарю! Дарю! Дарю! Танцуют все! Дарю! Дарю!
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines