
- •Лабораторна робота 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)
3.1. Реалізація ієрархії класів в Windows-проектах
Для реалізації розглянутої ієрархії класів може бути побудовано таку Windows-форму, на якій розташовано графічне поле PictureBox та 5 кнопок. Натискання кожної кнопки створює один з вказаних вище об’єктів і виводить його зображення у PictureBox.
Можлива така реалізація методів обробки натискання на кнопки:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Лаб_2_01
{
public partial class Form1 : Form
{
public Graphics graph, graph0; // поверхность, на которой рисуются детали
public Pen pen1, pen2, pen3; // перья разных цветов для рисования линий и контуров
public Form1()
{
InitializeComponent();
graph = pictureBoxLend.CreateGraphics(); // новая поверхность на рисунке
graph0 = this.CreateGraphics(); // новая поверхность на форме
pen1 = new Pen(new SolidBrush(Color.Red));
pen1.Width = 3;
}
private void button3_Click(object sender, EventArgs e)
{ // 10 точек,расположенных на прямой по умолчанию
Pen pen2 = new Pen(new SolidBrush(Color.Green));
Dots1 L = new Dots1(10);
L.Draw(graph,pen2, 20,20,10,10,0);
}
private void button2_Click(object sender, EventArgs e)
{ // Четыре точки в вершинах прямоугольника 20х40 мм
double[,] M = { { -10, -20 }, { -10, +20 }, { +10, -20} ,{ +10, +20 }};
DotsPic L = new DotsPic(M);
// Отображается в масштабе 4 пикселя на 1 мм, снизу вверх,
// начиная с позиции 200,200 мм
// с поворотом на 23 градуса против час. стрелки
L.Draw(graph,pen1, 4,-4,200,200,Math.PI*23.0/180.0);
}
private void button1_Click(object sender, EventArgs e)
{ // Буква N, полученная путем соединения четырех точек
// с параметрами из предыдущей кнопки
double[,] M = { { -10, -20 }, { -10, +20 }, { +10, -20} ,{ +10, +20 }};
Lom1 L = new Lom1(M);
L.Draw(graph,pen1, 4,-4,200,200,Math.PI*23.0/180.0);
}
private void button4_Click(object sender, EventArgs e)
{ // График функции, изображенный точками
Pen pen2 = new Pen(new SolidBrush(Color.Cyan));
DotBar1_X2SinX L = new DotBar1_X2SinX(100);
L.Draw(graph,pen2, 5,-2,20,400,0);
}
private void button5_Click(object sender, EventArgs e)
{ // График функции, изображенный отрезками
Pen pen2 = new Pen(new SolidBrush(Color.Blue));
pen2.Width = 2;
DotBar2_X2SinX L = new DotBar2_X2SinX(100);
L.Draw(graph,pen2, 5,-2,20,400,0);
}
}
Реалізація вказаної ієрархії класів може бути наступною:
/***********************************************************************/
struct G2p // Уровень 1
// Точка в 2-мерном Декартовом пространстве
// с действительными координатами
{ public double x,y; // координаты точки (мм)
public G2p(double x1,double y1) // Конструктор
{ x = x1; y = y1;}
public G2p Affine(double mx1,double my1, // масштабные коэффициенты.
double x01,double y01, // величина сдвига в мм.
double alpha1) // угол поворота в радианах.
// Новая точка, полученная в результате
// масштабирования, сдвига и поворота
{ double x2 = x * mx1;
double y2 = y * my1;
double xa = x2 * Math.Cos(alpha1) + y2 * Math.Sin(alpha1);
double ya = x2 * -Math.Sin(alpha1) + y2 * Math.Cos(alpha1);
return new G2p(xa + x01, ya + y01);
}
}
/***********************************************************************/
class Dots1 // Уровень 1
// Базовая геометрическая фигура
// на основе массива опорных точек
{ protected int n=0; // количество точек в фигуре
protected double[,] coord; // координаты точек (x,y) в мм.
public Dots1(int n1) // Конструктор с фигурой по умолчанию
{ n = n1;
coord=new double[n,2];