вершины квадрата

08.12.2010
13
0
#1
Даны числа (x,y)...(xn,yn). Узнать, если среди них вершины квадрата. Если да, вывести их.



P.S. Не могу понять как написать алгоритм, но идеи как решить есть.
 
08.12.2010
13
0
#2
C++:
#include<conio.h>
#include<stdio.h>
#define N 2
int main()
{
int x,y;

printf("Введите x и y\n");
for(i=0; i<N; i++)
scanf("%d%d",&x,&y); //Вводим вершины
for(i=0; i<N; i++)
{
if(fabs(i,i-1)==fabs(i-1,i-2))		/*Отнимаем между собой две координаты и сравниваем
их модули. Если они равны, выводим вершины квадрата*/
printf("Вершины квадрата есть");
printf("%d%d",x,y);
else
printf("Вершин нет");
}
getch();
return 0;
}
 

lazybiz

Well-known member
03.11.2010
1 339
0
#3
Алгоритм у тебя в корне не верный. Для начала тебе нужен массив структур типа point, которая состоит из двух координат (но можно и по-другому). Если меня никто не опередит, или ты не додумаешься сам о чем я говорю (в чем я конечно сомневаюсь), то я тебе готов помочь:rolleyes:
 

acorn

PHP Developer
29.08.2004
585
3
#4
Как я понимаю, в квадрате четыре вершины... так что нужно взять вершина A и искать вершину B, которая лежит на той же линии, параллельной одной из осей координат (допустим, ось x), потом для вершины B по оси Y, после чего для вершины C по оси X и проверяем находятся ли вершины D и A на одной линии, параллельной оси Y. Алгоритм совершенно неоптимален и могут быть недочеты.
 

hosm

* so what *
18.05.2009
2 442
6
#5
Acorn а зачем к осям привязываться?
что, если квадрат повернуть на 45°, он сразу перестает быть квадратом?
dimon131 Проверки одинаковой длины сторон недостаточно, ибо не каждый ромб будет квадратом.
 
I

ierofant

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

lazybiz

Well-known member
03.11.2010
1 339
0
#7
Acorn а зачем к осям привязываться?
что, если квадрат повернуть на 45°, он сразу перестает быть квадратом?
Лен) Я думаю там это не предусмотрено) Алгоритм наипростейший. Acorn, кстати, двигался в правильном направлении. Нужно сравнивать по осям, горизонтальным и вертикальным.
К примеру:
C++:
point  a, b;
for ( i = 0; i < n_points; i++ ) {
a = pts[i];
for ( j = 0; j < n_points; j++ ) {
b = pts[j];
if ( abs( a.x - b.x ) == abs( a.y - b.y ) ) {
// вывод координат точки
}
}
}
Но это только по двум точкам. Для четырех будет посложнее.
 

acorn

PHP Developer
29.08.2004
585
3
#8
OKEN
не подумал про вращение, конец рабочего дня всё-таки :(
..а как насчет того, что у квадрата диагонали равны? всё, решение придумано 100%, реализовывайте сами ;)