:- use_module(library(record)). /* comment */ :- record vector(x:float=0.0,y:float=0.0,z:float=0.0). add_vectors(C,A,B) :- vector_x(A,X1), vector_y(A,Y1), vector_z(A,Z1), vector_x(B,X2), vector_y(B,Y2), vector_z(B,Z2), X is X1 + X2, Y is Y1 + Y2, Z is Z1 + Z2, make_vector([x(X),y(Y),z(Z)],C). subtract_vectors(C,A,B) :- vector_x(A,X1), vector_y(A,Y1), vector_z(A,Z1), vector_x(B,X2), vector_y(B,Y2), vector_z(B,Z2), X is X1 - X2, Y is Y1 - Y2, Z is Z1 - Z2, make_vector([x(X),y(Y),z(Z)],C). dot_vectors(C,A,B) :- vector_x(A,X1), vector_y(A,Y1), vector_z(A,Z1), vector_x(B,X2), vector_y(B,Y2), vector_z(B,Z2), C is X1 * X2 + Y1 * Y2 + Z1 * Z2. cross_vectors(C,A,B) :- vector_x(A,X1), vector_y(A,Y1), vector_z(A,Z1), vector_x(B,X2), vector_y(B,Y2), vector_z(B,Z2), X is Y1 * Z2 - Y2 * Z1, Y is -(X1 * Z2 - X2 * Z1), Z is X1 * Y2 - X2 * Y1, make_vector([x(X),y(Y),z(Z)],C). magnitude(C,A) :- dot_vectors(B,A,A), C is sqrt(B). direction_r(C,A) :- vector_x(A,X1), vector_y(A,Y1), C is atan2(Y1,X1). direction_d(C,A) :- direction_r(B,A), C is B * 90.0 / asin(1.0). problem_05 :- write("Problem 5\n"), make_vector([x(4.0),y(-3.0),z(0.0)],A), make_vector([x(6.0),y(8.0),z(0.0)], B), make_vector([x(2.0),y(-3.0),z(7.0)], F), make_vector([x(12.0),y(45.0),z(-8.0)], G), make_vector([x(-5.0),y(-3.0),z(42.0)], H), vector_x(A,DJD), write("DJD = "), write(DJD),nl, write("A = "), write(A),nl, write("B = "), write(B),nl, add_vectors(C,A,B), write("C = A + B = "), write(C),nl, subtract_vectors(D,B,A), write("D = B - A = "), write(D),nl, subtract_vectors(E,A,B), write("E = A - B = "), write(E),nl, write("F = "), write(F),nl, write("G = "), write(G),nl, write("H = "), write(H),nl, magnitude(MA,A), write("Magnitude A = "), write(MA),nl, magnitude(MB,B), write("Magnitude B = "), write(MB),nl, magnitude(MC,C), write("Magnitude C = "), write(MC),nl, magnitude(MD,D), write("Magnitude D = "), write(MD),nl, magnitude(ME,E), write("Magnitude E = "), write(ME),nl, direction_r(DA_r,A), write("Direction in radians A = "), write(DA_r),nl, direction_r(DB_r,B), write("Direction in radians B = "), write(DB_r),nl, direction_r(DC_r,C), write("Direction in radians C = "), write(DC_r),nl, direction_r(DD_r,D), write("Direction in radians D = "), write(DD_r),nl, direction_r(DE_r,E), write("Direction in radians E = "), write(DE_r),nl, direction_d(DA_d,A), write("Direction in degrees A = "), write(DA_d),nl, direction_d(DB_d,B), write("Direction in degrees B = "), write(DB_d),nl, direction_d(DC_d,C), write("Direction in degrees C = "), write(DC_d),nl, direction_d(DD_d,D), write("Direction in degrees D = "), write(DD_d),nl, direction_d(DE_d,E), write("Direction in degrees E = "), write(DE_d),nl, dot_vectors(AdA,A,A), write("A dot A = "), write(AdA),nl, dot_vectors(AdB,A,B), write("A dot B = "), write(AdB),nl, dot_vectors(BdA,B,A), write("B dot A = "), write(BdA),nl, dot_vectors(AdC,A,C), write("A dot C = "), write(AdC),nl, dot_vectors(DdA,D,A), write("D dot A = "), write(DdA),nl, dot_vectors(AdE,A,E), write("A dot E = "), write(AdE),nl, dot_vectors(EdA,E,A), write("E dot A = "), write(EdA),nl, cross_vectors(AcA,A,A), write("A cross A = "), write(AcA),nl, cross_vectors(AcB,A,B), write("A cross B = "), write(AcB),nl, cross_vectors(BcA,B,A), write("B cross A = "), write(BcA),nl, cross_vectors(AcC,A,C), write("A cross C = "), write(AcC),nl, cross_vectors(DcA,D,A), write("D cross A = "), write(DcA),nl, cross_vectors(AcE,A,E), write("A cross E = "), write(AcE),nl, cross_vectors(EcA,E,A), write("E cross A = "), write(EcA),nl, cross_vectors(FcG,F,G), write("F cross G = "), write(FcG),nl, cross_vectors(FcH,F,H), write("F cross H = "), write(FcH),nl, cross_vectors(GcH,G,H), write("G cross H = "), write(GcH),nl, cross_vectors(GcF,G,F), write("G cross F = "), write(GcF),nl, cross_vectors(HcF,H,F), write("H cross F = "), write(HcF),nl, cross_vectors(HcG,H,G), write("H cross G = "), write(HcG),nl.