Физические и математические сплайны
Физический сплайн — это пластинка из дерева или другого гибкого материала. Физические сплайны использовались чертежниками для рисования кривых до появления удобных средств рисования математических сплайнов. Чертежники должны были размещать сплайн на листе бумаги и совмещать его с каждой точкой из заданного набора. Затем, проведя карандашом вдоль прижатой к бумаге кромки сплайна, можно было нарисовать нужную кривую. Один набор точек может порождать множество различных кривых в зависимости от свойств физического сплайна. Например, кривая, нарисованная с помощью жесткого сплайна будет отличаться от кривой, нарисованной с помощью очень гибкого сплайна.
Формулы, используемые для построения математических сплайнов, основаны на свойствах гибких стержней, за счет этого кривые, образованные математическими сплайнами, похожи на кривые, нарисованные с помощью физических сплайнов. Точно так же, как физические сплайны разной упругости будут порождать различные кривые для одного набора точек, математические сплайны с различным параметром упругости также будут порождать различные кривые, проходящие через один набор точек. На приведенном ниже рисунке изображены четыре фундаментальных сплайна, проходящих через один набор точек. Для каждого сплайна обозначена его упругость. Упругость, равная 0, соответствует бесконечной физической упругости, из-за которой соответствующая кривая соединяет каждые две соседние точки по кратчайшему пути (по прямой). Упругость, равная 1, соответствует отсутствию физической упругости, за счет которого сплайн занимает положение с наименьшим суммарным изгибом. Если значение упругости превышает 1, кривая начинает действовать как сдавленный берегами ручей, стремящийся увеличить изгиб своих излучин и течь по более длинному пути.
The four splines in the preceding illustration share the same tangent line at the starting point. The tangent is the line drawn from the starting point to the next point along the curve. Likewise, the shared tangent at the ending point is the line drawn from the ending point to the previous point on the curve.
To draw a cardinal spline, you need an instance of the Graphics class, a Pen, and an array of Point objects The instance of the Graphics class provides the DrawCurve method, which draws the spline, and the Pen stores attributes of the spline, such as line width and color. The array of Point objects stores the points that the curve will pass through. The following code example shows how to draw a cardinal spline that passes through the points in myPointArray
. The third parameter is the tension.
myGraphics.DrawCurve(myPen, myPointArray, 1.5f); |
Bézier Splines in GDI+
A Bézier spline is a curve specified by four points: two end points (p1 and p2) and two control points (c1 and c2). The curve begins at p1 and ends at p2. The curve does not pass through the control points, but the control points act as magnets, pulling the curve in certain directions and influencing the way the curve bends. The following illustration shows a Bézier curve along with its endpoints and control points.
The curve starts at p1 and moves toward the control point c1. The tangent line to the curve at p1 is the line drawn from p1 to c1. The tangent line at the endpoint p2 is the line drawn from c2 to p2.
--------
Все четыре сплайна на предыдущем рисунке обладают одинаковой касательной в начальной точке. Касательной к кривой в некоторой точке в простейшем случае называется линия, проходящая через эту точку и через ближайшую к ней точку на кривой. Аналогично, общей касательной к конечной точке называется линия, проведенная через конечную точку и предшествующую ей точку кривой.
Для рисования фундаментальнoго сплайна нужны объекты Graphics, Pen и массив объектов Point. Объект Graphics содержит метод DrawCurve, который выполняет непосредственное рисование сплайна, а объект Pen содержит атрибуты сплайна, такие как цвет и толщина линии. Массив объектов Point содержит все точки, через которые должна пройти кривая. В приведенном ниже примере кода демонстрируется рисование фундаментального сплайна, проходящего через точки, заданные в массиве myPointArray. Третьим параметром является упругость.
------
Сплайны Безье в GDI+
Сплайн Безье — это кривая, задаваемая четырьмя точками: двумя конечными точками (p1 и p2) и двумя контрольными точками (c1 и c2). Кривая начинается в точке p1 и заканчивается в точке p2. Кривая не проходит через контрольные точки. Эти точки действуют на кривую как магниты, растягивая кривую в нужных направлениях и влияя на ее изгиб. На приведенном ниже рисунке демонстрируется кривая Безье и все ее конечные и контрольные точки.
-------
Обратите внимание, что кривая начинается в точке p1 и дальше идет в направлении контрольной точки c1. Касательная к кривой в точке p1 проходит через точку c1. А касательная линия в конечной точке p2 проходит через точку c2.
Drawing Bézier Splines
To draw a Bézier spline, you need an instance of the Graphics class and a Pen. The instance of the Graphics class provides the DrawBezier method, and the Pen stores attributes, such as width and color, of the line used to render the curve. The Pen is passed as one of the arguments to the DrawBezier method. The remaining arguments passed to the DrawBezier method are the endpoints and the control points. The following example draws a Bézier spline with starting point (0, 0), control points (40, 20) and (80, 150), and ending point (100, 10):
myGraphics.DrawBezier(myPen, 0, 0, 40, 20, 80, 150, 100, 10); |
The following illustration shows the curve, the control points, and two tangent lines.
Bézier splines were originally developed by Pierre Bézier for design in the automotive industry. They have since proven to be useful in many types of computer-aided design and are also used to define the outlines of fonts. Bézier splines can yield a wide variety of shapes, some of which are shown in the following illustration.
- Объекты Graphics и Drawing в Windows Forms
- Обзор графических возможностей
- Интерфейс управляемых классов
- Три категории графических служб
- Двухмерная векторная графика
- Рисунки
- Типографская разметка
- Структура интерфейса Graphics
- Важные классы
- Прямые и кривые линии и фигуры
- Общие сведения о векторной графике
- Методы рисования с помощью графических объектов
- Рисование линии
- Создание объекта Pen
- Штриховые линии и завершения отрезков
- Рисование прямоугольника
- Рисование эллипса
- Рисование дуги
- Рисование многоугольника
- Физические и математические сплайны
- Рисование сплайнов Безье
- Применение контуров
- Сплошные кисти
- Штриховые кисти
- Текстурные кисти
- Градиентные кисти
- Управляемый интерфейс для кривых
- Использование областей
- Задание области обрезки
- Сглаживание прямых и кривых линий
- Неровности
- Сглаживание
- Работа с растровыми и векторными изображениями с использованием классов Image, Bitmap и Metafile
- Типы точечных рисунков
- Форматы графических файлов
- Форматы метафайлов
- Типы файлов и клонирование
- Варианты DrawImage
- Системы координат и преобразования
- Типы систем координат
- Преобразования и системы координат
- Матричное представление преобразований
- Составные преобразования
- Глобальные и локальные преобразования
- Глобальные преобразования
- Локальные преобразования
- Использование управляемых графических классов Приступая к программированию графики
- Создание объектов Graphics для рисования
- Создание объекта Graphics
- PaintEventArgs в обработчике события Paint
- Получение ссылки на объект Graphics из объекта PaintEventArgs в событии Paint
- Рисование фигур и изображений и управление ими
- Создание фигурной формы Windows Forms
- Компиляция кода
- Копирование пикселов для уменьшения эффекта дрожания изображения в Windows Forms
- Компиляция кода
- Рисование линий и фигур с помощью пера
- Рисование линий с помощью пера
- Компиляция кода
- Рисование прямоугольников с помощью пера
- Компиляция кода
- Задание толщины и выравнивания пера
- Изменение толщины пера
- Изменение выравнивания пера
- Создание вложенного пера
- Рисование линий с наконечниками
- Компиляция кода
- Соединение линий
- Компиляция кода
- Рисование пользовательских пунктирных линий
- Компиляция кода
- Рисование линии с текстурным заполнением
- Компиляция кода
- Использование кисти для заливки фигур
- Заливка фигуры сплошным цветом
- Компиляция кода
- Штриховая заливка фигуры
- Компиляция кода
- Заливка фигуры текстурой, созданной на основе изображения
- Компиляция кода
- Мозаичное заполнение фигуры заданным изображением
- Мозаичное заполнение изображением
- Горизонтальное зеркальное преобразование изображения при мозаичном заполнении
- Вертикальное зеркальное преобразование изображения при мозаичном заполнении
- Мозаичное заполнение с зеркальным отображением изображения по горизонтали и вертикали
- Заливка фигур с помощью градиентной кисти
- Создание линейного градиента
- Использование горизонтальных линейных градиентов
- Настройка линейных градиентов
- Создание диагональных линейных градиентов
- Создание градиента вдоль контура
- Заливка эллипса с использованием градиента контура
- Указание точек на границе
- Настройка градиента контура
- Настройка с интерполяцией
- Задание центральной точки
- Применение гамма-коррекции к градиенту
- Компиляция кода
- Загрузка и отображение метафайлов
- Компиляция кода
- Обрезка и масштабирование изображений
- Компиляция кода
- Поворот, отражение и наклон изображений
- Компиляция кода
- Использование режима интерполяции для управления качеством изображений при масштабировании
- Компиляция кода
- Создание эскизов изображений
- Компиляция кода
- Повышение производительности за счет отключения автоматического масштабирования
- Компиляция кода
- Чтение метаданных изображения
- Значение
- Пример Описание
- Компиляция кода
- Создание растрового изображения во время выполнения
- Компиляция кода
- Извлечение связанного с файлом значка в Windows Forms
- Компиляция кода
- Альфа-смешение цвета для линий и заливок
- Рисование непрозрачных и полупрозрачных линий
- Компиляция кода
- Рисование непрозрачными и полупрозрачными кистями
- Компиляция кода
- Использование режима комбинирования для управления альфа-смешением
- Компиляция кода
- Использование матрицы цветов для задания значений прозрачности в изображениях
- Компиляция кода
- Шрифты и текст
- Разработка шрифтов и их семейств
- Компиляция кода
- Рисование текста в указанной позиции
- Рисование строки текста с использованием gdi
- Компиляция кода
- Многострочный вывод текста в прямоугольнике
- Рисование текста с переносом по словам в прямоугольнике с помощью gdi
- Компиляция кода
- Рисование текста с использованием gdi
- Компиляция кода
- Выравнивание рисуемого текста
- Рисование центрированного текста с использованием gdi (DrawText)
- Компиляция кода
- Вывод текста по вертикали
- Компиляция кода
- Установка позиций табуляции для выводимого текста
- Компиляция кода
- Перебор установленных шрифтов
- Компиляция кода
- Получение метрик шрифтов
- Компиляция кода
- Сглаживание текста
- Компиляция кода
- Построение и рисование кривых
- Рисование фундаментальных сплайнов
- Рисование фундаментального сплайна в форме колокола
- Рисование замкнутого фундаментального сплайна
- Изменение изгиба фундаментального сплайна
- Компиляция кода
- Рисование отдельного сплайна Безье
- Компиляция кода
- Рисование последовательности сплайнов Безье
- Компиляция кода
- Построение и рисование контуров
- Создание изображений из прямых и кривых линий и геометрических фигур
- Компиляция кода
- Заливка открытых фигур
- Компиляция кода
- Спрямление участков кривой
- Спрямление контура
- Использование объемного преобразования
- Различные типы преобразований
- Значение порядка преобразований
- Примеры составных преобразований
- Использование графических контейнеров
- Управление состоянием объекта Graphics
- Состояние объекта Graphics
- Параметры качества
- Преобразования
- Область обрезки
- Использование вложенных графических контейнеров
- Преобразования во вложенных контейнерах
- Обрезка во вложенных контейнерах
- Параметры качества во вложенных контейнерах
- Различные уровни вложенных контейнеров
- Использование областей
- Проверка нахождения указателя мыши в заданной области
- Компиляция кода
- Обрезка изображения по границам области обрезки
- Компиляция кода
- Получение списка установленных кодировщиков
- Компиляция кода
- Получение списка установленных декодеров
- Компиляция кода
- Компиляция кода