На нашем сайте мы используем cookie для сбора информации технического характера и обрабатываем IP-адрес вашего местоположения. Продолжая использовать этот сайт, вы даете согласие на использование файлов cookies. Здесь вы можете узнать, как мы пользуемся файлами cookies.
Я согласен
логотип upread.ru

График функции на C++ в GUI с анимацией



Предположим, что у вас вот такое задние: создать GUI C++ VS приложение графики и анимации. Например, конкретно, такое:

Требуется разработать приложение, которое:
  1. Обеспечивает возможность задания параметра p в каноническом уравнении параболы в прямоугольной системе координат (y2 = 2px, p>0).
  2. Выводит кривую на экран.
  3. Анимирует построение параболы.
Итак, так как у нас в задаче есть слово GUI, то проект в визуал студио будем делать типа «приложение Windows Forms» (есть и другие способы, но этот простейший и для студенческого задания подходит прекрасно). На форму накидаем pictureBox (для графика функции), textBox (для ввода параметра p для параболы) и кнопку, после нажатия на которую будет рисоваться наш анимированный график.



Рисовать будем по точкам, используя два массива с их координатами.

int m_x[200];
int m_y[200];
После нажатия кнопки «Рисовать!» инициализируем (очищаем) эти массивы координат в цикле:
for (int i1=0; i1<200; i1++){
m_x[i1]=0;
m_y[i1]=0;
}
Получаем параметр p

double p = Convert::ToDouble(textBox1->Text);
Заполняем массив координат по формуле:

for (i=0; i<150; i++){
x = x + 1;
m_x[i] = x;
y = Convert::ToInt32(sqrt((double)(2*p*x)));//вычисляем y 
m_y[i] = y;
pictureBox1->Refresh();
}
Рисуем параболу по точкам

for (int j=0; j<199; j++){
	e->Graphics->FillRectangle(System::Drawing::Pens::Red->Brush, m_x[j]+200, m_y[j]+200, 1, 1);//одно значение y
	e->Graphics->FillRectangle(System::Drawing::Pens::Red->Brush, m_x[j]+200, 0-m_y[j]+200, 1, 1);// второе значение y
}
Точнее, рисуем не по точкам, а по закрашенным прямоугольникам. Здесь два значения y – следуя каноническому уравнению параболы. Результат:



Стоит отметить, что в программе еще нобходимо реализовать так называемую «защиту от дураков» (ввод букв вместо цифр, к примеру), а также обеспечить проверку на >0. Еще необходимо немного изменить анимацию: более правильно будет делать её или в отдельном потоке, или через таймер. Зачем? Дело в том, что когда у нас идет прорисовка графика функции, все приложение зависает и не откликается. Правда, анимация параболы идет не более двух секунд, но все равно это не совсем правильно. Расчеты и прорисовка реализуются в разных методах и потоках (backgroundWorker).

Это был пример создания GUI C++ VS приложение графики и анимации. На самом деле их немало, есть, к примеру, и такие:

Требуется разработать приложение, которое:
  1. Обеспечивает возможность задания длин сторон треугольника (с проверкой возможности построения).
  2. Выводит треугольник на экран.
  3. Анимирует построение описанной окружности (рассмотреть остроугольный, тупоугольный и прямоугольный треугольник).
Алгоритм решения данной задачи аналогичен. Но здесь мы будем рисовать уже не точками, а линиями треугольник. А вот для описанной окружности – дуга, у которой меняется конечный угол. Основная сложность в этой задаче – запрограммировать формулу описанной окружности и не ошибиться – она громоздкая. У меня большой опыт создания таких несложных приложений на C++ в визуал студио – обращайтесь.




Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.



тегистатьи IT, си плюс плюс, графики, функции, gui

Читайте также:




Пошаговое руководство по верстке на вордпресс. Глава четвертая: футер и поиск
Окно на сайт, всплывающее через некоторое время


© upread.ru 2013-2022
При перепечатке активная ссылка на сайт обязательна.
Задать вопрос
письмо
Здравствуйте! Вы можете задать мне любой вопрос. Если не получается отправить сообщение через эту форму, то пишите на почу up777up@yandex.ru
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.