Graphics and Drawing in Windows Forms
The common language runtime uses an advanced implementation of the Windows Graphics Device Interface (GDI) called GDI+. With GDI+ you can create graphics, draw text, and manipulate graphical images as objects. GDI+ is designed to offer performance and ease of use. You can use GDI+ to render graphical images on Windows Forms and controls. Although you cannot use GDI+ directly on Web Forms, you can display graphical images through the Image Web Server control.
In this section, you will find topics that introduce the fundamentals of GDI+ programming. Although not intended to be a comprehensive reference, this section includes information about the Graphics, Pen, Brush, and Color objects, and explains how to perform such tasks as drawing shapes, drawing text, or displaying images. For more information, see GDI+ Reference.
If you’d like to jump in and get started right away, see Getting Started with Graphics Programming. It has topics on how to use code to draw lines, shapes, text, and more on Windows forms.
In This Section
Graphics Overview
Provides an introduction to the graphics-related managed classes.
About GDI+ Managed Code
Provides information about the managed GDI+ classes.
Using Managed Graphics Classes
Demonstrates how to complete a variety of tasks using the GDI+ managed classes.
Reference
System.Drawing
Provides access to GDI+ basic graphics functionality.
System.Drawing.Drawing2D
Provides advanced two-dimensional and vector graphics functionality.
System.Drawing.Imaging
Provides advanced GDI+ imaging functionality.
System.Drawing.Text
Provides advanced GDI+ typography functionality. The classes in this namespace can be used to create and use collections of fonts.
Related Sections
Custom Control Painting and Rendering
Details how to provide code for painting controls.
Построение графика произвольной функции c#
подскажите библиотеку для построения произвольных графиков функции в C#. т.е передаёшь например f(x)=sin(x) и на какой-нибудь канвас выводит синусоиду.
3 ответа 3
Зачем искать какие-то библиотеки, если это легко можно реализовать с помощью стандартных средств WinForms: для построения графиков использовать Chart, а для вычисления выражений — скажем, JavaScript в невидимом WebBrowser. Конечно, можно задействовать средства динамической компиляции и вычислять выражения на C#, но, я думаю, с JavaScript попроще будет.
Данный пример позволяет построить график функции, задаваемой любым JS-выражением:
Если перенастроить WebBrowser на новую версию IE через реестр, можно и прямо в нем графики строить, через HTML5 Canvas.
Все-таки здесь два этапа:
Рассчитать координаты точек на графике. Для этого есть mXparser http://mathparser.org/
Построить сам график из этих точек. Здесь миллион вариантов, выбирайте на вкус https://www.nuget.org/packages?q=Tags%3A%22plotting%22
Хоть это и не точный ответ на вопрос по поводу библиотек, т.к. сам тоже не нашел.
Есть один запасной для вас вариант:
Создаете функцию которая принимает x и строку фукнции, вида «x^2+2*x-3»
В строке, символ ‘x’ заменяете на значение переменной x что бы вышло что то типа:
Алгоритмом польской нотации считаете выражение, и возвращаете ответ. Примеры и объяснения польской записи хорошо доступны. Создаете массив для отображения графика. И в своем массиве для каждого элемента вызываете функцию, передавая x на промежутке (xmin;xmax), и сам вид функции как string.
Для самих графиков можно использовать Chart в .NET
Всё ещё ищете ответ? Посмотрите другие вопросы с метками c# winforms поиск-библиотек или задайте свой вопрос.
Связанные
Похожие
Подписаться на ленту
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
дизайн сайта / логотип © 2020 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2020.10.14.37815
Построение графика функции в windows forms
БлогNot. Visual C++: построение графиков с интерпретацией введённой пользователем функции
Visual C++: построение графиков с интерпретацией введённой пользователем функции
В принципе, вся нужная информация есть вот здесь, сделаем по ней законченный проект.
Структура основной формы показана на рисунке, компоненты в panel1 перечислены по порядку в форме слева направо, что обеспечивает и нормальный порядок обхода полей по клавише табуляции.
Текстовым полям можно ограничить максимальный размер вводимой строки (свойство MaxLength ). Также panel1 расположена со свойством Dock=Top , а chart1 со свойством Dock=Fill . Это обеспечит нормальное взаимодействие компонент при изменении размеров окна. У самой формы выставлены Size и MinimumSize в значение 640; 400 — чтобы не «исчезали» кнопки при уменьшении окна.
Текстовым полям также даны значения по умолчанию, дробные части вещественных чисел при этом отделены точкой, а не запятой — будем так делать во всём проекте.
Как альтернатива, можно формировать вещественные значения полей динамически в зависимости от текущего разделителя (например, по событию Load формы 1):
В форму также добавлено глобальное свойство типа NumberFormatInfo
которое проинициализировано в её конструкторе:
Основная работа выполняется по нажатию на кнопку OK ( button1_Click ). Сначала проверяем допустимость введённых данных с помощью пары служебных методов Parse (получить число) и Check (проверить правильность записи функции, попробовав получить её значение от 1-го аргумента). Потом метод Go делает цикл по нужным значениям аргумента, формируя диаграмму. Если возникает ошибка парсера, о ней выводится сообщение, но программа не завершается. Просто в данных не будет какой-то пары значений.
Парсер тот же, что по ссылке выше. Вот полный код фрагмента:
Единственная новая по отношению к статье мелочь —
Если национальные стандарты предполагают, что дробная часть вещественного числа отделяется от целой запятой, а не точкой, вместо оператора
Добавим в проект вторую форму, куда можно будет выводить таблицы данных из диаграммы. Для этого обратимся к меню Проект — Добавить новый элемент — Форма Windows Forms и назовём её Form2 . На вторую форму добавим DataGridView , поставим ему свойства Dock=Fill , ScrollBars=Vertical и подготовим 2 столбца для вывода значений X и Y:
У этой формы будет единственный публичный метод — принять пару значений (x,y) и добавить их в таблицу:
Такой код метода Do работает при установке свойства
так как при значении true в таблице есть «дополнительная» пустая строка, которая тоже участвует в нумерации.
А вызывать этот метод будет вторая кнопка tab с первой формы (функция button2_Click ), при этом, сначала создастся новый экземпляр Form2 , чтобы можно было сравнить несколько таблиц:
Чтобы это сработало, заинклудьте заголовки второй формы в начале кода Form1.h :
Разумеется, сам парсер тоже подлючён. Это весь проект, можно собирать. Вот пример работы программы:
Выражения в парсере пишутся «не совсем на C++», загляните в файл parser.cpp и увидите это, ещё лучше, можете модифицировать код парсера под свои нужды. Ну и ещё много что можно улучшить, а я выложу проект в текущем «образовательном» состоянии.
Скачать этот проект Visual C++ в архиве .zip (21 Кб)
P.S. Для совместимости с Visual Studio 2015 достаточно сделать вот такой главный файл проекта Lab4.cpp :
Самые очевидные улучшения:
- округлять вводимые и вычисляемые значения до некого удобного количества знаков в дробной части;
- ограничить максимальное количество узлов сетки, например, некой константой maxCollectionSize . При «слишком большом» размере коллекции Dictionary приложение может зависнуть, а какой размер «слишком большой», знает только Studio;
- найти минимальное и максимальное значения функции, назначив их затем меткам оси Y, выполнить ту же работу и для оси X;
- следить, не получилось ли при расчёте «не-число» Y с помощью isnan(y) || isinf(y) ;
- следить, не добавляются ли повторно в коллекцию элементы с тем же ключом, с помощью ContainsKey и т.д.
Вот набросок чуть «улучшенного» проекта для Studio 2015:
Скачать архив .zip с папкой этого проекта Visual Studio 2015 (21 Кб)
P.P.S. Решение едва ли предназначено для консольных приложений из-за не слишком удобных преобразований между строками библиотеки .NET и «классическими» строками std::string или char * . Тем не менее, поизвращаться, конечно, можно, скажем, вот такой код главного модуля проекта годится для консольного приложения Visual Studio 2015:
Как видно из примера, нам пришлось дополнительно написать собственную функцию str_replace для замены строки char * на другую строку, чтобы обеспечить циклическую подстановку значений x в табулируемую функцию f(x) .
А вот архив с этим проектом Visual Studio 2015, с точностью до платформы (выбирается вверху из списков «Конфигурации решения», «Платформы решения») должно работать везде 🙂 Конечно же, выражение для нужной функции от аргумента «x» малое и нужные пределы изменения аргумента вы можете не только задать константами, но и прочитать откуда-то (с той же консоли или из файла).
Скачать архив .zip с консольной версией проекта построения графика произвольной функции, Visual Studio 2015 (6 Кб)
14.03.2015, 12:47; рейтинг: 31545