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

Вывести на экран эти квадраты, выделить другим цветом квадраты с максимальной и минимальной площадью

19.03.2018, 01:01. Просмотров 1446. Ответов 3
Метки нет (Все метки)

Помогите с заданием :
В файле задано квадраты координатами диагоналей. Вывести на экран эти квадраты, выделить другим цветом квадраты с максимальной и минимальной площадью, провести в них диагонали, а также вписать и описать вокруг них круги. Вывести сообщение о все параметры этих квадратов и кругов.

Понимаю много прошу, но помогите хотя бы частично кто может.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.03.2018, 01:01
Ответы с готовыми решениями:

Вывести на экран треугольники и их вершины выделить другим цветом
Помогите пожалуйста написать эту программу.Может у кого-то есть уже готовая, или какие то её части....

Вывести на экран треугольники и их вершины выделить другим цветом
Задание: В файле заданы координаты вершин треугольников. Вывести на экран эти треугольники и их...

Вычислить суммы квадратов нечетных чисел в диапазоне. Вывести на экран эти нечетные числа и их квадраты
Здравствуйте, помогите пожалуйста написать две программы. Остальные сделал а эти никак не могу :( ...

Вывести на экран заданное количество случайных чисел, все числа кратные N выделить другим цветом
Доброго времени суток ! Помогите пожалуйста : Вывести на экран 40 случайных чисел, все числа...

3
77 / 78 / 48
Регистрация: 12.10.2013
Сообщений: 1,044
19.03.2018, 11:43 2
Как заданы координаты диагоналей? Они в текстовом файле???
0
133 / 129 / 107
Регистрация: 17.03.2009
Сообщений: 364
19.03.2018, 11:59 3
Координаты диагоналей хранятся в файле CSV.
Разделитель запятая.
Каждая строка файла содержит координаты левого верхнего и правого нижнего углов квадрата, например

591;260;625;294
119;211;197;289
256;173;350;267
608;87;678;157
264;319;325;380

Впрочем, это можкт быть и прямоугольник

Код проекта я прикрепил в файле вот основные части кода:
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using SqareWindowsFormsApplication.Extensions;
 
 
namespace SqareWindowsFormsApplication
{
 
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
 
            
            //Генерируем произволное число случайных квадратов и пишем 
            //их в файл
            var path = AppDomain.CurrentDomain.BaseDirectory + "\\demo.csv"; 
            File.WriteAllLines(path, GenerateData());
 
            //И затем показываем их на форме
            ShowRectangles(path);
        }
 
        //Читает квадраты из CSV файла, переданного в path 
        //Затем отображает их как фон формы
        private void ShowRectangles(string path)
        {
            var penForMin = new Pen(Color.Blue); //Цвет для квадрата с минимально площадью
            var penForMax = new Pen(Color.Red); //Цвет для квадрата с максимальной площадью
            var pen = new Pen(Color.Black); //Цвет для обычных квадратов
 
 
            var rectList = GetRectanglesFromCsvFile(path); //считали квадраты из файла
 
            Rectangle minAreaRect;
            Rectangle maxAreaRect;
 
            //Получили квадраты с минимальной и максимальной площадью 
            rectList.GetMiniMaxRects(out minAreaRect, out maxAreaRect); 
 
           
            var image = new Bitmap(Width, Height); //Холст для рисования
            Graphics graphics = Graphics.FromImage(image);
            graphics.DrawRectangles(pen, rectList); //Нарисовали все квадраты как обычные
 
 
            //Нарисовали квадраты с минимальной и максимальной площадью
            //Провели диагонали
            //Вписали и описали окружности
            graphics.DrawMiniMax(penForMin, minAreaRect);
            graphics.DrawMiniMax(penForMax, maxAreaRect);
 
            BackgroundImage = image; //Перенесли на форму
        }
 
        //Загружает координаты квадратов из CSV-файла
        private static Rectangle[] GetRectanglesFromCsvFile(string path)
        {
            var lines = File.ReadAllLines(path);
            var sqrList = lines.Select(x => x.Split(';').Select(y => Convert.ToInt32(y)).ToArray()).ToArray();
            var rectList = sqrList.Select(s => new Rectangle(s[0], s[1], Math.Abs(s[0] - s[2]) + 1, Math.Abs(s[1] - s[3]) + 1)).ToArray();
            return rectList;
        }
 
        //Генерирует массив квадратов со случайными координатами
        private string[] GenerateData()
        {
            var maxWidth = this.Width / 3;
            Random rnd = new Random();
            var count = rnd.Next(15 + 1);
            var rects = Enumerable.Range(0, 15).Select(x => new int[4] {
                    rnd.Next(this.Width-110)+30, rnd.Next(this.Height-110)+30,
                    0, 0}).ToArray();
            var lines = rects.Select(r =>
            {
                var sideLen = rnd.Next(30, 100);
                return r[0] + ";" + r[1] + ";" + (r[0] + sideLen) + ";" + (r[1] + sideLen);
            }
 
                ).ToArray();
            return lines;
        }
 
    }
 
}
 
//Код расширений для графических объектов
namespace SqareWindowsFormsApplication.Extensions
{
    public static class Extensions
    {
        //Рисует прямоугольники с максимальной и мигимальной площадью
        public static void DrawMiniMax(this Graphics graphics, Pen pen, Rectangle miniMaxAreaRect)
        {
            var deltaX = Convert.ToInt32(Math.Sqrt(miniMaxAreaRect.Width * miniMaxAreaRect.Width + miniMaxAreaRect.Width * miniMaxAreaRect.Width) - miniMaxAreaRect.Width);
            var deltaY = Convert.ToInt32(Math.Sqrt(miniMaxAreaRect.Height * miniMaxAreaRect.Height + miniMaxAreaRect.Height * miniMaxAreaRect.Height) - miniMaxAreaRect.Height);
 
            //Сам прямоугольник
            graphics.DrawRectangle(pen, miniMaxAreaRect);
 
            //Диагонали
            graphics.DrawLine(pen, miniMaxAreaRect.Left, miniMaxAreaRect.Top, miniMaxAreaRect.Right, miniMaxAreaRect.Bottom);
            graphics.DrawLine(pen, miniMaxAreaRect.Right, miniMaxAreaRect.Top, miniMaxAreaRect.Left, miniMaxAreaRect.Bottom);
            //Вписанная и описанная окружности
            graphics.DrawEllipse(pen, miniMaxAreaRect);
            graphics.DrawEllipse(pen, new Rectangle(miniMaxAreaRect.X - deltaX / 2, miniMaxAreaRect.Y - deltaY / 2,
                miniMaxAreaRect.Width + deltaX, miniMaxAreaRect.Height + deltaY));
 
        }
 
        //Вычисляет площать прямоугольника
        public static int Area(this Rectangle rectangle)
        {
            return rectangle.Width * rectangle.Height;
        }
 
        //Выбирает прямоугольник с минимальной и пр-к с мяксимальной площадью
        //из массива прямоугольников
        public static void GetMiniMaxRects(this Rectangle[] rectangles, out Rectangle minAreaRect, out Rectangle maxAreaRect)
        {
            var sqrAreaList = rectangles.Select(r => r.Area()).ToArray();
            minAreaRect = rectangles[sqrAreaList.Select((s, i) => new { s, i }).OrderBy(x => x.s).First().i];
            maxAreaRect = rectangles[sqrAreaList.Select((s, i) => new { s, i }).OrderByDescending(x => x.s).First().i];
        }
 
    }
}
1
Вложения
Тип файла: zip RectanglesWindowsFormsApplication.zip (46.5 Кб, 3 просмотров)
0 / 0 / 0
Регистрация: 17.04.2017
Сообщений: 9
19.03.2018, 17:48  [ТС] 4
Добавлено через 1 минуту
Веселый, да в текстовом файле.

Добавлено через 50 минут
mishau, Да, всё так как надо. Спасибо Вам большое!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.03.2018, 17:48

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Вывести на экран пересечение множеств другим цветом. Выделить в каждой строке буквы этого пересечения
1)Создать 2 строки случайных заглавных букв длиной 60. Вывести на экран. 2)Под каждой строкой...

Найти треугольники с максимальной с максимальной и и минимальной площадью
На плоскости задано N четырех угольников координатами своих вершин вершин, X Y, найти треугольники...

Вывести на экран квадраты чисел
вывести на экран монитора квадрат чисел от 3 до 12 вот ещё очень надо...

Вывести на экран квадраты чисел от 10 до 20
Cоставте программу,выводящую на экран квадраты чисел от 10 до 20(си++ цикл do whiel)


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

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

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