Методы изображения эллипсов, дуг, сегментов и секторов эллипсов.
Эллипс Метод DrawEllipse рисует эллипс, вписанный в прямоугольную область, главные оси которой параллельны осям мировой системы координат, расположение и размеры которой передаются ему в качестве параметров. Предусмотрено четыре перегруженных варианта метода DrawEllipse: public void DrawEllipse(Pen, Rectangle); Как видите, эти методы отличаются только способом, при помощи которого описывается расположение и размеры прямоугольной области, в которую вписан эллипс. Вы можете задавать расположение и размеры этой области в виде рассмотренных ранее объектов класса Rectangle, RectangleF, а также в виде целых чисел или числе с плавающей десятичной точкой.
Сегмент эллипса При помощи метода DrawArc программа может нарисовать сегмент эллипса. Сегмент задается при помощи координат прямоугольной области, в которую вписан эллипс, а также двух углов, отсчитываемых в направлении против часовой стрелки. Первый угол Angle1 задает расположение одного конца сегмента, а второй Angle2 — расположение другого конца сегмента. Предусмотрено четыре перегруженных варианта метода DrawArc: public void DrawArc(Pen, Rectangle, float, float); Первый параметр метода DrawArc определяет перо, с помощью которой будет нарисован сегмент. Последние два параметра задают углы Angle1 и Angle2. Расположение и размеры прямоугольной области передаются методу DrawArc аналогично тому, как это делается для рассмотренного выше метода DrawEllipse. Для рисования сегмента эллипса мы создали приложение DrawArcApp. Вся работа по рисованию выполняется внутри обработчика события Form1_Paint: private void Form1_Paint(object sender, Graphics g=e.Graphics; Здесь мы использовали вариант метода DrawArc, допускающий указание расположения и размеров прямоугольной области, а также углов в виде целых чисел. 8. Аффинные преобразования. Структура матрицы преобразования однородных координат для физического трёхмерного пространства. Аффинные преобразования (от лат. affinis – родственный) представляют собой точечные взаимно однозначные отображения пространства (плоскости) на себя, при которых прямые переходят в прямые. Произвольное аффинное преобразование задается матричной формулой M'=M*P+D (2.1) Из (2.1) следует, что суперпозиция аффинных преобразований эквивалентна вычислению матричных выражений в соответствии с правилами линейной алгебры.
Обычно выделяют три основных вида аффинных преобразований: перенос, поворот и масштабирование. Перенос переводит точку M(x,y,z)T в точку M'(x' = x+Dx, y' = y+Dy, z' = z+Dz) T. Уравнение переноса в матричной форме:
(2.2) Рассмотрим сначала плоский случай поворота относительно начала координат. Осуществим поворот вокруг точки начала координат на произвольный угол j. Рассмотрим радиус-вектор точки M). Обозначим r— длину вектора, а q —угол между вектором и осью х. Радиус-вектор поворачивается вокруг начала координат на угол j и попадает в точку M'. Записав векторы для M и M', получаем: M = (x,y)= (r cos q, r sin q) и M' = (x',y')= (r cos (q+j), r sin (q+j)) Используя формулу для cos суммы углов, перепишем выражение для M' следующим образом M' = (х', у') = (r(cos q cos j - sin q sin j), r(cos q sin j + sin q cos j)). Используя определения х и у, можно переписать M ' как M' = (x', y') = (x cosj-y sinj, x sinj +y cosj). Таким образом, преобразованная точка имеет координаты х' = х cos j -у sin j у' = х sin j + у cos j. или в матричном виде Для применения обратного пребразования найдем матрицу поворота на -j.
Эту же матрицу можно получить из общих соображений как обратную к P. В данном случае матрица ортогональная (det(P) = 1) => P-1=PT Таким образом, поворот против часовой стрелки на заданный угол j вокруг оси аппликат OZ переводит точку M(x,y,z) в точку M'(x', y', z') в соответствии со следующими уравнениями (в координатной и матричной формах): x' = x*cos j - y*sin j, y' = x*sin j + y*cos j; z' = z,
Поворот против часовой стрелки на заданный угол j вокруг оси абсцисс OX переводит точку M(x,y,z) в точку M'(x', y', z') в соответствии со следующими уравнениями (в координатной и матричной формах): x' = x, y' = y*cos j - z*sin j, z' = y*sin j + z*cos j; (2.3) (2.4) Поворот против часовой стрелки вокруг оси ординат OY задается следующим образом: x' = x*cos j + z*sin j, y' = y, z' = -x*sin j + z*cos j; (2.5)
Рис 2.1. Повороты точки вокруг координатных осей (по [2]). Нетрудно заметить, что при преобразованиях поворота и переноса длины отрезков и углы между ними не изменяются. Масштабирование изображения вдоль осей OX, OY, OZ задается формулами x' = sx*x; y' = sy*y, z' = sz*z, (2.9) где sx,sy,sz ¹ 0 – коэффициенты масштабирования изображения вдоль соответствующей оси. Матричная запись (2.9): (2.10)
Если абсолютное значение коэффициента масштабирования вдоль какой-либо оси больше 1, имеет место растяжение изображения вдоль данной оси, если меньше 1 – сжатие. Отрицательное значение коэффициента масштабирования вдоль оси означает зеркальное отражение точки относительно координатной плоскости, перпендикулярной данной оси. На рис. 2.2 правая сцена получена из левой сжатием по оси OX и растяжением по осям OY и OZ Произвольное аффинное преобразование всегда может быть сведено к выполнению преобразований переноса, поворота и масштабирования в некотором порядке. Это позволяет использовать приведенные выше стандартные формулы для вычисления более сложных аффинных преобразований. Рассмотрим сначала общее аффинное преобразование на плоскости, переводящее М(x;y) в М’(x’;y’) x’ = ax+by+n y’ = cx+dy+m (1) Легко видеть, что его нельзя описать одной матрицей 2-го порядка. Это можно сделать матрицей 3-го порядка, введя т.н. однородные координаты. Однородные координаты точки на плоскости (x,y) представляют собой тройку (x*, y*, h), такую что x*=hx, y* = hy, h – некоторое число, отличное от нуля (h=0 – особый случай). Очевидeн переход от однородных координат к обычным: x = x*/h; y = y*/h.Таким образом, одной точке на плоскости соответствует бесконечно много троек однородных координат. Например, тройки (2; 4;1), (-4;-8;-2), (1;2; 0,5) представляют одну и ту же двумерную точку (2;4). Заметим, что при h = 1 x* = x, y* = y. Множество таких троек часто называют физической плоскостью однородных координат. Матрица преобразования для однородных координат имеет размер (3х3). Матрица поворота имеет вид Р1 = Матрица масштабирования имеет вид Р2 = Матрица переноса имеет вид Р3 = При этом композиция переносов, масштабирований и поворотов сводится к перемножению матриц. Преобразование (1) запишется в виде M’ = MP, где P = Четырехмерные однородные координаты трехмерного физического пространства вводятся аналогично.
|