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

Можно ли указать два треугольника с вершинами в данном множестве точек и с равными площадями?

25.01.2020, 13:04. Показов 1522. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дано множество точек на плоскости. Можно ли указать два треугольника с вершинами в данном множестве точек и с равными площадями?
Сломал голову, но так и не понял как это сделать.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.01.2020, 13:04
Ответы с готовыми решениями:

Можно ли указать пару точек M и N в данном множестве, чтобы прямая MN была перпендикулярна оси OХ?
Дано множество точек на плоскости. Можно ли указать пару точек M и N в этом множестве таких, чтобы прямая MN была перпендикулярна оси OХ?...

Построить такие два треугольника с вершинами в заданном множестве точек на плоскосли, из которых один лежал бы строго внутри другого
Построить такие два треугольника с вершинами в заданном множестве точек на плоскосли, из которых один лежал бы строго внутри другого......

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

5
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16142 / 11265 / 2888
Регистрация: 21.04.2018
Сообщений: 33,127
Записей в блоге: 2
26.01.2020, 13:56
Цитата Сообщение от Dima132 Посмотреть сообщение
Сломал голову, но так и не понял как это сделать.
Кроме полного перебора всех вариантов ничего в голову не приходит.
0
 Аватар для samana
2639 / 1567 / 853
Регистрация: 23.02.2019
Сообщений: 3,876
26.01.2020, 14:26
А перебрать все возможные треугольники по массиву точек, можно как-то так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
for (int i = 0; i < points.Length - 2; i++)
{
    for (int j = i + 1; j < points.Length - 1; j++)
    {
        for (int k = j + 1; k < points.Length; k++)
        {
            // новый треугольник (его точки)
            // A = points[i];
            // B = points[j];
            // C = points[k];
        }
    }
}
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16142 / 11265 / 2888
Регистрация: 21.04.2018
Сообщений: 33,127
Записей в блоге: 2
26.01.2020, 16:05
Dima132, делал когда-то структуры
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
    /// <summary>Класс для представления точки на плоскости</summary>
    public struct Point
    {
        /// <summary>Координата X</summary>
        public double X { get; }
        /// <summary>Координата Y</summary>
        public double Y { get; }
 
        /// <summary>Конструктор задающий значения свойствам</summary>
        /// <param name="x">Координата X</param>
        /// <param name="y">Координата Y</param>
        public Point(double x, double y)
        {
            X = x;
            Y = y;
        }
 
        /// <summary>Статический метод возвращающий расстояние между точками</summary>
        /// <param name="a">Точка на плоскости</param>
        /// <param name="b">Точка на плоскости</param>
        /// <returns>double расстояния</returns>
        public static double Distance(Point a, Point b)
        {
            double deltaX = a.X - b.X;
            double deltaY = a.Y - b.Y;
 
            return Math.Sqrt(deltaX * deltaX + deltaY * deltaY);
        }
 
        /// <summary>Метод возвращающий расстояние до другой точки</summary>
        /// <param name="other">Другая точка</param>
        /// <returns>double расстояния</returns>
        public double Distance(Point other)
            => Distance(other, this);
 
        /// <summary>Возвращает экземпляр Point из строкового представления</summary>
        /// <param name="value">Строка со значениями X и Y через пробел</param>
        /// <returns>Point точки</returns>
        public static Point Parse(string value)
        {
            var nums = value?.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
                .Select(double.Parse);
            return new Point(nums.First(), nums.Last());
        }
        /// <summary>Возвращает <see langword="true"/> если из строкового 
        /// представления можно получить экземпляр Poin</summary>
        /// <param name="value">Строка со значениями X и Y через пробел</param>
        /// <param name="point">Полученный экземпляр Point или null</param>
        /// <returns>bool <see langword="true"/> если успешно</returns>
        public static bool TryParse(string value, out Point point)
        {
            try
            {
                point = Parse(value);
                return true;
            }
            catch
            {
                point = default;
                return false;
            }
        }
 
        /// <summary>Строковое представление точки</summary>
        /// <returns>string со строковым представлением</returns>
        public override string ToString() => $"{X} {Y}";
 
        /// <summary>Возвращаете площадь многоугольника с заданными вершинами</summary>
        /// <param name="polygon">Вершины многоугольника</param>
        /// <returns>double - площадь вершин</returns>
        /// <remarks> Создана по примеру kolorotur https://www.cyberforum.ru/windows-forms/thread1428726.html#post7529234
        /// Worldmen, можно взять за основу теорему Грина, на принципах которой работает планиметр.
        /// Предполагается, конечно, что полигон простой, то есть не самопересекающийся и без "дырок".</remarks>
        public static double Area(IEnumerable<Point> polygon)
        {
            double area = 0;
            Point a = polygon.First();
            foreach (Point b in polygon.Skip(1).Append(a))
            {
                area += a.X * b.Y - a.Y * b.X;
                a = b;
            }
            return Math.Abs(area) / 2;
        }
    }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    public struct Triangle
    {
        public Point A { get; }
        public Point B { get; }
        public Point C { get; }
        public double Area { get; }
 
        public Triangle(Point a, Point b, Point c)
        {
            A = a;
            B = b;
            C = c;
 
            double ab = Point.Distance(a, b);
            double bc = Point.Distance(b, c);
            double ca = Point.Distance(c, a);
            double p = (ab + bc + ca) / 2.0;
            Area = Math.Sqrt(p * (p - ab) * (p - bc) * (p - ca));
        }
 
        public override string ToString()
            => $"({A})({B})({C})=({Area})";
    }
Пример использования
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
        static void Main(string[] args)
        {
 
            List<Point> points = new List<Point>()
            {
                Point.Parse("0 0"),
                Point.Parse("2 0"),
                Point.Parse("0 2"),
                Point.Parse("1 2"),
                Point.Parse("3 5"),
                Point.Parse("8 10"),
                Point.Parse("10 15"),
                Point.Parse("-5 6"),
                Point.Parse("-10 9"),
                Point.Parse("-10 -10"),
                Point.Parse("9 4"),
            };
 
            List<Triangle> triangles = new List<Triangle>();
 
            for (int i = 0; i < points.Count - 2; i++)
            {
                for (int j = i + 1; j < points.Count - 1; j++)
                {
                    for (int k = j + 1; k < points.Count; k++)
                    {
                        triangles.Add(new Triangle(points[i], points[j], points[k]));
                    }
                }
            }
 
            foreach(var group in triangles.GroupBy(tr => tr.Area).Where(gr => gr.Count()>1).OrderBy(gr => gr.Count()))
            {
                Console.WriteLine("Треугольники площадью " + group.First().Area);
                Console.WriteLine(string.Join("\r\n", group.Select(tr => "\t" + tr)));
            }
1
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
26.01.2020, 18:09
Так, чисто для фана.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using System;
using System.Linq;
 
class Program
{
    static void Main()
    {
        var m = new (double x, double y)[] { (1, 1), (10, 10), (2, 2), (13, 14), (3, 4), (12, 12) };
 
        Console.WriteLine(Enumerable.Range(0, m.Length).Join(Enumerable.Range(1, m.Length - 1), x => true, y => true, (x, y) => (a: x, b: y)).Where(x => x.b > x.a)
            .Join(Enumerable.Range(2, m.Length - 2), x => true, y => true, (x, y) => (a: x.a, b: x.b, c: y)).Where(x => x.c > x.b).Select(x => (a: m[x.a], b: m[x.b], c: m[x.c]))
            .Select(x => Math.Round(0.5 * Math.Abs((x.b.x - x.a.x) * (x.c.y - x.a.y) - (x.c.x - x.a.x) * (x.b.y - x.a.y)), 5))
            .Where(x => x > 0).GroupBy(g => g).Where(x => x.Count() > 1).Any() ? "True" : "False");
 
        Console.ReadKey();
    }
}
3
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
27.01.2020, 09:45
Чуть упростил.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using System;
using System.Linq;
 
class Program
{
    static void Main()
    {
        var m = new (double x, double y)[] { (1, 1), (10, 10), (2, 2), (13, 14), (3, 4), (12, 12) };
 
        Console.WriteLine(Enumerable.Range(0, m.Length * m.Length * m.Length).Select(x => (a: x / m.Length / m.Length, b: x / m.Length % m.Length, c: x % m.Length))
            .Where(x => x.b > x.a && x.c > x.b).Select(x => Math.Round(0.5 * Math.Abs((m[x.b].x - m[x.a].x) * (m[x.c].y - m[x.a].y) - (m[x.c].x - m[x.a].x) * (m[x.b].y - m[x.a].y)), 5))
            .GroupBy(g => g).Where(x => x.Count() > 1 && x.Key > 0).Any());
 
        Console.ReadKey();
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.01.2020, 09:45
Помогаю со студенческими работами здесь

Дано множество точек на плоскости. Сколько можно на данном множестве точек построить отрезков, перпендикулярных оси OY
помогите с задачкой Дано множество точек на плоскости. Сколько можно на данном множестве точек построить отрезков, перпендикулярных оси...

Можно ли указать пару точек M и N в этом множестве таких, чтобы прямая MN была перпендикулярна оси OХ
помогите решить задачу зарание спасибо . Дано множество точек на плоскости. Можно ли указать пару точек M и N в этом множестве таких,...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru