Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.11.2020, 17:00   #1
Usernameistaken
 
Регистрация: 18.11.2020
Сообщений: 6
По умолчанию Как проверить образують ли 4 точки квадрат?

Пользователь вводит 4 координаты (x1,y1, x2, y2, x3, y3, x4, y4) и если эти 4 точки образуют квадрат, то выводиться 1, если нет, то 0.
Помогите пожалуйста реализовать это.
Usernameistaken вне форума Ответить с цитированием
Старый 28.11.2020, 17:42   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

1. квадрат это ромб с равными диагоналями.
2. ромб это четырехугольник с четырьмя равными сторонами.

3. расстояние между двумя точками это
корень квадратный из суммы квадратов dx и dy, где
dx --разность координаты x для этих точек
dy --разность координаты y для этих точек

4. посчитать расстояния(длины сторон и диагоналей), можно и просто квадраты оных (без расчета корня).
5. проверить их на совпадения(см. пп.1., 2.).
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 28.11.2020 в 17:47.
evg_m вне форума Ответить с цитированием
Старый 28.11.2020, 18:11   #3
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Другой путь:
Вариант а)
1. Проверяем равенство двух соседних сторон. У квадрата они равны.
2. Проверяем Перпендикулярность этих сторон. У квадрата они перпендикулярны.
3. Проверяем равенство диагоналей. У квадрата они равны.

Вариант б)
1. Ищем координаты точек, которые являются серединами диагоналей.
Если совпадают, то точки лежат на окружности, а иначе не квадрат.
2. Проверяем равенство двух соседних сторон.
Если равны, то квадрат, а иначе - не квадрат.

PS:
Второй вариант проще.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 28.11.2020, 18:59   #4
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,550
По умолчанию

Тут ещё засада: координаты могут вводиться не в порядке обхода по сторонам 4-угольника (по часовой или против). Например: 1-я, 3-я,4-я, 2-я. Нужно ещё определить этот порядок. Но для 8-го класса СШ это, наверно, излишне.
А если всё-таки надо, то я бы вычислил условный центр где-то в середине 4-угольника и упорядочил точки по возхрастанию величины угла между осью, положим, Х и направлением от центра на точку.
Эта тема регулярно появляется с началом нового учебного года. Я и сам на неё отвечал минимум 1 раз, да лень искать.
------------------------------
А вообще можно тупо рассчитать расстояния от каждой точки до каждой, и если 4 совпадут (в пределах допустимой ошибки) и две оствшиеся - тоже меж собой совпадут - пишем КВАДРАТ и идём пить кофий.
А в мои студенческие времена получивший двойку на экзамене на вопрос "Ну как?" отвечал "Квадрат !"

Последний раз редактировалось digitalis; 28.11.2020 в 19:16.
digitalis вне форума Ответить с цитированием
Старый 28.11.2020, 19:31   #5
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

По моему - проще всего так:
Берем любую из точек , считаем расстояния до 3-х других. Получаем 3 величины.
Для квадрата - две из этих величин равны, третья в корень из 2 раз больше.
type_Oleg вне форума Ответить с цитированием
Старый 28.11.2020, 20:11   #6
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,550
По умолчанию

"Красиво и просто, в стиле чемпиона" © О.Бендер
digitalis вне форума Ответить с цитированием
Старый 29.11.2020, 14:05   #7
сфинкс
Форумчанин
 
Аватар для сфинкс
 
Регистрация: 17.06.2012
Сообщений: 957
По умолчанию

Программа на языке высочайшего уровня qbasic бэйсик qb64

Код:
'quaqua.bas

x1=0
y1=0
       x2=5
       y2=0
x3=5
y3=5
       x4=0
       y4=5

d1 = (x3-x1)^2+(y3-y1)^2
d2 = (x4-x2)^2+(y4-y2)^2

s1 = (x2-x1)^2+(y2-y1)^2
s2 = (x4-x1)^2+(y4-y1)^2

if d2=d1 then if s2=s1 then ?1 else ?0 else ?0

end
Переведя на другие языки проверяйте через онлайн компилятор

Результат: 1

Исправлено вычисление сторон и следующее сообщение устарело

Проверочные точки прямоугольника:
Код:
x1 = 0
y1 = 0
      x2 = 6
      y2 = 0
x3 = 6
y3 = 5
      x4 = 0
      y4 = 5
Результат: не 1
Случайные и Массивы https://programmersforum.ru/showthread.php?t=344371 Учим C# & basic & excel & python https://programmersforum.ru/showthre...=327446&page=5 ничего нерекомендую

Последний раз редактировалось сфинкс; 29.11.2020 в 19:38.
сфинкс вне форума Ответить с цитированием
Старый 29.11.2020, 17:45   #8
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

сфинкс
Цитата:
Программа на языке высочайшего уровня qbasic бэйсик qb64
Попробуйте ваше решение с такими значениями:
Код:
x1=0
y1=0
       x2=5
       y2=0
x3=5
y3=7
       x4=0
       y4=7
Код:
d1 = (x3-x1)^2+(y3-y1)^2   ' Диагональ между т.1 и .3 
d2 = (x4-x2)^2+(y4-y2)^2   ' Диагональ между т.2 и .4 

s1 = (x2-x1)^2+(y2-y1)^2   ' Сторона между т.1 и т.2
s2 = (x4-x3)^2+(y4-y3)^2   ' Сторона между т.3 и т.4
В вашем алгоритме проверяется равенство диагоналей и противоположных сторон.
Для прямоугольника это так же верно.

type_Oleg
Цитата:
По моему - проще всего так:
Берем любую из точек , считаем расстояния до 3-х других. Получаем 3 величины.
Для квадрата - две из этих величин равны, третья в корень из 2 раз больше.
Возможно и проще, но сравнивать сложнее, так как корень из 2 - иррациональное.
В этом случае нужно задавать и epsilon.
Если вводятся координаты, то они все либо целые, либо рациональные числа.
Другие, предложенные тут методы этого лишены.

Так что получить ошибочное решение весьма вероятно.

PS: Навеяло, так как недавно познакомился в Python с такими типами данных, как Fraction и Decimal.

PSS: "Красиво и просто, в стиле чемпиона" © О.Бендер
А чё он там спёр? Туру (ладью) или лошадь (коня)?
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 29.11.2020, 22:15   #9
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,550
По умолчанию

Малость переврал, бо по памяти
Ласкеру проворно подставили мраморную лестницу, и бодрый экс-чемпион, сдувая с левого рукава пылинку, севшую на него во время полета над Силезией, упал в объятия одноглазого. Одноглазый взял Ласкера за талию, подвел его к чемпиону и сказал:

— Помиритесь! Прошу вас об этом от имени широких васюкинских масс! Помиритесь! Хозе-Рауль шумно вздохнул и, потрясая руку старого ветерана, сказал:

— Я всегда преклонялся перед вашей идеей перевода слона в испанской партии с b5 на c4!

— Ура! — воскликнул одноглазый. — Просто и убедительно, в стиле чемпиона! И вся необозримая толпа подхватила:

— Ура! Виват! Банзай! Просто и убедительно, в стиле чемпиона! ! !

Если квадрат не параллелен осям координат, то при вычислении расстояний методом Пифа Горыча - независимо от выбранного метода - неизбежно приходим к действительным числам, а сравнивать их - без ёпсилона никак, хошь-не-хошь.

Последний раз редактировалось digitalis; 29.11.2020 в 22:22.
digitalis вне форума Ответить с цитированием
Старый 30.11.2020, 08:53   #10
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

digitalis
Цитата:
Если квадрат не параллелен осям координат, то при вычислении расстояний методом Пифа Горыча - независимо от выбранного метода - неизбежно приходим к действительным числам, а сравнивать их - без ёпсилона никак, хошь-не-хошь.
А вы не пробовали сравнивать квадраты сторон.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С++ и матан. Как проверить то, что три точки лежат на одной прямой? Алексей_2012 Помощь студентам 30 16.12.2016 15:19
нарисовать точки и проверить их циклом(DELPHI) beygul Помощь студентам 1 24.03.2014 14:46
решение задачи в Pascal - Проверить принадлежность точки с заданными координатами кругу с заданным радиусом и координатами центра Екатерина23 Помощь студентам 1 05.12.2013 16:35
Как в С квадрат поставить? Ol'ga Общие вопросы C/C++ 10 31.10.2010 10:31
Имеются координаты точки. Как проверить какого цвета соседние точки на форме? Rin Мультимедиа в Delphi 2 10.11.2009 22:47