|
-7 / 0 / 0
Регистрация: 28.09.2020
Сообщений: 38
|
||||||
Определить номера точек, которые могут являться вершинами квадрата06.12.2020, 15:53. Показов 4467. Ответов 42
Метки нет (Все метки)
В одномерном массиве с четным количеством элементов (2N) находятся координаты N точек плоскости. Они располагаются в следующем порядке: х1 y1 x2, y2, х3, уЗ и тд. (xi ,yi — целые). Определить номера точек, которые могут являться вершинами квадрата. Вот пример только с радиусом
И если можно скрин с результатами вывода
0
|
||||||
| 06.12.2020, 15:53 | |
|
Ответы с готовыми решениями:
42
Определить номера точек, которые могут являться вершинами квадрата Определить номера точек, которые могут являться вершинами квадрата Определить номера точек, которые могут являться вершинами квадрата |
|
710 / 356 / 104
Регистрация: 09.02.2018
Сообщений: 805
|
||||||
| 06.12.2020, 18:07 | ||||||
|
У квадрата 4 стороны, которые одинаковы по длине. Я бы проверил равенство длин сторон.
Добавлено через 6 минут
0
|
||||||
|
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
|
|
| 06.12.2020, 18:29 | |
|
КулХацкеръ, а если точки "не по кругу идут"?
1
|
|
|
710 / 356 / 104
Регистрация: 09.02.2018
Сообщений: 805
|
|
| 06.12.2020, 18:52 | |
|
Может быть, перебрать все перестановки 4 точек с помощью itertools.permutations?
Для 4 точек 4! = 24 перестановки. Программа будет в 24 раза медленнее. Неприятно, но не смертельно. Добавлено через 54 секунды Может быть, есть решения лучше. Я не спец по геометрическим задачам.
0
|
|
|
710 / 356 / 104
Регистрация: 09.02.2018
Сообщений: 805
|
|
| 06.12.2020, 19:09 | |
|
Только хотел сказать почти то же самое). Нарисовал на бумажке несколько квадратов, и понял, что в топку permutations.
Есть всего два варианта, даже не три. Либо следующая точка вдоль стороны квадрата (что нам и нужно), либо вдоль диагонали. Проверяем для номеров 1, 2, 3, 4, если не подходит, то для номеров 1, 3, 2, 4. Все.
0
|
|
| 06.12.2020, 19:17 | |
|
Нужно составить алгоритм. Я вижу такой вариант алгоритма. Для первой точки берем по очереди другую точку из массива, и для этих двух точек проверяем есть ли точка, которая от одной из точек исходной пары отстоит на расстоянии, таком же как и между точками исходной пары, а от второй точки отстоит по размеру диагонали квадрата (гипотенузы) со стороной расстояния между исходной пары. Затем уже для найденной тройки точек ищем точку отстоящую на одинаковом растоянии от крайних точек в найденной тройке. Как-то так. Но код пусть ТС попробует сам написать.
Может кто то предложит более простой алгоритм.
0
|
|
|
710 / 356 / 104
Регистрация: 09.02.2018
Сообщений: 805
|
|
| 06.12.2020, 19:35 | |
|
Ребята, подумал ещё, и понял, что был неправ насчёт двух вариантов. Вот все варианты:
1) Вторая точка находится вдоль диагонали от первой, третья в любом случае находится вдоль стороны от второй. 2) Вторая точка находится вдоль стороны от первой, третья вдоль диагонали от второй. 3) Вторая точка находится вдоль стороны от первой, третья вдоль стороны от второй. Если ТС все это сложно понять, пусть пишет через permutations, точно не ошибётся.
0
|
|
|
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
|
|
| 06.12.2020, 20:04 | |
|
КулХацкеръ, неизвестно N
Все проще - проход по массиву точек для каждой по возрастанию индексов ищутся векторы направления отрезков с другими оставшимися точками ( 1 со 2, 1 с 3, 1 с 4 ... 1 с N ; 2 с 3, 2 с 4 ... 2 с N; ...). Для существования квадрата достаточно и необходимо 4 различных (координатно) по знакам, но одинаковых по модулю ((-1,-3)==(1,3)==(3,-1)==(-3,1)) вектора. Вектор = (xa - xb, ya - yb) для отрезка "ab". Если у i-й точки нет в наборе вектора и нормали к ней - отбрасываем; иначе запоминаем и вектор и нормаль. После прохода по точкам. Сопоставляем по модулю пары вектор-нормаль. У диагональных точек модули векторов совпадут.
0
|
|
|
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,332
|
|
| 06.12.2020, 21:01 | |
|
0
|
|
|
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
|
||||||
| 06.12.2020, 21:18 | ||||||
|
isaak,
0
|
||||||
|
Супер-модератор
|
||||||
| 06.12.2020, 21:22 | ||||||
|
В основе - геометрия:
1) стороны равны 2) диагонали равны Но есть проблема: точки могут идти "не по кругу". Мой алгоритм распознавания квадрата: считаем все расстояния между четырьмя точками (6 расстояний). Если этот набор состоит из двух различных чисел - значит это квадрат:
Gdez, сравнивать числа с плавающей точкой на точное равенство - плохая практика...
1
|
||||||
|
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,332
|
|
| 06.12.2020, 21:25 | |
|
0
|
|
|
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
|
|||||||
| 06.12.2020, 21:33 | |||||||
|
Catstail, у ромба из двух равносторонних треугольника тоже будет два числа
Добавлено через 31 секунду isaak, это не программа для задачи Добавлено через 2 минуты Catstail, спасибо
Добавлено через 3 минуты Проверка по векторам
1
|
|||||||
|
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,332
|
|
| 06.12.2020, 21:34 | |
|
0
|
|
|
Супер-модератор
|
||||||||
| 06.12.2020, 21:39 | ||||||||
|
Gdez, спасибо! Поправочка:
Добавлено через 2 минуты
0
|
||||||||
|
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
|
|||
| 06.12.2020, 21:55 | |||
|
Catstail, это ?
Добавлено через 3 минуты isaak,
0
|
|||
|
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,332
|
|||
| 06.12.2020, 22:23 | |||
![]() ![]() Добавлено через 3 минуты
0
|
|||
|
Супер-модератор
|
|
| 06.12.2020, 22:24 | |
|
0
|
|
| 06.12.2020, 22:24 | |
|
Помогаю со студенческими работами здесь
20
Определить номера точек, которые могут являться вершинами квадрата Определить номера точек, которые могут являться вершинами квадрата Определить номера точек, которые могут являться вершинами квадрата Определить номера точек, которые могут являться вершинами квадрата Определить номера точек, которые могут являться вершинами квадрата Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла:
Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
|
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-text-sdl3-c. zip
finish-text-sdl3-cpp. zip
|
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
|
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo
Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло.
Но на выплатах по больничным это. . .
|
|
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
|
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y
Z4Tv2zpXVVo
https:/ / github. com/ shumilovas/ med2. git
|
Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа.
В качестве фильтра для отбора справочника служит группа номенклатуры.
Отбор по наименованию группы. . .
|
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
|