проверка, определяют ли 4 точки на плоскости квадрат? - PullRequest
3 голосов
/ 24 апреля 2010

как проверить, определяют ли 4 точки на плоскости квадрат? Что за функция, которая задала точку и значение площади квадрата в качестве входных параметров, возвращает четыре квадрата (определяют соответствующий тип) со сторонами, параллельными оси x и оси y

вот как я начинаю:

#include <stdio.h>
#include<math.h>
struct point{
float x;
float y;
}
typedef struct point POINT;
struct square{
struct point p1;
struct point p2;
struct point p3;
struct point p4;
}
typedef struct square SQUARE;

int main()
{
int point;
printf("point coordinate");
printf("\n\n");

printf("enter data\n");

Ответы [ 3 ]

4 голосов
/ 24 апреля 2010

Рассчитайте все 6 квадратов расстояний между каждой парой точек. То есть:

(x1-x2)*(x1-x2) + (y1-y2)*(y1-y2)

Сортировать их.
Четыре наименьших из них должны быть (приблизительно) равны, а два больших (примерно) должны быть в два раза больше.

Вам нужна мера "как квадрат - это квадрат?"

1 голос
/ 24 апреля 2010
  1. Выберите p1 и сделайте его источником, то есть переведите каждую точку на -p1.
  2. Пусть p2 - следующая точка, ближайшая к p1. (Исправлено в ответ на замечание Пола Р.)
  3. Возьмите угол тета между p1 и p2, поверните все точки на -theta. На этом этапе p1 и p2 образуют горизонтальную линию (при условии, что угол 0 ориентирован на восток).
  4. Проверьте, чтобы p3 и p4 имели одинаковую координату y (в пределах допуска).
  5. Проверьте, что p3 и p4 имеют те же координаты x, что и p1 и p2, в любом порядке (в пределах допуска).
0 голосов
/ 24 апреля 2010

Это зависит от того, можете ли вы сделать какие-либо предположения относительно порядка пунктов. Если нет, то будет две операции:

  1. сначала отсортируйте точки по X, Y

  2. проверка на одинаковую ширину / высоту (обратите внимание, что, поскольку вы используете поплавки для своих координат, вам, вероятно, потребуется определить небольшое значение допуска при сравнении на равенство)

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

(Обратите внимание, что в этом ответе предполагается, что вы проверяете квадрат, который находится в той же ориентации, что и оси X / Y - если квадрат можно повернуть на некоторый произвольный угол, он становится немного сложнее.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...