Vector products: Difference between revisions

Content deleted Content added
m →‎{{header|REXX}}: simplified some code.
Updated to work with Nim 1.4: replaced "~×" and "~•" with "cross" and "dot" as the infix notation no longer works. Used "strformat". Other miscellaneous changes.
Line 3,026:
 
=={{header|Nim}}==
<lang nim>import strformat, strutils
 
type Vector3 = array[1..3, float]
 
proc `$`(a: Vector3): string =
result = "[("
for i, x in a:
result.addaddSep(", ", "1)
result.add &"]{x}"
result.add ')'
 
proc `~⨯`cross(a, b: Vector3): Vector3 =
for i, x in a:
if i > a.low:
result.add ", "
result.add formatFloat(x, precision = 0)
 
result.add "]"
 
proc `~⨯`(a, b: Vector3): Vector3 =
result = [a[2]*b[3] - a[3]*b[2], a[3]*b[1] - a[1]*b[3], a[1]*b[2] - a[2]*b[1]]
 
proc `~•`[T]dot(a, b: TVector3): float =
for i in a.low..a.high:
result += a[i] * b[i]
 
proc scalartripscalarTriple(a, b, c: Vector3): float = a ~• .dot(b ~⨯ .cross(c))
 
proc vectortripvectorTriple(a, b, c: Vector3): Vector3 = a ~⨯ .cross(b ~⨯ .cross(c))
 
let
Line 3,055 ⟶ 3,052:
b = [4.0, 3.0, 5.0]
c = [-5.0, -12.0, -13.0]
 
echo "a ⨯ b = ", a ~⨯ b
echo &"a b = ", ({a ~• b).formatFloatcross(precision = 0b)}"
echo &"a . (b ⨯ c) = ", (scalartrip({a, b, c)).formatFloatdot(precision = 0b)}"
echo &"a . (b ⨯ c) = ", vectortrip{scalarTriple(a, b, c)</lang>}"
echo &"a ⨯ (b ⨯ c) = [-267{vectorTriple(a, 204b, -3]c)}"</prelang>
Output:
 
<pre>a ⨯ b = [5, 5, -7]
{{out}}
a • b = 49
<pre>a . (b = c)(5.0, =5.0, 6-7.0)
a . b = 49.0
a ⨯ (b ⨯ c) = [-267, 204, -3]</pre>
a . (b ⨯ c) = 6.0
a ⨯ (b ⨯ c) = (-267.0, 204.0, -3.0)</pre>
 
=={{header|Objeck}}==