Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.66/41: Рейтинг темы: голосов - 41, средняя оценка - 4.66
0 / 0 / 0
Регистрация: 24.03.2012
Сообщений: 7

Описать класс "геометрические фигуры", используя абстрактный класс и наследование

24.03.2012, 11:29. Показов 7940. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всех приветствую! Вобщем трабла такая: надо написать класс геометрические фигуры, соответственно создавая их, точнее 2 треугольник и квадрат -- домик , используя абстрактный класс и наследование. Вобщем я все это сделал, осталось только реализовать передвижение по форме, ну что бы мышкой можно было двигать или по кнопкам -- это тоже сделал, но только для прямоугольника, а как двигать треугольник, вот хоть убей не знаю. Помогите, пожалуйста кто чем может. Проект приложен.
Думаю еще, что можно на панели их создавать и двигать уже панель, а на ней они не создаются...
Вложения
Тип файла: rar AbsHouse.rar (49.0 Кб, 181 просмотров)
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.03.2012, 11:29
Ответы с готовыми решениями:

Абстрактный класс, наследование, класс хранится в другом классе
Нужна помощь. Написать программу: 1 класс. Имеется абстрактный класс который описывает какую-то сущность, например Человек. В абстрактном...

Реализовать базовый класс «Геометрические фигуры»
Реализовать базовый класс «Геометрические фигуры». Класс должен быть абстрактным, т.к. самой по себе фигуры без конкретизации не...

Класс «Геометрические фигуры» и производные от него
Создать класс Figure для работы с геометрическими фигурами. В качестве полей класса задаются цвет фигуры, состояние «видимое/невидимое»....

2
107 / 107 / 9
Регистрация: 19.12.2010
Сообщений: 417
25.03.2012, 09:49
Лучший ответ Сообщение было отмечено allxumuk как решение

Решение

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/// <summary>
/// метод для рисования фигуры
/// </summary>
/// <param name="grap"></param>
/// <param name="pen"></param>
/// <param name="brush"></param>
public override void Show(Graphics grap, Pen pen, Brush brush)
{
     houseF = Init();
     grap.DrawRectangle(pen, houseF);//рисование фигуры
 
     grap.FillRectangle(brush, houseF);//заливание цвелом фигуры
     //Создаем крышу из точек и заливаем полигон
     Point point1 = new Point(150,90); //Координаты прописаны явно?
     Point point2 = new Point(180, 40);
     Point point3 = new Point(210,90);
 
     Point[] createRoof =
      {
          point1,
          point2,
          point3,
      };
     grap.DrawPolygon(pen, createRoof);
     grap.FillPolygon(brush, createRoof);
}
Координаты прописаны явно?
0
 Аватар для Yukikaze
352 / 331 / 49
Регистрация: 12.12.2011
Сообщений: 563
25.03.2012, 10:09
Ну треугольник двигается так же как и все остальные фигуры, сдвигаем каждую точку на указанный оффсет.

Класс треугольника
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
class Triangle
    {
        private Point[] Points = new Point[3];
 
        #region Properties
        public Point A
        {
            get { return Points[0]; }
            set { Points[0] = value; }
        }
        public Point B
        {
            get { return Points[1]; }
            set { Points[1] = value; }
        }
        public Point C
        {
            get { return Points[2]; }
            set { Points[2] = value; }
        }
        public double AB
        {
            get { return Math.Sqrt(Math.Pow(Points[0].X - Points[1].X, 2) + Math.Pow(Points[0].Y - Points[1].Y, 2)); }
        }
 
        public double BC
        {
            get { return Math.Sqrt(Math.Pow(Points[1].X - Points[2].X, 2) + Math.Pow(Points[1].Y - Points[2].Y, 2)); }
        }
 
        public double AC
        {
            get { return Math.Sqrt(Math.Pow(Points[0].X - Points[2].X, 2) + Math.Pow(Points[0].Y - Points[2].Y, 2)); }
        }
 
        private Point Center
        {
            get { return new Point((A.X + B.X + C.X) / 3, 
                                   (A.Y + B.Y + C.Y) / 3);}
        }
        #endregion
 
        public Triangle(Point a, Point b, Point c)
        {
            Points[0] = a;
            Points[1] = b;
            Points[2] = c;
 
            
            if (AB >= BC + AC || AC >= BC + AB || BC >= AB + AC)
            {
                throw new ArgumentException("Недопустимый размер треугольника. Точки лежат на одной прямой или длина ребра равна нулю");
            }
 
        }
        /// <summary>
        /// Сдвигаем треугольник на указанное кол-во координат
        /// </summary>
        /// <param name="dx">Смещение по X</param>
        /// <param name="dy">Смещение по Y</param>
        public void Move(int dx, int dy)
        {
            for(int i = 0; i < 3; i++)
                Points[i].Offset(dx, dy);
        }
        /// <summary>
        /// Изменение размера
        /// </summary>
        /// <param name="k"></param>
        public void Resize(double k)
        {
                Points[1].X -= (int)((Points[1].X - Points[0].X) * (1 - k));
                Points[1].Y -= (int)((Points[1].Y - Points[0].Y) * (1 - k));
                Points[2].X -= (int)((Points[2].X - Points[0].X) * (1 - k));
                Points[2].Y -= (int)((Points[2].Y - Points[0].Y) * (1 - k));
        }
        /// <summary>
        /// Вращение
        /// </summary>
        /// <param name="angle">угол</param>
        public void Rotate(double angle)
        {
            int tmpx;
            int tmpy;
            
            angle = angle * Math.PI / 180;
 
            tmpx = Points[0].X;
            tmpy = Points[0].Y;
            Points[0].X = (int)((tmpy - Center.Y) * Math.Sin(angle) + (tmpx - Center.X) * Math.Cos(angle) + Center.X);
            Points[0].Y = (int)(-(tmpx - Center.X) * Math.Sin(angle) + (tmpy - Center.Y) * Math.Cos(angle) + Center.Y);
 
            tmpx = Points[1].X;
            tmpy = Points[1].Y;
            Points[1].X = (int)((tmpy - Center.Y) * Math.Sin(angle) + (tmpx - Center.X) * Math.Cos(angle) + Center.X);
            Points[1].Y = (int)(-(tmpx - Center.X) * Math.Sin(angle) + (tmpy - Center.Y) * Math.Cos(angle) + Center.Y);
 
            tmpx = Points[2].X;
            tmpy = Points[2].Y;
            Points[2].X = (int)((tmpy - Center.Y) * Math.Sin(angle) + (tmpx - Center.X) * Math.Cos(angle) + Center.X);
            Points[2].Y = (int)(-(tmpx - Center.X) * Math.Sin(angle) + (tmpy - Center.Y) * Math.Cos(angle) + Center.Y);
        }
        /// <summary>
        /// Рисование объекта
        /// </summary>
        /// <param name="control">элемент управления</param>
        /// <param name="pen">Кисть</param>
        public void Draw(Control control, Pen pen)
        {
            Graphics graphics = control.CreateGraphics();
            graphics.DrawPolygon(pen, this.Points);
        }
 
    }

Вот, держите, писал данный класс для другого пользователя портала. Там разве, что вращение не работает
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.03.2012, 10:09
Помогаю со студенческими работами здесь

Использовать абстрактный класс, статический класс, использовать: наследование, агрегирование, композицию
Добрый день. Нужна ваша помощь. Учусь в университете, задали придумать тему программы. в программе нужно использовать следующее:...

Абстрактный класс и наследование
&lt;?php abstract class Lesson{ private $duration; private $costStrategy; function __construct($duration, CostStrategy...

Абстрактный класс и наследование
Поправьте пожалуйста, чтоб все верно выводилось. abstract class AbstractAnimal { abstract protected function Get(); public...

Абстрактный класс и наследование
Задание: 1.Создать пространство имен Algebra. 2. Разработать класс Vector для манипуляции с векторами действительных чисел. В этого...

Наследование и абстрактный класс
Вот сделал список с такими условиями #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;string&gt; using namespace std; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru