Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save jhasmany-fernandez/56874b6f2990b97dc331feeb829148d9 to your computer and use it in GitHub Desktop.
Save jhasmany-fernandez/56874b6f2990b97dc331feeb829148d9 to your computer and use it in GitHub Desktop.
U.A.G.R.M. | Materia: Programacion Logica y Funcional | Docente: Edwin Vargas Yapura | Repositorio: Predicados Sobre El Plano Cartesiano | Lenguaje: Prolog
% ---------------------------------------------+
% GRUPO: 11 | ╔═══╗ ♪
% NOMBRE: FERNANDEZ ORTEGA JHASMANY JHUNNIOR | ║███║ ♫
% MATERIA: INF 318 - SA | ║ (●) ♫
% ---------------------------------------------+ ╚═══╝♪♪
% |---------------------------------------------+
% |PREDICADOS SOBRE EL PLANO CARTESIANO. |
% |_____________________________________________+
% 1.lugar(X, Y, L) : Predicado que encuentra en L, el lugar dónde se encuentra el punto X, Y.
lugar(X, Y, Q):- X=:=0, Y=:=0, Q is 0,!.
lugar(X, Y, Q):- X > 0, Y > 0, Q is 1,!.
lugar(X, Y, Q):- X < 0, Y > 0, Q is 2,!.
lugar(X, Y, Q):- X < 0, Y < 0, Q is 3,!.
lugar(X, Y, Q):- X > 0, Y < 0, Q is 4,!.
lugar(X, Y, Q):- ejeX(X, Y), Q is 5,!.
lugar(X, Y, Q):- ejeY(X, Y), Q is 6.
% 2. mismoLugar(X1, Y1, X2, Y2) : Predicado que es True, si los puntos X1, Y1 y X2, Y2 se encuentran en el mismo lugar.
mismoLugar(X1, Y1, X2, Y2):- lugar(X1,Y1,C1),lugar(X2,Y2,C2),C1=:=C2.
% 3. enEjeX(X, Y) : Predicado que es True, si el punto X, Y se encuentra en el eje X.
ejeX(X, Y):- X=\=0, Y=:=0.
% 4. enEjeY(X, Y) : Predicado que es True, si el punto X, Y se encuentra en el eje Y.
ejeY(X, Y):- X=:=0, Y=\=0.
% 5. ejesDif(X1, Y1, X2, Y2) : Predicado que es True, si los puntos X1, Y1 y X2, Y2 se encuentran en ejes diferentes.
ejesDif(X1, Y1, X2, Y2):- ejeX(X1,Y1),ejeY(X2,Y2),!.
ejesDif(X1, Y1, X2, Y2):- ejeX(X2,Y2),ejeY(X1,Y1).
% 6. diagonalOpuesto(X1, Y1, X2, Y2) : Predicado que es True, si los puntos X1, Y1 y X2, Y2 se encuentran en cuadrantes diagonalmente opuestos.
diagOpuestos(X1, Y1, X2, Y2):- lugar(X1,Y1,C1),lugar(X2,Y2,C2),C1=:=1,C2=:=3,!.
diagOpuestos(X1, Y1, X2, Y2):- lugar(X1,Y1,C1),lugar(X2,Y2,C2),C1=:=3,C2=:=1,!.
diagOpuestos(X1, Y1, X2, Y2):- lugar(X1,Y1,C1),lugar(X2,Y2,C2),C1=:=2,C2=:=4,!.
diagOpuestos(X1, Y1, X2, Y2):- lugar(X1,Y1,C1),lugar(X2,Y2,C2),C1=:=4,C2=:=2.
% 7. distancia(X1, Y1, X2, Y2, Dist) : Predicado que encuentra en Dist, la distancia del punto X1, Y1 al punto X2, Y2.
distancia(X1, Y1, X2, Y2, Dist):- D is (X2-X1)*(X2-X1)+(Y2-Y1)*(Y2-Y1), Dist is D^(0.5).
% 8. estaDentro(X1, Y1, R) : Predicado que devuelve True, si el punto X1, Y1 se encuentra dentro de la circunferencia con radio R y centro en el origen.
estaDentro(X1, Y1, R):- distancia(0,0,X1,Y1,D),D=<R.
% 9. equilatero(X1, Y1, X2, Y2, X3, Y3) : Predicado que es True, si los tres puntos forman un triángulo equilátero.
triangEquilatero(X1, Y1, X2, Y2, X3, Y3):-distancia(X1,Y1,X2,Y2,D1),distancia(X1,Y1,X3,Y3,D2),
distancia(X2,Y2,X3,Y3,D3),round(D1)=:=round(D2),round(D2)=:=round(D3).
% 10. isosceles(X1, Y1, X2, Y2, X3, Y3) : Predicado que es True, si los tres puntos forman un triángulo isósceles.
isosceles(X1, Y1, X2, Y2, X3, Y3):-distancia(X1,Y1,X2,Y2,D1),distancia(X1,Y1,X3,Y3,D2),
distancia(X2,Y2,X3,Y3,D3),round(D1)=:=round(D2),round(D2)=\=round(D3),!.
isosceles(X1, Y1, X2, Y2, X3, Y3):-distancia(X1,Y1,X2,Y2,D1),distancia(X1,Y1,X3,Y3,D2),
distancia(X2,Y2,X3,Y3,D3),round(D1)=:=round(D3),round(D2)=\=round(D3),!.
isosceles(X1, Y1, X2, Y2, X3, Y3):-distancia(X1,Y1,X2,Y2,D1),distancia(X1,Y1,X3,Y3,D2),
distancia(X2,Y2,X3,Y3,D3),round(D3)=:=round(D2),round(D2)=\=round(D1).
% 11. horizontal(X1, Y1, X2, Y2) : Predicado que es True, si los dos puntos definen una recta horizontal.
horizontal(X1, Y1, X2, Y2):- Y1=:=Y2, X1=\=0, X2=\=0.
% 12. vertical(X1, Y1, X2, Y2) : Predicado que es True, si los dos puntos definen una recta vertical.
vertical(X1, Y1, X2, Y2):- X1=:=X2, Y1=\=0, Y2=\=0.
% 13. lugarDif(X1, Y1, X2, Y2) : Predicado que es True, si los puntos X1, Y1 y X2, Y2 se encuentran en lugares diferentes del plano cartesiano.
lugarDif(X1, Y1, X2, Y2):-lugar(X1,Y1,L1), lugar(X2,Y2,L2), L1=\=L2.
% 14. lugarDif(X1, Y1, X2, Y2, X3, Y3) : Predicado que es True, si los puntos X1, Y1, X2, Y2, X3, Y3 se encuentran en lugares diferentes del plano cartesiano.
lugarDif(X1,Y1,X2,Y2,X3,Y3):-not(mismoLugar(X1,Y1,X2,Y2)),not(mismoLugar(X1,Y1,X3,Y3)),not(mismoLugar(X2,Y2,X3,Y3)),!.
% 15. dosMismoLugar(X1, Y1, X2, Y2, X3, Y3) : Predicado que es True, si dos puntos se encuentran en el mismo lugar y el otro punto en otro lugar.
dosMismoLugares(X1,Y1,X2,Y2,X3,Y3):-mismoLugar(X1,Y1,X2,Y2),not(mismoLugar(X2,Y2,X3,Y3)),!.
dosMismoLugares(X1,Y1,X2,Y2,X3,Y3):-mismoLugar(X1,Y1,X3,Y3),not(mismoLugar(X2,Y2,X3,Y3)),!.
dosMismoLugares(X1,Y1,X2,Y2,X3,Y3):-mismoLugar(X2,Y2,X3,Y3),not(mismoLugar(X2,Y2,X1,Y1)),!.
% 16. puntoMedio(X1, Y1, X2, Y2, X, Y) : Predicado que encuentra en X, Y el punto medio entre los puntos X1, Y1 y X2, Y2.
puntoMedio(X1, Y1, X2, Y2, X, Y):-X is (X1 + X2) /2, Y is (Y1 + Y2) /2.
% 17. pendiente(X1, Y1, X2, Y2, P1) : Predicado que encuentra la pendiente de la recta definida por los puntos X1, Y1, X2, Y2. Considerar si la recta es vertical.
pendiente(X1, Y1, X2, Y2,Pen):- Pen is (Y2-Y1)/(X2-X1).
% 18. mismaRecta(X1, Y1, X2, Y2, X3, Y3) : Predicado que es True, si los tres puntos se encuentra sobre una misma recta.
mismaRecta(X1, Y1, X2, Y2, X3, Y3):- pendiente(X1, Y1, X2, Y2, P1), pendiente(X2, Y2, X3, Y3, P2), P1 == P2.
% 19. Diferentes(X1, Y1, X2, Y2) : Predicado que es True, si ambos puntos son diferentes.
diferentes(X1, Y1, X2, Y2):- X1 =\= X2, ! ; Y1 =\= Y2.
% 20. Diferentes(X1, Y1, X2, Y2, X3, Y3) : Predicado que es True, si los tres puntos son diferentes.
diferentes(X1, Y1, X2, Y2, X3, Y3):- diferentes(X1, Y1, X2, Y2), diferentes(X1, Y1, X3, Y3), diferentes(X2, Y2, X3, Y3).
% 21. dosIguales(X1, Y1, X2, Y2, X3, Y3) : Predicado que es True, si dos puntos dos iguales.
iguales(X1, Y1, X2, Y2):- X1 = X2, Y1 = Y2.
dosIguales(X1, Y1, X2, Y2, X3, Y3):- iguales(X1, Y1, X2, Y2), diferentes(X1, Y1, X3, Y3 ), !.
dosIguales(X1, Y1, X2, Y2, X3, Y3):- iguales(X1, Y1, X3, Y3), diferentes(X1, Y1, X2, Y2 ), !.
dosIguales(X1, Y1, X2, Y2, X3, Y3):- iguales(X2, Y2, X3, Y3), diferentes(X2, Y2, X1, Y1 ), !.
% 22. ladoVertical(X1, Y1, X2, Y2, X3, Y3) : Predicado que es True, si un lado del triángulo es vertical.
ladoVertical(X1, Y1, X2, Y2, X3, Y3):- vertical(X1, Y1, X2, Y2), not(vertical(X1, Y1, X3, Y3)), not(vertical(X2, Y2, X3, Y3)), !.
ladoVertical(X1, Y1, X2, Y2, X3, Y3):- vertical(X1, Y1, X3, Y3), not(vertical(X1, Y1, X2, Y2)), not(vertical(X2, Y2, X3, Y3)), !.
ladoVertical(X1, Y1, X2, Y2, X3, Y3):- vertical(X2, Y2, X3, Y3), not(vertical(X1, Y1, X3, Y3)), not(vertical(X1, Y1, X2, Y2)).
% 23. ladoHorizontal(X1, Y1, X2, Y2, X3, Y3) : Predicado que es True, si un lado del triángulo es horizontal.
ladoHorizontal(X1, Y1, X2, Y2, X3, Y3):-horizontal(X1,Y1,X2, Y2), not(horizontal(X1,Y1,X3,Y3)), not(horizontal(X2,Y2,X3,Y3)), !.
ladoHorizontal(X1, Y1, X2, Y2, X3, Y3):-horizontal(X1,Y1,X3, Y3), not(horizontal(X1,Y1,X2,Y2)), not(horizontal(X2,Y2,X3,Y3)), !.
ladoHorizontal(X1, Y1, X2, Y2, X3, Y3):-horizontal(X2,Y2,X3, Y3), not(horizontal(X1,Y1,X3,Y3)), not(horizontal(X1,Y1,X2,Y2)).
% 24. ladosVertHoriz(X1, Y1, X2, Y2, X3, Y3) : Predicado que es True, si un lado del triángulo es vertical y el otro lado es horizontal.
ladosVertHoriz(X1, Y1, X2, Y2, X3, Y3):-ladoVertical(X1, Y1, X2, Y2, X3, Y3),ladoHorizontal(X1, Y1, X2, Y2, X3, Y3).
% 25. trianguloRectangulo(X1, Y1, X2, Y2, X3, Y3) : Predicado que es True, si el triángulo es triángulo rectángulo.
triangRect(X1, Y1, X2, Y2, X3, Y3):- distancia(X1,Y1,X2,Y2,D1),distancia(X1,Y1,X3,Y3,D2),
distancia(X2,Y2,X3,Y3,D3),round((D1^2))=:=round((D2^2)+(D3^2)),!.
triangRect(X1, Y1, X2, Y2, X3, Y3):- distancia(X1,Y1,X2,Y2,D1),distancia(X1,Y1,X3,Y3,D2),
distancia(X2,Y2,X3,Y3,D3),round((D2^2))=:=round((D1^2)+(D3^2)),!.
triangRect(X1, Y1, X2, Y2, X3, Y3):- distancia(X1,Y1,X2,Y2,D1),distancia(X1,Y1,X3,Y3,D2),
distancia(X2,Y2,X3,Y3,D3),round((D3^2))=:=round((D1^2)+(D2^2)).
% Incluir al menos 5 nuevos predicados adicionales interesantes.
% 26. triangDif(X1, Y1, X2, Y2, X3, Y3): Predicado que devuelve True, si los vértices del triangulo se encuentran en diferentes cuadrantes del plano cartesiano. Asumir que se tiene los predicados del trabajo.
triangDif(X1, Y1, X2, Y2, X3, Y3):- lugar(X1,Y1,C1),lugar(X2,Y2,C2),lugar(X3,Y3,C3),C1=\=C2,C2\=C3,C1=\=C3.
% 27. triangulo(X1, Y1, X2, Y2, X3, Y3): Predicado que es True, si los vértices del triangulo se encuentran se encuentran en los ejes del plano cartesiano.
triangulo(X1, Y1, X2, Y2, X3, Y3):- ejeX(X1,Y1),ejeX(X2,Y2),X1=\=X2,ejeY(X3,Y3),!.
triangulo(X1, Y1, X2, Y2, X3, Y3):- ejeX(X1,Y1),ejeX(X3,Y3),X1=\=X3,ejeY(X2,Y2),!.
triangulo(X1, Y1, X2, Y2, X3, Y3):- ejeX(X2,Y2),ejeX(X3,Y3),X2=\=X3,ejeY(X1,Y1).
% 28. diagOpuestos(X1, Y1, X2, Y2): Predicado que es True, si los puntos X1, Y1 y X2, Y2 se encuentra en cuadrantes diagonalmente opuestos.
diagOpuestos(X1, Y1, X2, Y2):- lugar(X1,Y1,C1),lugar(X2,Y2,C2),C1=:=1,C2=:=3,!.
diagOpuestos(X1, Y1, X2, Y2):- lugar(X1,Y1,C1),lugar(X2,Y2,C2),C1=:=3,C2=:=1,!.
diagOpuestos(X1, Y1, X2, Y2):- lugar(X1,Y1,C1),lugar(X2,Y2,C2),C1=:=2,C2=:=4,!.
diagOpuestos(X1, Y1, X2, Y2):- lugar(X1,Y1,C1),lugar(X2,Y2,C2),C1=:=4,C2=:=2.
% 29. sobreEjes(X1, Y1, X2, Y2): Predicado que es True, si los puntos X1, Y1 Y X2, Y2 se encuentran sobre los ejes del plano cartesiano.
sobreEjes(X1, Y1, X2, Y2):- ejeX(X1,Y1);ejeY(X1,Y1),ejeX(X2,Y2);ejeY(X2,Y2).
% 30. vectores formado por dos puntos.
vector(X1, Y1, X2, Y2, Vi, Vj):- Vi is X2 - X1, Vj is Y2 - Y1.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment