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

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];