
- •Лабораторна робота 5 Конструювання ієрархії класів у с#
- •1.1. Завдання
- •2.1. Ієрархія класів в Windows-проектах
- •3.1. Реалізація ієрархії класів в Windows-проектах
- •InitializeComponent();
- •Init();
- •Virtual public void Init()
- •Virtual public void Draw(Graphics g1, Pen p1,
- •Virtual public void Init(double[,] a)
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);
}
}
}
}
}