как построить график в windows forms c
Как построить график функции в windows forms c#?
Мне нужно нарисовать график функции циссоиды Диокла.
Так как я не очень понимаю как эту функцию вставить в windows forms c#, я использовал уравнение циссоиды в прямоугольной системе координат:
Вот мой код:
К сожалению, получается совсем не то, что нужно:
Я думаю, что проблема в том, как я записываю функцию. Может ли кто-то помочь мне решить это?
Тут у вас сразу несколько ошибок:
1. Нужно явно приводить к double иначе при делении двух int получите тоже целое.
2. Вы берете очень большие границы. Рост знаменателя намного превышает скорость роста числителя. Сами посмотрите: возведите 50 в куб, что получите? График вы конечно построите, но наглядности будет немного.
Что более важно: ваш отрезок OA = 2*a, а это значит что ваша правая граница точно должна быть меньше чем 2*a;
Собирая все вместе, попробуйте что-то вроде такого:
BestProg
Разработка программы рисования графика функции двух переменных ( 3D )
В работе описывается разработка программы построения графика функции двух переменных
z = f(x, y)
В качестве примера, выбрана функция
z = sin(x) + cos(y)
Используя данный пример, можно создавать собственные программы для построения графиков других функций. По желанию можно модернизировать работу программы по своему усмотрению.
Содержание
Поиск на других ресурсах:
Условие задачи
⇑
Математическая постановка задачи
Построение графика функции двух переменных есть математически решаемой задачей, в которой используются известные формулы вычисления.
Также возникает понятие углов:
После перемножения матриц получаем формулу для вычисления:
По этой формуле будет происходить преобразование системы координат и масштабирование (рисунок 1).
Рис. 1. Сдвиг и поворот системы координат
Координаты расчетной точки (x, y) прижимаются к точке (0, 0) по формулам:
⇑
Выполнение
1. Создание проекта как Windows Forms Application
⇑
Создать форму по образцу, как показано на рисунке 2.
Рис. 2. Вид основной формы программы
Настроить следующие свойства компонент и формы:
⇑
Создать новую форму. Подробный процесс создания новой формы описывается здесь .
Имена файлов формы « Form2.cs » и « Form2.Designer.cs «.
Разместить на форме четыре компонента типа Button. Автоматически создается четыре объекта с именами button1, button2, button3, button4.
Настроить свойства компонент и формы следующим образом:
Приблизительный вид формы Form2 изображен на рисунке 3.
Рис. 3. Форма Form2 приложения
Все внутренние переменные, использующиеся для организации вывода графика, размещаются в классе формы Form2. Поэтому, сначала надо активизировать модуль « Form2.pas ».
В модуль формы Form2 вводятся следующие внутренние переменные с классом видимости private:
В разделе public вводятся:
После введения переменных в текст программы, фрагмент класса формы Form2 имеет вид:
⇑
В текст класса Form2 вводятся три дополнительных метода:
Листинг метода преобразования системы координат следующий:
Листинг метода func() следующий.
В этом методе вместо строки
можно сделать вставку собственной функции.
Объясним некоторые фрагменты кода в методе Show_Graphic().
Область определения функции z = f(x,y) разбивается на прямоугольники, на любом из которых функция экстраполируется с ребрами четырехугольника. Построение четырехугольников на экране реализуется с помощью метода DrawLine().
После очистки канвы происходит рисование осей координат и методом DrawLine() выводятся фрагменты поверхности.
При рисовании поверхности, из метода Show_Graphic() вызывается метод Zoom_XY(), что осуществляет преобразование и масштабирование из реальных координат в экранные координаты.
⇑
6. Программирование события Paint формы Form2.
Чтобы получить объект Graphics, нужно запрограммировать событие Paint формы Form2. Пример программирования события в MS Visual Studio – C# описывается здесь подробно.
Параметр типа PaintEventArgs содержит объект Graphics, необходимый для рисования на поверхности формы.
Листинг обработчика события Form2_Paint() следующий.
⇑
7. Программирование обработчиков событий клика на кнопках button1, button2, button3, button4.
Поворот графика происходит в момент, когда пользователь делает клик на одной из кнопок, размещенных на форме Form2 (элементы управления button1, button2, button3, button4).
Поэтому, в обработчиках событий происходит изменение значений alfa и beta на некоторую величину. По желанию, можно установить собственную величину изменения alfa и beta.
Листинг обработчиков событий приведен ниже.
В вышеприведенных обработчиках событий, событие Paint генерируется явно с помощью унаследованного метода Invalidate(). Этот метод делает перерисовывание всей клиентской области программным путем.
Метод Invalidate() имеет несколько перегруженных вариантов. Например, если нужно обновить заданный прямоугольник, то нужно создать такой код:
⇑
8. Программирование обработчиков событий MouseDown, MouseMove и MouseUp.
Для осуществления поворота графика с помощью мышки нужно запрограммировать соответствующие обработчики событий.
Если нажать клавишу мыши и удерживать ее нажатой над формой Form2, а потом отпустить, то генерируются такие события (рисунок 4):
Рис. 4. События MouseDown, MouseMove, MouseUp
⇑
9. Листинг модуля « Form2.cs ».
Ниже приведен полный текст файла ” Form2.cs ”, который соответствует форме Form2.
⇑
10. Программирование события клика на кнопке button1 формы Form1 (вызов формы рисования графика функции).
При клике на кнопке button1 из формы Form1 может выводиться график функции.
Обработчик события клика на кнопке Button1 имеет вид.
11. Запуск программы.
После запуска программы на выполнение, форма графика функции изображена на рисунке 5.
Рис. 5. Результат выполнения программы
⇑
Программирование: теория и практика
Рубрики
Свежие записи
При использовании материалов сайта, ссылка на сайт обязательна.
Построение графика произвольной функции c#
подскажите библиотеку для построения произвольных графиков функции в C#. т.е передаёшь например f(x)=sin(x) и на какой-нибудь канвас выводит синусоиду.
3 ответа 3
Все-таки здесь два этапа:
Рассчитать координаты точек на графике. Для этого есть mXparser http://mathparser.org/
Построить сам график из этих точек. Здесь миллион вариантов, выбирайте на вкус https://www.nuget.org/packages?q=Tags%3A%22plotting%22
Данный пример позволяет построить график функции, задаваемой любым JS-выражением:
Если перенастроить WebBrowser на новую версию IE через реестр, можно и прямо в нем графики строить, через HTML5 Canvas.
Хоть это и не точный ответ на вопрос по поводу библиотек, т.к. сам тоже не нашел.
Есть один запасной для вас вариант:
Создаете функцию которая принимает x и строку фукнции, вида «x^2+2*x-3»
В строке, символ ‘x’ заменяете на значение переменной x что бы вышло что то типа:
Алгоритмом польской нотации считаете выражение, и возвращаете ответ. Примеры и объяснения польской записи хорошо доступны. Создаете массив для отображения графика. И в своем массиве для каждого элемента вызываете функцию, передавая x на промежутке (xmin;xmax), и сам вид функции как string.
Всё ещё ищете ответ? Посмотрите другие вопросы с метками c# winforms поиск-библиотек или задайте свой вопрос.
Связанные
Похожие
Подписаться на ленту
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
дизайн сайта / логотип © 2021 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2021.11.10.40715
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Рисование графиков элемент chart
На форме расположены 3 элемента: char1, char2,char3.
На каждом char надо построить 2 графика. По оси X градуировка 1,2,3,4,5. По оси Y данные берутся их пяти text.Box для одного графика и из 5-ти textBox для другого графика. Надо построить по 2 графика на char1, char2,char3.
Еще вопрос можно ли название serios, которое находится справа от графика поместить вверху, а то эта надпись отбирает лишнее место у элемента char.
Добавлено через 19 часов 42 минуты
Разобрался может кому пригодится. Все делается через свойства компонента chart.
Для одного компонента chart1 будет выглядеть так
Рисование графиков в Chart
Добрый день. Пытаюсь нарисовать на одном Chart динамическое количество графиков, которое зависит.
Пересечение графиков Chart
День добрый. Подскажите пожалуйста как автоматически высчитать или узнать точку пересечения линий.
Построение графиков в Chart
доброго времени суток уважаемые форумчане. у меня возник вопрос связанный с построением графиков.
Chart и чтение графиков
Всем привет, возник такой вопрос. Как сделать график читабельным? Чтобы при наведении всплывали.
Как построить график в windows forms c
БлогNot. Visual C++: построение графиков с интерпретацией введённой пользователем функции
Visual C++: построение графиков с интерпретацией введённой пользователем функции
В принципе, вся нужная информация есть вот здесь, сделаем по ней законченный проект.
Структура основной формы показана на рисунке, компоненты в panel1 перечислены по порядку в форме слева направо, что обеспечивает и нормальный порядок обхода полей по клавише табуляции.
Как альтернатива, можно формировать вещественные значения полей динамически в зависимости от текущего разделителя (например, по событию Load формы 1):
В форму также добавлено глобальное свойство типа NumberFormatInfo
которое проинициализировано в её конструкторе:
Основная работа выполняется по нажатию на кнопку OK ( button1_Click ). Сначала проверяем допустимость введённых данных с помощью пары служебных методов Parse (получить число) и Check (проверить правильность записи функции, попробовав получить её значение от 1-го аргумента). Потом метод Go делает цикл по нужным значениям аргумента, формируя диаграмму. Если возникает ошибка парсера, о ней выводится сообщение, но программа не завершается. Просто в данных не будет какой-то пары значений.
Парсер тот же, что по ссылке выше. Вот полный код фрагмента:
Если национальные стандарты предполагают, что дробная часть вещественного числа отделяется от целой запятой, а не точкой, вместо оператора
Такой код метода Do работает при установке свойства
так как при значении true в таблице есть «дополнительная» пустая строка, которая тоже участвует в нумерации.
Чтобы это сработало, заинклудьте заголовки второй формы в начале кода Form1.h :
Разумеется, сам парсер тоже подлючён. Это весь проект, можно собирать. Вот пример работы программы:
Выражения в парсере пишутся «не совсем на C++», загляните в файл parser.cpp и увидите это, ещё лучше, можете модифицировать код парсера под свои нужды. Ну и ещё много что можно улучшить, а я выложу проект в текущем «образовательном» состоянии.
P.S. Для совместимости с Visual Studio 2015 достаточно сделать вот такой главный файл проекта Lab4.cpp :
Вот набросок чуть «улучшенного» проекта для Studio 2015:
А вот архив с этим проектом Visual Studio 2015, с точностью до платформы (выбирается вверху из списков «Конфигурации решения», «Платформы решения») должно работать везде 🙂 Конечно же, выражение для нужной функции от аргумента «x» малое и нужные пределы изменения аргумента вы можете не только задать константами, но и прочитать откуда-то (с той же консоли или из файла).