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

Определить номера точек, которые могут являться вершинами квадрата

06.12.2020, 15:53. Показов 4467. Ответов 42
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В одномерном массиве с четным количеством элементов (2N) находятся координаты N точек плоскости. Они располагаются в следующем порядке: х1 y1 x2, y2, х3, уЗ и тд. (xi ,yi — целые). Определить номера точек, которые могут являться вершинами квадрата. Вот пример только с радиусом
Python
1
2
3
4
5
6
7
8
9
10
import random
n = int(input("Введите количество точек: "))
a = []
radius = 0
for i in range(2*n):
    r = random.randint(0,50) if random.randint(1,11) % 2 == 0 else random.randint(-20,0)
    a.append(r)
    if radius < abs(r): radius = abs(r)
    print("x",i//2+1,": ",r,sep="",end="\t") if i%2==0 else print("y",i//2+1,": ",r,sep="")
print("\nОкружность с центром в начале координат и радиусом", radius)
Добавлено через 5 минут
И если можно скрин с результатами вывода
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.12.2020, 15:53
Ответы с готовыми решениями:

Определить номера точек, которые могут являться вершинами квадрата
В одномерном массиве с четным количеством элементов (2N) находятся координаты N точек плоскости. Они располагаются в следующем порядке: х1...

Определить номера точек, которые могут являться вершинами квадрата
В Одномерном массиве с чётным количеством элементов (2N) находятся координаты N точек плоскости . Они Распологаются в следующем порядке x1,...

Определить номера точек, которые могут являться вершинами квадрата
В одномерном массиве с четным количеством элементов (2N)находится координата N точек плоскости. Они располагаются в следующем порядке...

42
710 / 356 / 104
Регистрация: 09.02.2018
Сообщений: 805
06.12.2020, 18:07
У квадрата 4 стороны, которые одинаковы по длине. Я бы проверил равенство длин сторон.

Добавлено через 6 минут
Python
1
2
3
from math import sqrt
if sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2) == sqrt((x2 - x3) ** 2 + (y2 - y3) ** 2 and sqrt((x2 - x3) ** 2 + (y2 - y3) ** 2 == sqrt((x3 - x4) ** 2 + (y3 - y4) ** 2 and sqrt((x3 - x4) ** 2 + (y3 - y4) ** 2 == sqrt((x4 - x1) ** 2 + (y4 - y1) ** 2:
    print(1, 2, 3, 4)
0
Эксперт Python
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
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
06.12.2020, 19:00
для 4х точек всего 3 варианта, какие 24?
1
710 / 356 / 104
Регистрация: 09.02.2018
Сообщений: 805
06.12.2020, 19:09
Только хотел сказать почти то же самое). Нарисовал на бумажке несколько квадратов, и понял, что в топку permutations.

Есть всего два варианта, даже не три. Либо следующая точка вдоль стороны квадрата (что нам и нужно), либо вдоль диагонали.

Проверяем для номеров 1, 2, 3, 4, если не подходит, то для номеров 1, 3, 2, 4. Все.
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
06.12.2020, 19:17
Нужно составить алгоритм. Я вижу такой вариант алгоритма. Для первой точки берем по очереди другую точку из массива, и для этих двух точек проверяем есть ли точка, которая от одной из точек исходной пары отстоит на расстоянии, таком же как и между точками исходной пары, а от второй точки отстоит по размеру диагонали квадрата (гипотенузы) со стороной расстояния между исходной пары. Затем уже для найденной тройки точек ищем точку отстоящую на одинаковом растоянии от крайних точек в найденной тройке. Как-то так. Но код пусть ТС попробует сам написать.
Может кто то предложит более простой алгоритм.
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
06.12.2020, 19:23
перебором тут задача просто решается. можно даже не сортировать.
1
710 / 356 / 104
Регистрация: 09.02.2018
Сообщений: 805
06.12.2020, 19:35
Ребята, подумал ещё, и понял, что был неправ насчёт двух вариантов. Вот все варианты:

1) Вторая точка находится вдоль диагонали от первой, третья в любом случае находится вдоль стороны от второй.
2) Вторая точка находится вдоль стороны от первой, третья вдоль диагонали от второй.
3) Вторая точка находится вдоль стороны от первой, третья вдоль стороны от второй.

Если ТС все это сложно понять, пусть пишет через permutations, точно не ошибётся.
0
Эксперт Python
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
Цитата Сообщение от КулХацкеръ Посмотреть сообщение
Python
1
2
3
from math import sqrt
if sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2) == sqrt((x2 - x3) ** 2 + (y2 - y3) ** 2 and sqrt((x2 - x3) ** 2 + (y2 - y3) ** 2 == sqrt((x3 - x4) ** 2 + (y3 - y4) ** 2 and sqrt((x3 - x4) ** 2 + (y3 - y4) ** 2 == sqrt((x4 - x1) ** 2 + (y4 - y1) ** 2:
    print(1, 2, 3, 4)
Ошибку выдает????
Миниатюры
Определить номера точек, которые могут являться вершинами квадрата  
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
06.12.2020, 21:18
isaak,
Python
1
2
3
from math import sqrt
if sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2) == sqrt((x2 - x3) ** 2 + (y2 - y3) ** 2) and sqrt((x2 - x3) ** 2 + (y2 - y3) ** 2) == sqrt((x3 - x4) ** 2 + (y3 - y4) ** 2) and sqrt((x3 - x4) ** 2 + (y3 - y4) ** 2) == sqrt((x4 - x1) ** 2 + (y4 - y1) ** 2):
    print(1, 2, 3, 4)
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38194 / 21127 / 4309
Регистрация: 12.02.2012
Сообщений: 34,732
Записей в блоге: 14
06.12.2020, 21:22
В основе - геометрия:
1) стороны равны
2) диагонали равны
Но есть проблема: точки могут идти "не по кругу". Мой алгоритм распознавания квадрата: считаем все расстояния между четырьмя точками (6 расстояний). Если этот набор состоит из двух различных чисел - значит это квадрат:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
def isSquare(x,y):
    d=[0,0,0,0,0,0]
    k=0
    for i in range(3):
        for j in range(i+1,4):
            p=x[i]-x[j]
            q=y[i]-y[j]
            d[k]=p*p+q*q
            k+=1
    return len(set(d))==2        
 
print(isSquare([0,2,4,2],[0,-2,0,2]))  # это точки квадрата
print(isSquare([0,4,2,2],[0,0,-2,2]))  # это тот же квадрат, но перенумерованный по-другому
print(isSquare([0,2,4,2],[0,-3,0,3]))  # а это - ромб.
Добавлено через 59 секунд
Gdez, сравнивать числа с плавающей точкой на точное равенство - плохая практика...
1
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,332
06.12.2020, 21:25
Цитата Сообщение от Gdez Посмотреть сообщение
Python
1
2
3
from math import sqrt
if sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2) == sqrt((x2 - x3) ** 2 + (y2 - y3) ** 2) and sqrt((x2 - x3) ** 2 + (y2 - y3) ** 2) == sqrt((x3 - x4) ** 2 + (y3 - y4) ** 2) and sqrt((x3 - x4) ** 2 + (y3 - y4) ** 2) == sqrt((x4 - x1) ** 2 + (y4 - y1) ** 2):
    print(1, 2, 3, 4)
Ошибку вы дает что x1 не объявлен????
Миниатюры
Определить номера точек, которые могут являться вершинами квадрата  
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
06.12.2020, 21:33
Catstail, у ромба из двух равносторонних треугольника тоже будет два числа

Добавлено через 31 секунду
isaak, это не программа для задачи

Добавлено через 2 минуты
Catstail, спасибо
Gdez, сравнивать числа с плавающей точкой на точное равенство - плохая практика...
Это в какой теме?

Добавлено через 3 минуты
Проверка по векторам
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
def quat(xy) :
    tmp = []
    for i in range(3) :
        for j in range(i+1,4) :
            tmp.append((xy[2*i] - xy[2*j], xy[2*i + 1] - xy[2*j + 1]))
    cnt = 0
    for i in tmp :
        j = (-1 * i[0], -1 * i[1])
        if tmp.count(i) + tmp.count(j) == 2 :
            cnt += 1
    return cnt == 4
 
quat([ 3, 1, 5, 5, 2, 4, 6, 2])
1
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,332
06.12.2020, 21:34
Цитата Сообщение от Gdez Посмотреть сообщение
это не программа для задачи
А что это?
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38194 / 21127 / 4309
Регистрация: 12.02.2012
Сообщений: 34,732
Записей в блоге: 14
06.12.2020, 21:39
Gdez, спасибо! Поправочка:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
def isSquare(x,y):
    d=[0,0,0,0,0,0]
    k=0
    for i in range(3):
        for j in range(i+1,4):
            p=x[i]-x[j]
            q=y[i]-y[j]
            d[k]=p*p+q*q
            k+=1
    for a in d:
        if not d.count(a) in [2,4]:
            return False
    return True
Добавлено через 59 секунд
Цитата Сообщение от Gdez Посмотреть сообщение
Это в какой теме?
в этой. Пост #12

Добавлено через 2 минуты
Цитата Сообщение от isaak Посмотреть сообщение
А что это?
это проверка четверки точек, образуют ли они квадрат
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
06.12.2020, 21:55
Catstail, это ?
((-1,-3)==(1,3)==(3,-1)==(-3,1))
Это кортежи - координаты вектора с равными скалярами

Добавлено через 3 минуты
isaak,
А что это?
Последовательно по четыре разных точки "отправляешь" на проверку в одну из этих функций. При положительном ответе выводишь номера отправленных точек
0
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,332
06.12.2020, 22:23
Цитата Сообщение от Gdez Посмотреть сообщение
Последовательно по четыре разных точки "отправляешь" на проверку в одну из этих функций. При положительном ответе выводишь номера отправленных точек
У тебя получается 6 точек вместо 4 , что то я не догоняю????

Добавлено через 3 минуты
Цитата Сообщение от Gdez Посмотреть сообщение
Python
1
2
3
from math import sqrt
if sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2) == sqrt((x2 - x3) ** 2 + (y2 - y3) ** 2) and sqrt((x2 - x3) ** 2 + (y2 - y3) ** 2) == sqrt((x3 - x4) ** 2 + (y3 - y4) ** 2) and sqrt((x3 - x4) ** 2 + (y3 - y4) ** 2) == sqrt((x4 - x1) ** 2 + (y4 - y1) ** 2):
    print(1, 2, 3, 4)
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38194 / 21127 / 4309
Регистрация: 12.02.2012
Сообщений: 34,732
Записей в блоге: 14
06.12.2020, 22:24
Цитата Сообщение от Gdez Посмотреть сообщение
from math import sqrt
if sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2) == sqrt((x2 - x3) ** 2 + (y2 - y3) ** 2) and sqrt((x2 - x3) ** 2 + (y2 - y3) ** 2) == sqrt((x3 - x4) ** 2 + (y3 - y4) ** 2) and sqrt((x3 - x4) ** 2 + (y3 - y4) ** 2) == sqrt((x4 - x1) ** 2 + (y4 - y1) ** 2):
    print(1, 2, 3, 4)
- я на это обратил внимание
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.12.2020, 22:24
Помогаю со студенческими работами здесь

Определить номера точек, которые могут являться вершинами квадрата
В одномерном массиве с четным количеством элементов 2N находятся координаты N точек плоскости. Они располагаются в следующем порядке: x_1,...

Определить номера точек, которые могут являться вершинами квадрата
В одномерном массиве с четным количеством элементов (2N) находятся координаты N точек плоскости. Они располагаются в следующем порядке x1,...

Определить номера точек, которые могут являться вершинами квадрата
В одномерном массиве с чётным количеством элементов (2N) находятся координаты N точек плоскости. Они располагаются в следующем порядке: x1,...

Определить номера точек, которые могут являться вершинами квадрата
В одномерном массиве с четным (2N) количеством элементов находятся координаты N точек плоскости, расположенные в порядке 1 1 2 2 3 3 ...

Определить номера точек, которые могут являться вершинами квадрата
В одномерном массиве с четным количеством элементов (2N) находятся координаты N точек плоскости. Они располагаются в следующем порядке:...


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

Или воспользуйтесь поиском по форуму:
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 создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru