Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
5 / 5 / 1
Регистрация: 11.10.2013
Сообщений: 416

Соединить точки, образующие параллелограмм

23.11.2013, 00:04. Показов 2502. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написал код. Полностью рабочий. Все выводит:и геометрическое, и графическое. Случилась следующая загвоздка: на экран в графическом представлении выводятся все точки и мне необходимо соединить линиями только те, которые образуют параллелограмм.

Так как тесты у меня читаются из файлов, то напишу их так.
1 1
2 2
3 5
5 2
5 3
4 1
Ответ: троек :1

Должен быть нарисован один параллелограмм.

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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using Tao.FreeGlut;
using Tao.OpenGl;
 
namespace zadacha 
{   // На плоскости задано множество точек А  и точка  d  вне его. 
    // Подсчитать  количество  различных неупорядоченных троек точек a, b, c из А,  
    // для которых четырехугольник  abcd  является параллелограммом.
    class Program
    {
        static int count = 0;
        static int[] x;
        static int[] y;
        static void Main(string[] args)
        {
            int i = 0, k, n, j;
 
            string line;
            double a, b, c, d, e, g, p, m;
            char[] delimited = new char[] { ' ', ',', '.' };
            Console.WriteLine("Введите количество точек на плоскости");
            n = int.Parse(Console.ReadLine());
            x = new int[n];
            y = new int[n];
            using (StreamReader f = new StreamReader("6 tochek.txt"))
            {   //пока файл не пуст, читаем строки
                while ((line = f.ReadLine()) != null)
                {//печатаем, что написали
                    Console.WriteLine(line);
                    // выделяем числа
                    string[] numbers = line.Split(delimited);
                    //занесение в массивы координат
                    x[i] = int.Parse(numbers[0]);
                    y[i] = int.Parse(numbers[1]);
                    i++;
                }
            }
 
 
            for (i = 0; i < n - 1; i++)
            {
                for (j = 0; j < n - 1; j++)
                {
                    if (i == j)
                        continue;
                    for (k = 0; k < n - 1; k++)
                    {
                        if ((i == k) || (j == k))
                            continue;
 
                        // storona 1
                        a = Math.Sqrt((x[k] - x[i]) * (x[k] - x[i]) + (y[k] - y[i]) * (y[k] - y[i]));
                        // storona 2
                        b = Math.Sqrt((x[n - 1] - x[j]) * (x[n - 1] - x[j]) + (y[n - 1] - y[j]) * (y[n - 1] - y[j]));
                        // storona 3
                        c = Math.Sqrt((x[i] - x[j]) * (x[i] - x[j]) + (y[i] - y[j]) * (y[i] - y[j]));
                        // storona 4
                        d = Math.Sqrt((x[k] - x[n - 1]) * (x[k] - x[n - 1]) + (y[k] - y[n - 1]) * (y[k] - y[n - 1]));
                        e = Math.Abs(x[i] - x[j]);
                        g = Math.Abs(x[k] - x[n - 1]);
                        p = Math.Abs(x[k] - x[i]);
                        m = Math.Abs(x[n - 1] - x[j]);
 
                        // если условие выполняется, то прибавляем +1 к количеству искомых троек
                        if ((a == b) && (c == d) && (e == g) && (p == m))
                            count++;
 
                    }
                }
            }
            if (count != 0)
                Console.WriteLine("Количество троек:{0}", count / 2);
            if (count == 0)
                Console.WriteLine("Троек нет");
            Console.ReadLine();
 
            // инициализация графики                       
            Glut.glutInit();
            // для окна изображения будет использоваться один буфер регенерации
            // для выбора цветовых значений режим RGB(красный зеленый синий)
            Glut.glutInitDisplayMode(Glut.GLUT_SINGLE | Glut.GLUT_RGB);
            // задание размера окна,где будет выведена графика
            Glut.glutInitWindowSize(800, 800);
            // создание окна для вывода графики с заголовком
            Glut.glutCreateWindow("Построение параллелограмма");
            //вызов процедуры инициализации
            Init();
            // посылает графическое изображение в созданное окно
            Glut.glutDisplayFunc(new Glut.DisplayCallback(Display));
            // изображает всё и ожидает
            Glut.glutMainLoop();
            Console.ReadKey();
        }
 
 
        private static void Init()
        {
            // белый цвет фона
            Gl.glClearColor(1.0f, 1.0f, 1.0f, 0.0f);
            Gl.glMatrixMode(Gl.GL_PROJECTION);
            Glu.gluOrtho2D(-20, 20, -20, 20);
        }
        // подпрограмма рисования прямых по координатам точек
        static void DrawLine(float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4)
        {
            Gl.glBegin(Gl.GL_LINES);
            Gl.glVertex2f(x1, y1);
            Gl.glVertex2f(x2, y2);
            Gl.glVertex2f(x3, y3);
            Gl.glVertex2f(x4, y4);
            Gl.glVertex2f(x1, y1);
            Gl.glVertex2f(x4, y4);
            Gl.glVertex2f(x2, y2);
            Gl.glVertex2f(x3, y3);
            Gl.glEnd();
        }
        private static void DrawOneLine(int x1, int y1, int x2, int y2)
        {
            Gl.glBegin(Gl.GL_LINES);
            Gl.glVertex2i(x1, y1);
            Gl.glVertex2i(x2, y2);
            Gl.glEnd();
        }
        // подпрограмма рисования точек параллелограмма
        static void DrawPoint(float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4)
        {
            Gl.glBegin(Gl.GL_POINTS);
            Gl.glVertex2f(x1, y1);
            Gl.glVertex2f(x2, y2);
            Gl.glVertex2f(x3, y3);
            Gl.glVertex2f(x4, y4);
            Gl.glEnd();
        }
        static void Display()
        {
            // метод, формирующий изображение 
            // очистка окна                
            // очистка окна изображения
            Gl.glClear(Gl.GL_COLOR_BUFFER_BIT);
            // выбор черного цвета для рисования
            Gl.glColor3f(0.0f, 0.0f, 0.0f);
            // вызов процедуры рисования прямой
            DrawOneLine(-20, 0, 20, 0); // ось х
            DrawOneLine(0, -20, 0, 20); // ось y
            // select red 
            Gl.glColor3f(1.0f, 0.0f, 0.0f);
            Gl.glPointSize(3);
            Gl.glBegin(Gl.GL_POINTS);
            for (int i = 0; i < x.Length; i++)
            {
                Gl.glVertex2i(x[i], y[i]);
            }
            for (int i = 0; i < count; i++)
            Gl.glBegin(Gl.GL_LINE_LOOP);
 
                    Gl.glEnd();
                         }
                 }
           }
Добавлено через 1 минуту
Конкретно вот здесь надо дорабатывать, это знаю точно.

C#
1
2
3
4
5
6
7
Gl.glBegin(Gl.GL_POINTS);
            for (int i = 0; i < x.Length; i++)
            {
                Gl.glVertex2i(x[i], y[i]);
            }
            for (int i = 0; i < count; i++)
            Gl.glBegin(Gl.GL_LINE_LOOP);
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.11.2013, 00:04
Ответы с готовыми решениями:

Соединить 4 точки ломаной линией без пересечений
Доброго времени суток, вопрос заключается в следующем: Пользователь вводит координаты 4-х точек на плоскости, необходимо максимально...

Соединить две точки двумя линиями, угол между которыми равен 90 градусов
Суть вопроса: есть 2 точки(допустим Point1(100,50) и Point2(200,100)), мне нужно соединить, но так что бы соединение было под 90...

Из множества точек на плоскости найти точки, образующие параллелограмм с наибольшим количеством точек внутри
&quot;Даны N точек на плоскости. Найти среди них точки являющиеся вершинами фигуры, содержащей максимальное число заданных точек. Фигура -...

6
 Аватар для ViterAlex
8952 / 4864 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
23.11.2013, 00:58
Гм, ну если ты нашёл эти точки, рисуй их отдельно от других.

Не по теме:

А что это за странное рисование такое? OpenGL?


Странный алгоритм. Я бы по-другому решал
0
5 / 5 / 1
Регистрация: 11.10.2013
Сообщений: 416
23.11.2013, 01:06  [ТС]
Тогда их на каком-то этапе надо присвоить. Где конкретно - для меня вопрос. Можно матрицу создать конечно еще, но с этим у меня туговато...

По OpenGL конкретно не отвечу, так научили в универе.
0
 Аватар для ViterAlex
8952 / 4864 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
23.11.2013, 01:10
Цитата Сообщение от Alex7676 Посмотреть сообщение
Где конкретно - для меня вопрос.
на 74 строке
0
5 / 5 / 1
Регистрация: 11.10.2013
Сообщений: 416
23.11.2013, 01:13  [ТС]
Тогда Console.Display не увидит этих точек. Пробовал уже так.
0
 Аватар для ViterAlex
8952 / 4864 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
23.11.2013, 02:47
Кто не увидит? Ты спросил, где определяются эти точки. Ответ очевиден. Там их и нужно каким-то образом сохранять для дальнейшего использования. Хоть в тот же двумерный массив
0
5 / 5 / 1
Регистрация: 11.10.2013
Сообщений: 416
24.11.2013, 13:36  [ТС]
Так и не уловил, как надо делать

Добавлено через 4 часа 28 минут
теме up.

Добавлено через 12 часов 50 минут
help me
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.11.2013, 13:36
Помогаю со студенческими работами здесь

На плоскости находятся точки. Найти те точки, образующие замкнутый контур этого множества
На плоскости находятся точки . Используя вспомогательную программу найти те точки , образующие замкнутый контур этого множества. Помогити...

Найти точки образующие замкнутый контур плоскости
На плоскости находятся точки. Используя под-программу найти те точки, образующие замкнутый контур этой плоскости. У меня есть код, но...

Найти три точки, образующие треугольник минимальной площади
Помогите пожалуйста, задание звучит так: Найдите три точки, образующие треугольник минимальной площади. Ответ - три точки, вывести в файл....

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

соединить 2 точки
Всем привет :) Как можно соединить 2 точки (линией с поворотом на 90градусов(не просто по диагонали) ), Используя координаты и...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 30.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru