Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб_2_7-2_8 Иерархия классов и виртуальные функ...doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
179.71 Кб
Скачать

Init();

}

public G2p this[int i] // Узнать/Задать координаты i-й точки

{ get {

if (i >= 0 && i < n) return new G2p(coord[i, 0],coord[i, 1]);

else return new G2p(0,0);

}

set { if (i >= 0 && i < n)

{ coord[i, 0] = value.x;

coord[i, 1] = value.y;

}

}

}

Virtual public void Init()

// Инициализировать координаты точек в соответствии с фигурой

{ for (int i = 0; i < n; i++)

{ // в данном случае просто расположим точки на прямой 0,0 - n,n

coord[i, 0] = i;

coord[i, 1] = i;

}

}

Virtual public void Draw(Graphics g1, Pen p1,

double mx1,double my1,double x01,double y01,double alpha1)

// Нарисовать фигуру в требуемом масштабе, со смещением и поворотом,

// на указанной поверхности заданным пером

{

G2p p;

for (int i = 0; i < n; i++)

{ // В данном случае рисуются только опорные точки

// в виде окружностей с диаметром = 10 и толщиной линии = 5

Pen p2 = (Pen)p1.Clone();

p2.Width = 5;

// Новая точка p получается путем аффинных преобразований

p = this[i].Affine(mx1,my1,x01,y01,alpha1);

g1.DrawEllipse(p2, (int)p.x - 5, (int)p.y - 5, 10, 10);

}

}

}

/***********************************************************************/

class DotsPic : Dots1 // Уровень 2

// Набор отдельных точек

{ public DotsPic(int n1)

: base(n1)

{ }

public DotsPic(double[,] a)

: base(a.GetLength(0))

{ Init(a); }

Virtual public void Init(double[,] a)

{ // заполнение массива точек по таблице (перегружена)

int n1 = a.GetLength(0);

n = Math.Min(n, n1);

for (int i = 0; i < n; i++)

{ coord[i, 0] = a[i, 0];

coord[i, 1] = a[i, 1];

}

}

}

/***********************************************************************/

class DotBar1_X2SinX : Dots1 // Уровень 2

// Точечный график Y=X^2+20*Sin(0.3*X)

{ public DotBar1_X2SinX(int n1): base(n1)

{ }

override public void Init( )

{// Инициализировать координаты точек в соответствии с

// функцией Y=X^2+20*Sin(0.3*X)

{ for (int i = 0; i < n; i++)

{ coord[i, 0] = i;

coord[i, 1] = i * i * 0.02 + 20 * Math.Sin(i * 0.3);

}

}

}

}

/***********************************************************************/

class Lom1 : DotsPic // Уровень 3

// Ломаная линия на основе массива опорных точек

{ public Lom1(int n1): base(n1)

{ }

public Lom1(double[,] a): base(a)

{ }

override public void Draw(Graphics g1, Pen p1,

double mx1, double my1, double x01, double y01, double alpha1)

{ // Для рисования воспользуемся втроенным графическим объектом.

// При этом понадобится создать целочисленный массив точек

System.Drawing.Point[] points = new System.Drawing.Point[n];

G2p p;

for (int i = 0; i < n; i++)

{ p = this[i].Affine(mx1, my1, x01, y01, alpha1);

points[i].X = (int)p.x;

points[i].Y = (int)p.y;

}

g1.DrawLines(p1, points);

}

}

/***********************************************************************/

class DotBar2_X2SinX : Lom1 // Уровень 4

// Линейный график Y=X^2+20*Sin(0.3*X)

{ public DotBar2_X2SinX(int n1): base(n1)

{ }

override public void Init( )

{// Инициализировать координаты точек в соответствии с

// функцией Y=X^2+20*Sin(0.3*X)

{ for (int i = 0; i < n; i++)

{ coord[i, 0] = i;

coord[i, 1] = i * i * 0.02 + 20 * Math.Sin(i * 0.3);

}

}

}

}

}

9