Enunciado: Dados cuatro puntos de un plano (x,y) identificar si corresponden a los vertices de un cuadrado.
Una forma de resolver el problema puede ser la siguiente, ingresando los datos, evaluando las diferentes formas en que pueden estar ordenados los vertices.
Codigo:
//*********************************************************************
#include <stdio.h>
#include <windows.h>
void pos(short x, short y);
int main(){
int ax,ay,bx,by,cx,cy,dx,dy;
int cuad=0;
puts("Ingrese el vertice x del punto A: ");
scanf("%d",&ax);
puts("Ingrese el vertice y del punto A: ");
scanf("%d",&ay);
puts("Ingrese el vertice x del punto B: ");
scanf("%d",&bx);
puts("Ingrese el vertice y del punto B: ");
scanf("%d",&by);
puts("Ingrese el vertice x del punto C: ");
scanf("%d",&cx);
puts("Ingrese el vertice y del punto C: ");
scanf("%d",&cy);
puts("Ingrese el vertice x del punto D: ");
scanf("%d",&dx);
puts("Ingrese el vertice y del punto D: ");
scanf("%d",&dy);
system("cls");
//EVALUANDO TODAS LAS COMBINACIONES
// 1 Condiciones para abcd
if( (ax==cx) && (bx==dx) && (ay==by) && (cy==dy) && (bx-ax==ay-cy) )
cuad=1;
// 2 condiciones para bacd
if( (bx==cx) && (ax==dx) && (by==ay) && (cy==dy) && (ax-bx==by-cy) )
cuad=1;
// 3 condiciones para acbd
if( (ax==bx) && (ay==cy) && (cx==dx) && (by==dy) && (cx-ax==ay-by) )
cuad=1;
// 4 condiciones para adcb
if( (ax==cx) && (dx==bx) && (ay==dy) && (cy==by) && (dx-ax==ay-cy) )
cuad=1;
// 5 condiciones para abdc
if( (ax==dx) && (bx==cx) && (ay==by) && (cy==dy) && (bx-ax==ay-dy) )
cuad=1;
// 6 condiciones para adbc
if( (ax==bx) && (dx==cx) && (ay==dy) && (by==cy) && (dx-ax==ay-by) )
cuad=1;
// 7 condiciones para acdb
if( (ax==dx) && (bx==cx) && (ay==cy) && (by==dy) && (cx-ax==ay-dy) )
cuad=1;
// 8 condiciones para badc
if( (bx==dx) && (ax==cx) && (ay==by) && (cy==dy) && (ax-bx==by-dy) )
cuad=1;
// 9 condiciones para bcda
if( (bx==dx) && (ax==cx) && (ay==dy) && (cy==by) && (cx-bx==by-dy) )
cuad=1;
// 10 condiciones para bcad
if( (bx==ax) && (dx==cx) && (ay==dy) && (cy==by) && (cx-bx==by-ay) )
cuad=1;
// 11 condiciones para bdca
if( (bx==cx) && (ax==dx) && (ay==cy) && (dy==by) && (dx-bx==by-cy) )
cuad=1;
// 12 condiciones para bdca
if( (bx==cx) && (ax==dx) && (ay==cy) && (dy==by) && (dx-bx==by-cy) )
cuad=1;
// 13 condiciones para bdac
if( (bx==ax) && (ax==cx) && (ay==cy) && (dy==by) && (dx-bx==by-ay) )
cuad=1;
// 14 condiciones para cabd
if( (bx==cx) && (ax==dx) && (ay==cy) && (dy==by) && (ax-cx==cy-by) )
cuad=1;
// 15 condiciones para cadb
if( (cx==dx) && (ax==bx) && (cy==ay) && (dy==by) && (ax-cx==cy-dy) )
cuad=1;
// 16 condiciones para cbad
if( (ax==cx) && (bx==dx) && (ay==dy) && (cy==by) && (dx-cx==cy-ay) )
cuad=1;
// 17 condiciones para cbda
if( (dx==cx) && (ax==bx) && (by==cy) && (dy==ay) && (bx-cx==cy-dy) )
cuad=1;
// 18 condiciones para cdab
if( (ax==cx) && (dx==bx) && (dy==cy) && (by==ay) && (dx-cx==cy-ay) )
cuad=1;
// 19 condiciones para cdba
if( (dx==ax) && (cx==bx) && (dy==cy) && (by==ay) && (dx-cx==cy-by) )
cuad=1;
// 20 condiciones para dacb
if( (dx==cx) && (ax==bx) && (dy==ay) && (by==cy) && (ax-dx==dy-cy) )
cuad=1;
// 21 condiciones para dabc
if( (dx==bx) && (ax==cx) && (dy==ay) && (by==cy) && (ax-dx==dy-by) )
cuad=1;
// 22 condiciones para dcab
if( (dx==ax) && (bx==cx) && (dy==cy) && (by==ay) && (cx-dx==dy-ay) )
cuad=1;
// 23 condiciones para dcba
if( (dx==bx) && (ax==cx) && (dy==cy) && (by==ay) && (cx-dx==dy-by) )
cuad=1;
// 24 condiciones para dbac
if( (dx==ax) && (bx==cx) && (dy==by) && (cy==ay) && (bx-dx==dy-ay) )
cuad=1;
// 25 condiciones para dbca
if( (dx==cx) && (bx==ax) && (dy==by) && (cy==ay) && (bx-dx==dy-cy) )
cuad=1;
pos(ax,ay);
printf("A");
pos(bx,by);
printf("B");
pos(cx,cy);
printf("C");
pos(dx,dy);
printf("D")
if(cuad==1){
pos(10,10);
printf(" \tCuadrado.");
}else{
pos(10,10);
printf("\tNo es cuadrado.");
}
return 0;
}
void pos(short x, short y){
COORD coord= {x,y};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
}
//*********************************************************************
Salida:
Al ingresar los vertices , la salida seria la siguiente:
Pero en caso de ingresar vertices de un cuadrado que tiene forma de
rombo, o cuya posición en el plano tinene modificada su pendiente este
programa no lo reconocera como un cuadrado.




No hay comentarios:
Publicar un comentario