(* open TextIO; *) open Real; open Real.Math; (* open String; *) val a = { name = "a", x = valOf(Real.fromString("4.0")) , y = valOf(Real.fromString("-3.0")) , z = valOf(Real.fromString("0.0")) }; val b = { name = "b", x = valOf(Real.fromString("6.0")) , y = valOf(Real.fromString("8.0")) , z = valOf(Real.fromString("0.0")) }; val f = { name = "f", x = valOf(Real.fromString("2.0")) , y = valOf(Real.fromString("-3.0")) , z = valOf(Real.fromString("7.0")) }; val g = { name = "g", x = valOf(Real.fromString("12.0")) , y = valOf(Real.fromString("45.0")) , z = valOf(Real.fromString("-8.0")) }; val h = { name = "h", x = valOf(Real.fromString("-5.0")) , y = valOf(Real.fromString("-3.0")) , z = valOf(Real.fromString("42.0")) }; fun add(name: string, a : {name: string, x: Real.real, y: Real.real, z: Real.real},b : {name: string, x: Real.real, y: Real.real, z: Real.real}) = { name = name, x = (#x(a) + #x(b)), y = (#y(a) + #y(b)), z = (#z(a) + #z(b)) }; fun subtract(name: string, a : {name: string, x: Real.real, y: Real.real, z: Real.real},b : {name: string, x: Real.real, y: Real.real, z: Real.real}) = { name = name, x = (#x(a) - #x(b)), y = (#y(a) - #y(b)), z = (#z(a) - #z(b)) }; fun cross(name: string, a : { name: string, x: Real.real, y: Real.real, z: Real.real},b : {name: string, x: Real.real, y: Real.real, z: Real.real}) = { name = name, x = #y(a) * #z(b) - #y(b) * #x(a), y = #x(b) * #z(a) - #x(a) * #z(b), z = #x(a) * #y(b) - #x(b) * #y(a) }; fun dot(name: string, a : {name: string, x: Real.real, y: Real.real, z: Real.real},b : {name: string, x: Real.real, y: Real.real, z: Real.real}) = { out = { name = name, dot = (#x(a) * #x(b)) + (#y(a) * #y(b)) + (#z(a) + #z(b)) }}; fun magnitude(name: string, a : {name: string, x: Real.real, y: Real.real, z: Real.real}) = { out = { name = name, mag = sqrt((#x(a) * #x(a)) + (#y(a) * #y(a)) + (#z(a) + #z(a))) }}; fun direction_r(name: string, a : {name: string, x: Real.real, y: Real.real, z: Real.real}) = { out = { name = name, d_rad = atan2(#y(a), #x(a)) }}; fun direction_d(name: string, a : {name: string, x: Real.real, y: Real.real, z: Real.real}) = { out = { name = name, d_deg = atan2(#y(a), #x(a)) * 90.0 / asin(1.0) }}; val c = add("a+b",a, b); val d = subtract("b-a",b, a); val e = subtract("a-b",a, b); val ma = magnitude("ma",a); val mb = magnitude("mb",b); val mc = magnitude("mc",c); val md = magnitude("md",d); val me = magnitude("me",e); val dar = direction_r("da_r",a); val dbr = direction_r("db_r",b); val dcr = direction_r("dc_r",c); val ddr = direction_r("dd_r",d); val der = direction_r("de_r",e); val dad = direction_d("da_d",a); val dbd = direction_d("db_d",b); val dcd = direction_d("dc_d",c); val ddd = direction_d("dd_d",d); val ded = direction_d("de_d",e); val ada = dot("a.a",a,a); val adb = dot("a.b",a,b); val bda = dot("b.a",b,a); val adc = dot("a.c",a,c); val dda = dot("d.a",d,a); val ade = dot("a.e",a,e); val eda = dot("e.a",e,a); val aca = cross("aca",a,a); val acb = cross("acb",a,b); val bca = cross("bca",b,a); val acc = cross("acc",a,c); val dca = cross("dca",d,a); val ace = cross("ace",a,e); val eca = cross("eca",e,a); val fcg = cross("fcg",f,g); val fcg = cross("fch",f,h); val fcg = cross("gch",g,g); val fcg = cross("gcf",g,f); val fcg = cross("hcf",h,f); val fcg = cross("hcg",h,g);