Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.84/19: Рейтинг темы: голосов - 19, средняя оценка - 4.84
allxumuk
0 / 0 / 0
Регистрация: 24.03.2012
Сообщений: 7
#1

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

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

Всех приветствую! Вобщем трабла такая: надо написать класс геометрические фигуры, соответственно создавая их, точнее 2 треугольник и квадрат -- домик , используя абстрактный класс и наследование. Вобщем я все это сделал, осталось только реализовать передвижение по форме, ну что бы мышкой можно было двигать или по кнопкам -- это тоже сделал, но только для прямоугольника, а как двигать треугольник, вот хоть убей не знаю. Помогите, пожалуйста кто чем может. Проект приложен.
Думаю еще, что можно на панели их создавать и двигать уже панель, а на ней они не создаются...
0
Вложения
Тип файла: rar AbsHouse.rar (49.0 Кб, 140 просмотров)
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.03.2012, 11:29
Ответы с готовыми решениями:

Описать класс "поезд", содержащий поля "пункт назначения", "номер поезда", "время отправления"
Помогите пожалуйста с классом Описать класс «поезд», содержащий следующие...

Зачем нужен абстрактный класс "Линия" для класса "Точка"
надо реализовать иерархию классов точка-> абстрактный класс линия-> 1)прямая...

Описать базовый класс "Точка". Производные: "Окружность" и "Правильный треугольник"
Помогите, пожалуйста. Базовый класс «Точка». Классы «Окружность» и...

Описать класс "Самолет" и класс "Аэропорт"
Описать класс "самолет", содержащий следующие закрытые поля: -название пункта...

Описать класс "Самолет" и класс "Аэропорт"
Описать класс "самолет", содержащий следующие закрытые поля: -название пункта...

2
FutureCome
104 / 104 / 9
Регистрация: 19.12.2010
Сообщений: 417
Завершенные тесты: 2
25.03.2012, 09:49 #2
Лучший ответ Сообщение было отмечено 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
341 / 320 / 48
Регистрация: 12.12.2011
Сообщений: 563
25.03.2012, 10:09 #3
Ну треугольник двигается так же как и все остальные фигуры, сдвигаем каждую точку на указанный оффсет.

Класс треугольника
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.03.2012, 10:09

Описать класс "треугольник" на основе класса "линия"
вот мой код: using System; using System.Collections.Generic; using...

Создать абстрактный класс "Программное обеспечение" с методами
ПОМОГИТЕ ПОЖАЛУЙСТА ИСПРАВИТЬ ОШИБКИ!!!!!! Задание: 1) Создать...

Абстрактные классы, ошибка "Класс не реализует наследуемый абстрактный член"
Всем доброго времени суток. Я новичок в этом деле. Помогите с следующим...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru