Vector products: Difference between revisions

No edit summary
 
(14 intermediate revisions by 10 users not shown)
Line 48:
 
=={{header|11l}}==
<langsyntaxhighlight lang="11l">F scalartriplep(a, b, c)
return dot(a, cross(b, c))
Line 62:
print(‘a x b = #.’.format(cross(a,b)))
print(‘a . (b x c) = #.’.format(scalartriplep(a, b, c)))
print(‘a x (b x c) = #.’.format(vectortriplep(a, b, c)))</langsyntaxhighlight>
 
{{out}}
Line 74:
 
=={{header|Action!}}==
<langsyntaxhighlight Actionlang="action!">TYPE Vector=[INT x,y,z]
 
PROC CreateVector(INT vx,vy,vz Vector POINTER v)
Line 127:
CrossProduct(a,d,e)
Print("ax(bxc)=") PrintVector(e) PutE()
RETURN</langsyntaxhighlight>
{{out}}
[https://gitlab.com/amarok8bit/action-rosetta-code/-/raw/master/images/Vector_products.png Screenshot from Atari 8-bit computer]
Line 147:
 
vector.adb:
<langsyntaxhighlight Adalang="ada">with Ada.Text_IO;
 
procedure Vector is
Line 224:
Ada.Text_IO.Put ("A x (B x C) = "); Vector_Put (A * Float_Vector'(B * C));
Ada.Text_IO.New_Line;
end Vector;</langsyntaxhighlight>
Output:
<pre>A: ( 3.0, 4.0, 5.0)
Line 240:
{{works with|ALGOL 68G|Any - tested with release [http://sourceforge.net/projects/algol68/files/algol68g/algol68g-1.18.0/algol68g-1.18.0-9h.tiny.el5.centos.fc11.i386.rpm/download 1.18.0-9h.tiny].}}
{{wont work with|ELLA ALGOL 68|Any (with appropriate job cards) - tested with release [http://sourceforge.net/projects/algol68/files/algol68toc/algol68toc-1.8.8d/algol68toc-1.8-8d.fc9.i386.rpm/download 1.8-8d] - due to extensive use of '''format'''[ted] ''transput''.}}
<langsyntaxhighlight lang="algol68">MODE FIELD = INT;
FORMAT field fmt = $g(-0)$;
 
Line 292:
printf(($"a . (b x c) = "f(field fmt)l$, a DOT (b X c)));
printf(($"a x (b x c) = "f(vec fmt)l$, a X (b X c)))
)</langsyntaxhighlight>
Output:
<pre>
Line 309:
 
=={{header|ALGOL W}}==
<langsyntaxhighlight lang="algolw">begin
% define the Vector record type %
record Vector( integer X, Y, Z );
Line 353:
write( "a x ( b x c ): " ); writeonVector( vectorTripleProduct( a, b, c ) )
end
end.</langsyntaxhighlight>
{{out}}
<pre>
Line 367:
=={{header|APL}}==
{{works with|Dyalog APL}}
<langsyntaxhighlight APLlang="apl">dot ← +.×
cross ← 1⌽(⊣×1⌽⊢)-⊢×1⌽⊣</langsyntaxhighlight>
{{out}}
<langsyntaxhighlight APLlang="apl"> a←3 4 5
b←4 3 5
c←¯5 ¯12 ¯13
Line 380:
6
a cross b cross c
¯267 204 ¯3</langsyntaxhighlight>
 
=={{header|AppleScript}}==
<langsyntaxhighlight lang="applescript">--------------------- VECTOR PRODUCTS ---------------------
 
-- dotProduct :: Num a => [a] -> [a] -> Either String a
Line 638:
return lst
end tell
end zipWith</langsyntaxhighlight>
{{Out}}
<pre>a . b = 49
Line 649:
=={{header|Arturo}}==
 
<langsyntaxhighlight lang="rebol">; dot product
dot: function [a b][
sum map combinecouple a b => product
]
 
Line 680:
print ["a x b =", cross a b]
print ["a • (b x c) =", stp a b c]
print ["a x (b x c) =", vtp a b c]</langsyntaxhighlight>
 
{{out}}
Line 691:
=={{header|AutoHotkey}}==
{{works with|AutoHotkey_L}}
<langsyntaxhighlight AutoHotkeylang="autohotkey">V := {a: [3, 4, 5], b: [4, 3, 5], c: [-5, -12, -13]}
 
for key, val in V
Line 720:
VectorTripleProduct(v1, v2, v3) {
return, CrossProduct(v1, CrossProduct(v2, v3))
}</langsyntaxhighlight>
'''Output:'''
<pre>a = (3, 4, 5)
Line 732:
 
=={{header|AWK}}==
<langsyntaxhighlight lang="awk">#!/usr/bin/awk -f
BEGIN {
a[1] = 3; a[2]= 4; a[3] = 5;
Line 760:
function printVec(C) {
return "[ "C[1]" "C[2]" "C[3]" ]";
}</langsyntaxhighlight>
Output:
<pre>a = [ 3 4 5 ]
Line 773:
=={{header|BASIC256}}==
{{works with|BASIC256 }}
<langsyntaxhighlight lang="basic256">
a={3,4,5}:b={4,3,5}:c={-5,-12,-13}
 
Line 807:
end subroutine
 
</langsyntaxhighlight>
Output:
<pre>
Line 818:
=={{header|BBC BASIC}}==
{{works with|BBC BASIC for Windows}}
<langsyntaxhighlight lang="bbcbasic"> DIM a(2), b(2), c(2), d(2)
a() = 3, 4, 5
b() = 4, 3, 5
Line 848:
PROCcross(B(),C(),D())
PROCcross(A(),D(),D())
ENDPROC</langsyntaxhighlight>
Output:
<pre>
Line 859:
=={{header|BQN}}==
The cross product function here multiplies each vector pointwise by the other rotated by one. To align this result with the third index (the one not involved), it's rotated once more at the end. The APL solution <code>1⌽(⊣×1⌽⊢)-⊢×1⌽⊣</code> uses the same idea and works in BQN without modification.
<langsyntaxhighlight lang="bqn">Dot ← +´∘×
Cross ← 1⊸⌽⊸×{1⌽𝔽˜-𝔽}
Triple ← {𝕊a‿b‿c: a Dot b Cross c}
Line 866:
a←3‿4‿5
b←4‿3‿5
c←¯5‿¯12‿¯13</langsyntaxhighlight>
 
Results:
<langsyntaxhighlight lang="bqn"> a Dot b
49
 
Line 879:
 
VTriple a‿b‿c
⟨ ¯267 204 ¯3 ⟩</langsyntaxhighlight>
 
=={{header|C}}==
<langsyntaxhighlight lang="c">#include<stdio.h>
 
typedef struct{
Line 928:
return 0;
}</langsyntaxhighlight>
Output:
<pre>
Line 941:
 
=={{header|C sharp|C#}}==
<langsyntaxhighlight lang="csharp">using System;
using System.Windows.Media.Media3D;
 
Line 967:
Console.WriteLine(VectorTripleProduct(a, b, c));
}
}</langsyntaxhighlight>
Output:
<pre>49
Line 975:
 
=={{header|C++}}==
<langsyntaxhighlight lang="cpp">#include <iostream>
 
template< class T >
Line 1,028:
std::cout << "a x b x c : " << a.triplevec( b , c ) << "\n" ;
return 0 ;
}</langsyntaxhighlight>
Output:<PRE>a . b : 49
a x b : ( 5 , 5 , -7 )
Line 1,036:
 
=={{header|Ceylon}}==
<langsyntaxhighlight lang="ceylon">shared void run() {
 
alias Vector => Float[3];
Line 1,063:
print("``a`` . ``b`` X ``c`` = ``scalarTriple(a, b, c)``");
print("``a`` X ``b`` X ``c`` = ``vectorTriple(a, b, c)``");
}</langsyntaxhighlight>
{{out}}
<pre>[3.0, 4.0, 5.0] . [4.0, 3.0, 5.0] = 49.0
Line 1,071:
 
=={{header|Clojure}}==
<langsyntaxhighlight lang="clojure">(defrecord Vector [x y z])
 
(defn dot
Line 1,095:
(dot a (cross b c))
(cross a (cross b c)))]
(println prod)))</langsyntaxhighlight>
Output:<PRE>
49
Line 1,103:
 
=={{header|CLU}}==
<langsyntaxhighlight lang="clu">vector = cluster [T: type] is make, dot_product, cross_product,
equal, power, mul, unparse
where T has add: proctype (T,T) returns (T) signals (overflow),
Line 1,169:
stream$putl(po, "a . (b x c) = " || int$unparse(a * b ** c))
stream$putl(po, "a x (b x c) = " || vi$unparse(a ** b ** c))
end start_up</langsyntaxhighlight>
{{out}}
<pre> a = (3, 4, 5)
Line 1,183:
Using the Common Lisp Object System.
 
<langsyntaxhighlight lang="lisp">(defclass 3d-vector ()
((x :type number :initarg :x)
(y :type number :initarg :y)
Line 1,227:
(cross-product a b)
(scalar-triple-product a b c)
(vector-triple-product a b c))))</langsyntaxhighlight>
Output:
CL-USER> (vector-products-example)
Line 1,237:
Using vector type
 
<langsyntaxhighlight lang="lisp">(defun cross (a b)
(when (and (equal (length a) 3) (equal (length b) 3))
(vector
Line 1,259:
(scalar-triple a b c)
(vector-triple a b c)))
</syntaxhighlight>
</lang>
 
Output:
Line 1,269:
 
=={{header|Cowgol}}==
<langsyntaxhighlight lang="cowgol">include "cowgol.coh";
 
record Vector is
Line 1,333:
print("a . b x c = "); print_signed(scalarTriple(&a, &b, &c)); print_nl();
print("a x b x c = "); vectorTriple(&a, &b, &c, &scratch);
print_vector(&scratch);</langsyntaxhighlight>
{{out}}
<pre> a = (3, 4, 5)
Line 1,344:
 
=={{header|Crystal}}==
<langsyntaxhighlight lang="ruby">class Vector
property x, y, z
Line 1,382:
puts "a cross b = #{a.cross_product(b).to_s}"
puts "a dot (b cross c) = #{a.scalar_triple_product b, c}"
puts "a cross (b cross c) = #{a.vector_triple_product(b, c).to_s}"</langsyntaxhighlight>
{{out}}
<pre>a = (3, 4, 5)
Line 1,393:
 
=={{header|D}}==
<langsyntaxhighlight lang="d">import std.stdio, std.conv, std.numeric;
 
struct V3 {
Line 1,436:
writeln("a . (b x c) = ", scalarTriple(a, b, c));
writeln("a x (b x c) = ", vectorTriple(a, b, c));
}</langsyntaxhighlight>
{{out}}
<pre>a = [3, 4, 5]
Line 1,448:
=={{header|Delphi}}==
See [https://rosettacode.org/wiki/Vector_products#Pascal Pascal].
 
=={{header|EasyLang}}==
<syntaxhighlight>
func vdot a[] b[] .
for i to len a[]
r += a[i] * b[i]
.
return r
.
func[] vcross a[] b[] .
r[] &= a[2] * b[3] - a[3] * b[2]
r[] &= a[3] * b[1] - a[1] * b[3]
r[] &= a[1] * b[2] - a[2] * b[1]
return r[]
.
a[] = [ 3 4 5 ]
b[] = [ 4 3 5 ]
c[] = [ -5 -12 -13 ]
#
print vdot a[] b[]
print vcross a[] b[]
print vdot a[] vcross b[] c[]
print vcross a[] vcross b[] c[]
</syntaxhighlight>
 
{{out}}
<pre>
49
[ 5 5 -7 ]
6
[ -267 204 -3 ]
</pre>
 
=={{header|EchoLisp}}==
The '''math''' library includes the '''dot-product''' and '''cross-product''' functions. They work on complex or real vectors.
<langsyntaxhighlight lang="scheme">
(lib 'math)
 
Line 1,472 ⟶ 1,504:
(vector-triple-product a b c)
→ #( -267 204 -3)
</syntaxhighlight>
</lang>
 
=={{header|Elixir}}==
<langsyntaxhighlight lang="elixir">defmodule Vector do
def dot_product({a1,a2,a3}, {b1,b2,b3}), do: a1*b1 + a2*b2 + a3*b3
Line 1,495 ⟶ 1,527:
IO.puts "a x b = #{inspect Vector.cross_product(a, b)}"
IO.puts "a . (b x c) = #{inspect Vector.scalar_triple_product(a, b, c)}"
IO.puts "a x (b x c) = #{inspect Vector.vector_triple_product(a, b, c)}"</langsyntaxhighlight>
 
{{out}}
Line 1,509 ⟶ 1,541:
 
=={{header|Erlang}}==
<syntaxhighlight lang="erlang">
<lang Erlang>
-module(vector).
-export([main/0]).
Line 1,531 ⟶ 1,563:
dot_product(C,vector_product(A,B)),
io:fwrite("~p,~p,~p~n",vector_product(C,vector_product(A,B))).
</syntaxhighlight>
</lang>
 
=={{header|ERRE}}==
<syntaxhighlight lang="erre">
<lang ERRE>
PROGRAM VECTORPRODUCT
 
Line 1,592 ⟶ 1,624:
PRINT("Ax(BxC)=";) PRINTVECTOR(FF.)
END PROGRAM
</syntaxhighlight>
</lang>
 
=={{header|Euphoria}}==
<langsyntaxhighlight lang="euphoria">constant X = 1, Y = 2, Z = 3
 
function dot_product(sequence a, sequence b)
Line 1,630 ⟶ 1,662:
? scalar_triple( a, b, c )
puts(1,"a x (b x c) = ")
? vector_triple( a, b, c )</langsyntaxhighlight>
Output:
<pre>a = {3,4,5}
Line 1,642 ⟶ 1,674:
 
=={{header|F#|F sharp}}==
<langsyntaxhighlight lang="fsharp">let dot (ax, ay, az) (bx, by, bz) =
ax * bx + ay * by + az * bz
 
Line 1,663 ⟶ 1,695:
printfn "%A" (scalTrip a b c)
printfn "%A" (vecTrip a b c)
0 // return an integer exit code</langsyntaxhighlight>
{{out}}
<pre>49.0
Line 1,672 ⟶ 1,704:
=={{header|Factor}}==
Factor has a fantastic <tt>math.vectors</tt> vocabulary, but in the spirit of the task, it is not used.
<langsyntaxhighlight lang="factor">USING: arrays io locals math prettyprint sequences ;
 
: dot-product ( a b -- dp ) [ * ] 2map sum ;
Line 1,701 ⟶ 1,733:
"a . (b x c): " write a b c scalar-triple-product .
"a x (b x c): " write a b c vector-triple-product .
]</langsyntaxhighlight>
{{out}}
<pre>
Line 1,715 ⟶ 1,747:
 
=={{header|Fantom}}==
<langsyntaxhighlight lang="fantom">class Main
{
Int dot_product (Int[] a, Int[] b)
Line 1,748 ⟶ 1,780:
echo ("a x (b x c) = [" + vector_triple_product(a, b, c).join (", ") + "]")
}
}</langsyntaxhighlight>
Output:
<pre>
Line 1,758 ⟶ 1,790:
 
=={{header|Forth}}==
{{works with|Forth|1994 ANSI with a separate floating point stack.}}<langsyntaxhighlight Forthlang="forth">
: 3f! ( &v - ) ( f: x y z - ) dup float+ dup float+ f! f! f! ;
 
Line 1,797 ⟶ 1,829:
cr .( a x b = ) A B pad Cross* pad .Vector
cr .( a . [b x c] = ) A B C ScalarTriple* f.
cr .( a x [b x c] = ) A B C pad VectorTriple* pad .Vector </langsyntaxhighlight>
{{out}}
<pre>
Line 1,805 ⟶ 1,837:
a x [b x c] = -267.000 204.000 -3.00000
</pre>
{{libheader|Forth Scientific Library}}<langsyntaxhighlight lang="forth">
S" fsl-util.fs" REQUIRED
: 3f! 3 SWAP }fput ;
Line 1,818 ⟶ 1,850:
: .Vector 3 SWAP }fprint ;
0e 0e 0e vector pad \ NB: your system will be non-standard after this line
\ From here on is identical to the above example</langsyntaxhighlight>
 
=={{header|Fortran}}==
{{works with|Fortran|95 and later}}
Specialized for 3-dimensional vectors.
<langsyntaxhighlight lang="fortran">program VectorProducts
 
real, dimension(3) :: a, b, c
Line 1,861 ⟶ 1,893:
end function v3_product
 
end program VectorProducts</langsyntaxhighlight>
Output
<pre> 49.0000
Line 1,870 ⟶ 1,902:
 
=={{header|FreeBASIC}}==
<langsyntaxhighlight FreeBASIClang="freebasic"> 'Construct only required operators for this.
Type V3
As double x,y,z
Line 1,901 ⟶ 1,933:
Show(a . b X c,a dot b cross c)
Show(a X (b X c),a cross (b cross c))
sleep</langsyntaxhighlight>
{{out}}
<pre>a (3,4,5)
Line 1,913 ⟶ 1,945:
 
=={{header|FunL}}==
<langsyntaxhighlight lang="funl">A = (3, 4, 5)
B = (4, 3, 5)
C = (-5, -12, -13)
Line 1,925 ⟶ 1,957:
println( "A\u00d7B = ${cross(A, B)}" )
println( "A\u00b7(B\u00d7C) = ${scalarTriple(A, B, C)}" )
println( "A\u00d7(B\u00d7C) = ${vectorTriple(A, B, C)}" )</langsyntaxhighlight>
 
{{out}}
Line 1,937 ⟶ 1,969:
 
=={{header|GAP}}==
<langsyntaxhighlight lang="gap">DotProduct := function(u, v)
return u*v;
end;
Line 1,974 ⟶ 2,006:
 
VectorTripleProduct(a, b, c);
# [ -267, 204, -3 ]</langsyntaxhighlight>
 
=={{header|GLSL}}==
{{trans|C}}
<langsyntaxhighlight lang="glsl">
vec3 a = vec3(3, 4, 5),b = vec3(4, 3, 5),c = vec3(-5, -12, -13);
Line 2,002 ⟶ 2,034:
return crossProduct(a,crossProduct(b,c));
}
</syntaxhighlight>
</lang>
 
=={{header|Go}}==
<langsyntaxhighlight lang="go">package main
 
import "fmt"
Line 2,040 ⟶ 2,072:
fmt.Println(s3(a, b, c))
fmt.Println(v3(a, b, c))
}</langsyntaxhighlight>
Output:
<pre>
Line 2,051 ⟶ 2,083:
=={{header|Groovy}}==
Dot Product Solution:
<langsyntaxhighlight lang="groovy">def pairwiseOperation = { x, y, Closure binaryOp ->
assert x && y && x.size() == y.size()
[x, y].transpose().collect(binaryOp)
Line 2,061 ⟶ 2,093:
assert x && y && x.size() == y.size()
pwMult(x, y).sum()
}</langsyntaxhighlight>
Cross Product Solution, using scalar operations:
<langsyntaxhighlight lang="groovy">def crossProductS = { x, y ->
assert x && y && x.size() == 3 && y.size() == 3
[x[1]*y[2] - x[2]*y[1], x[2]*y[0] - x[0]*y[2] , x[0]*y[1] - x[1]*y[0]]
}</langsyntaxhighlight>
Cross Product Solution, using "vector" operations:
<langsyntaxhighlight lang="groovy">def rotR = {
assert it && it.size() > 2
[it[-1]] + it[0..-2]
Line 2,083 ⟶ 2,115:
assert x && y && x.size() == 3 && y.size() == 3
pwSubtr(pwMult(rotL(x), rotR(y)), pwMult(rotL(y), rotR(x)))
}</langsyntaxhighlight>
Test program (including triple products):
<langsyntaxhighlight lang="groovy">def test = { crossProduct ->
 
def scalarTripleProduct = { x, y, z ->
Line 2,107 ⟶ 2,139:
 
test(crossProductS)
test(crossProductV)</langsyntaxhighlight>
Output:
<pre> a . b = 49
Line 2,120 ⟶ 2,152:
 
=={{header|Haskell}}==
<langsyntaxhighlight lang="haskell">import Data.Monoid ((<>))
 
type Vector a = [a]
Line 2,172 ⟶ 2,204:
, "a x b x c = " <> show (vectorTriple a b c)
, "a . d = " <> show (dot a d)
]</langsyntaxhighlight>
Output:<pre>a . b = 49
a x b = [5,5,-7]
Line 2,183 ⟶ 2,215:
Or using '''Either''' and '''(>>=)''', rather than '''error''', to pass on intelligible messages:
 
<langsyntaxhighlight lang="haskell">dotProduct
:: Num a
=> [a] -> [a] -> Either String a
Line 2,238 ⟶ 2,270:
:: Show a
=> Either String a -> String
sh = either (" => " ++) ((" = " ++) . show)</langsyntaxhighlight>
{{Out}}
<pre>a . b = 49
Line 2,248 ⟶ 2,280:
 
=={{header|Icon}} and {{header|Unicon}}==
<langsyntaxhighlight lang="icon"># record type to store a 3D vector
record Vector3D(x, y, z)
 
Line 2,289 ⟶ 2,321:
writes ("Ax(BxC) : " || toString(a) || "x(" || toString(b) || "x" || toString(c) || ") = ")
write (toString(vectorTriple (a, b, c)))
end</langsyntaxhighlight>
Output:
<pre>
Line 2,301 ⟶ 2,333:
Perhaps the most straightforward definition for cross product in J uses rotate multiply and subtract:
 
<langsyntaxhighlight lang="j">cross=: (1&|.@[ * 2&|.@]) - 2&|.@[ * 1&|.@]</langsyntaxhighlight>
or
<syntaxhighlight lang="j">cross=: {{ ((1|.x)*2|.y) - (2|.x)*1|.y }}</syntaxhighlight>
 
 
However, there are other valid approaches. For example, a "generalized approach" based on [[j:Essays/Complete Tensor]]:
<langsyntaxhighlight lang="j">CT=: C.!.2 @ (#:i.) @ $~
ip=: +/ .* NB. inner product
cross=: ] ip CT@#@[ ip [</langsyntaxhighlight>
 
Note that there are a variety of other generalizations have cross products as a part of what they do. (For example, we could implement cross product using complex numbers in a Cayley Dickson implementation of quaternion product.)
 
An alternative definition for cross (based on finding the determinant of a 3 by 3 matrix where one row is unit vectors) could be:
<langsyntaxhighlight lang="j">cross=: [: > [: -&.>/ .(*&.>) (<"1=i.3) , ,:&:(<"0)</langsyntaxhighlight>
or
<syntaxhighlight lang="j">cross=: {{ >-L:0/ .(*L:0) (<"1=i.3), x,:&:(<"0) y}}</syntaxhighlight>
 
With an implementation of cross product and inner product, the rest of the task becomes trivial:
 
<langsyntaxhighlight lang="j">a=: 3 4 5
b=: 4 3 5
c=: -5 12 13
Line 2,326 ⟶ 2,363:
crossP=: A cross B
scTriP=: A ip B cross C
veTriP=: A cross B cross C</langsyntaxhighlight>
Required example:
<langsyntaxhighlight lang="j"> dotP a;b
49
crossP a;b
Line 2,335 ⟶ 2,372:
6
veTriP a;b;c
_267 204 _3</langsyntaxhighlight>
 
=={{header|Java}}==
{{works with|Java|1.5+}}
All operations which return vectors give vectors containing <code>Double</code>s.
<langsyntaxhighlight lang="java5">public class VectorProds{
public static class Vector3D<T extends Number>{
private T a, b, c;
Line 2,387 ⟶ 2,424:
System.out.println(a.vecTrip(b, c));
}
}</langsyntaxhighlight>
Output:
<pre>49.0
Line 2,395 ⟶ 2,432:
{{works with|Java|1.8+}}
This solution uses Java SE new Stream API
<langsyntaxhighlight Java8lang="java8">import java.util.Arrays;
import java.util.stream.IntStream;
 
Line 2,456 ⟶ 2,493:
 
}
}</langsyntaxhighlight>
result is the same as above , fortunately
<pre>dot product =:49
Line 2,467 ⟶ 2,504:
The <code>dotProduct()</code> function is generic and will create a dot product of any set of vectors provided they are all the same dimension.
The <code>crossProduct()</code> function expects two 3D vectors.
<langsyntaxhighlight lang="javascript">function dotProduct() {
var len = arguments[0] && arguments[0].length;
var argsLen = arguments.length;
Line 2,536 ⟶ 2,573:
'A x (B x C): ' + vectorTripleProduct(a, b, c)
);
}());</langsyntaxhighlight>
{{Out}}
<pre>A . B: 49
Line 2,544 ⟶ 2,581:
 
===ES6===
<langsyntaxhighlight lang="javascript">(() => {
'use strict';
 
Line 2,683 ⟶ 2,720:
// MAIN ---
return main();
})();</langsyntaxhighlight>
{{Out}}
<pre>a . b = 49
Line 2,693 ⟶ 2,730:
 
=={{header|jq}}==
The <code>dot_product()</code> function is generic and will create a dot product of any pair of vectors provided they are both the same dimension. The other functions expect 3D vectors.<langsyntaxhighlight lang="jq">def dot_product(a; b):
reduce range(0;a|length) as $i (0; . + (a[$i] * b[$i]) );
 
Line 2,713 ⟶ 2,750:
"a x b = [\( cross_product($a; $b) | map(tostring) | join (", ") )]" ,
"a . (b x c) = \( scalar_triple_product ($a; $b; $c)) )",
"a x (b x c) = [\( vector_triple_product($a; $b; $c)|map(tostring)|join (", ") )]" ;</langsyntaxhighlight>
Output:
<langsyntaxhighlight lang="jq">"a . b = 49"
"a x b = [5, 5, -7]"
"a . (b x c) = 6 )"
"a x (b x c) = [-267, 204, -3]"</langsyntaxhighlight>
 
=={{header|Julia}}==
Julia provides dot and cross products with LinearAlgebra. It's easy enough to use these to construct the triple products.
<langsyntaxhighlight lang="julia">using LinearAlgebra
 
const a = [3, 4, 5]
Line 2,735 ⟶ 2,772:
@show a × b
@show a ⋅ (b × c)
@show a × (b × c)</langsyntaxhighlight>
 
{{out}}
Line 2,752 ⟶ 2,789:
 
=={{header|Kotlin}}==
<langsyntaxhighlight lang="scala">// version 1.1.2
 
class Vector3D(val x: Double, val y: Double, val z: Double) {
Line 2,779 ⟶ 2,816:
println("a . b x c = ${a.scalarTriple(b, c)}")
println("a x b x c = ${a.vectorTriple(b, c)}")
}</langsyntaxhighlight>
 
{{out}}
Line 2,794 ⟶ 2,831:
 
=={{header|Ksh}}==
<langsyntaxhighlight lang="ksh">
#!/bin/ksh
 
Line 2,879 ⟶ 2,916:
_vect3prod A B C arr
print "The vector triple product A x (B x C) = ( ${arr[@]} )"
</syntaxhighlight>
</lang>
{{out}}<pre>
The dot product A • B = 49
Line 2,887 ⟶ 2,924:
 
=={{header|Lambdatalk}}==
<langsyntaxhighlight lang="scheme">
{def dotProduct
{lambda {:a :b}
Line 2,913 ⟶ 2,950:
A.(BxC) : {dotProduct {A} {crossProduct {B} {C}}} -> 6
Ax(BxC) : {crossProduct {A} {crossProduct {B} {C}}} -> [-267,204,-3]
</syntaxhighlight>
</lang>
 
=={{header|Liberty BASIC}}==
<langsyntaxhighlight lang="lb"> print "Vector products of 3-D vectors"
 
print "Dot product of 3,4,5 and 4,3,5 is "
Line 2,960 ⟶ 2,997:
VectorTripleProduct$ =CrossProduct$( i$, CrossProduct$( j$, k$))
end function
END SUB</langsyntaxhighlight>
 
=={{header|Lingo}}==
Lingo has a built-in vector data type that supports calculation of both dot and cross products:
<langsyntaxhighlight lang="lingo">a = vector(1,2,3)
b = vector(4,5,6)
 
Line 2,974 ⟶ 3,011:
 
put a.cross(b)
-- vector( -3.0000, 6.0000, -3.0000 )</langsyntaxhighlight>
 
=={{header|Lua}}==
<langsyntaxhighlight lang="lua">Vector = {}
function Vector.new( _x, _y, _z )
return { x=_x, y=_y, z=_z }
Line 3,013 ⟶ 3,050:
 
r = Vector.vector_triple( A, B, C )
print( r.x, r.y, r.z )</langsyntaxhighlight>
<pre>49
5 5 -7
Line 3,020 ⟶ 3,057:
 
=={{header|M2000 Interpreter}}==
<syntaxhighlight lang="m2000 interpreter">
<lang M2000 Interpreter>
Module checkit {
class Vector {
Line 3,090 ⟶ 3,127:
}
Checkit
</syntaxhighlight>
</lang>
{{out}}
<pre >
Line 3,104 ⟶ 3,141:
 
=={{header|Maple}}==
<langsyntaxhighlight Maplelang="maple">with(LinearAlgebra):
A := Vector([3,4,5]):
B := Vector([4,3,5]):
Line 3,115 ⟶ 3,152:
6
>>>CrossProduct(A,CrossProduct(B,C));
Vector([-267, 204, -3])</langsyntaxhighlight>
 
=={{header|Mathematica}}/{{header|Wolfram Language}}==
<langsyntaxhighlight Mathematicalang="mathematica">a={3,4,5};
b={4,3,5};
c={-5,-12,-13};
Line 3,124 ⟶ 3,161:
Cross[a,b]
a.Cross[b,c]
Cross[a,Cross[b,c]]</langsyntaxhighlight>
{{out}}
<pre>49
Line 3,133 ⟶ 3,170:
=={{header|MATLAB}} / {{header|Octave}}==
Matlab / Octave use double precesion numbers per default, and pi is a builtin constant value. Arbitrary precision is only implemented in some additional toolboxes (e.g. symbolic toolbox).
<langsyntaxhighlight MATLABlang="matlab">% Create a named function/subroutine/method to compute the dot product of two vectors.
dot(a,b)
% Create a function to compute the cross product of two vectors.
Line 3,148 ⟶ 3,185:
dot(a,cross(b,c))
% Compute and display: a x b x c, the vector triple product.
cross(a,cross(b,c))</langsyntaxhighlight>
 
Code for testing:
Line 3,180 ⟶ 3,217:
 
=={{header|Mercury}}==
<syntaxhighlight lang="text">:- module vector_product.
:- interface.
 
Line 3,221 ⟶ 3,258:
 
to_string(vector3d(X, Y, Z)) =
string.format("(%d, %d, %d)", [i(X), i(Y), i(Z)]).</langsyntaxhighlight>
 
=={{header|MiniScript}}==
<langsyntaxhighlight MiniScriptlang="miniscript">vectorA = [3, 4, 5]
vectorB = [4, 3, 5]
vectorC = [-5, -12, -13]
Line 3,240 ⟶ 3,277:
print "Scalar Triple Product = " + dotProduct(vectorA, crossProduct(vectorB,vectorC))
print "Vector Triple Product = " + crossProduct(vectorA, crossProduct(vectorB,vectorC))
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 3,250 ⟶ 3,287:
 
=={{header|МК-61/52}}==
<syntaxhighlight lang="text">ПП 54 С/П ПП 66 С/П
ИП0 ИП3 ИП6 П3 -> П0 -> П6
ИП1 ИП4 ИП7 П4 -> П1 -> П7
Line 3,261 ⟶ 3,298:
ИП1 ИП5 * ИП2 ИП4 * - П9
ИП2 ИП3 * ИП0 ИП5 * - ПA
ИП0 ИП4 * ИП1 ИП3 * - ПB В/О</langsyntaxhighlight>
 
''Instruction'': Р0 - a<sub>1</sub>, Р1 - a<sub>2</sub>, Р2 - a<sub>3</sub>, Р3 - b<sub>1</sub>, Р4 - b<sub>2</sub>, Р5 - b<sub>3</sub>, Р6 - c<sub>1</sub>, Р7 - c<sub>2</sub>, Р8 - c<sub>3</sub>; В/О С/П.
 
=={{header|Modula-2}}==
<langsyntaxhighlight lang="modula2">MODULE VectorProducts;
FROM RealStr IMPORT RealToStr;
FROM Terminal IMPORT WriteString,WriteLn,ReadChar;
Line 3,348 ⟶ 3,385:
 
ReadChar
END VectorProducts.</langsyntaxhighlight>
 
=={{header|Nemerle}}==
<langsyntaxhighlight Nemerlelang="nemerle">using System.Console;
 
module VectorProducts3d
Line 3,386 ⟶ 3,423:
WriteLine(VectorTriple(a, b, c));
}
}</langsyntaxhighlight>
Outputs
<pre>49
Line 3,394 ⟶ 3,431:
 
=={{header|Never}}==
<langsyntaxhighlight lang="fsharp">func printv(a[d] : float) -> int {
prints("[" + a[0] + ", " + a[1] + ", " + a[2] + "]\n");
0
Line 3,429 ⟶ 3,466:
0
}
</syntaxhighlight>
</lang>
Output:
<pre>
Line 3,442 ⟶ 3,479:
 
=={{header|Nim}}==
<langsyntaxhighlight lang="nim">import strformat, strutils
 
type Vector3 = array[1..3, float]
Line 3,472 ⟶ 3,509:
echo &"a . b = {a.dot(b)}"
echo &"a . (b ⨯ c) = {scalarTriple(a, b, c)}"
echo &"a ⨯ (b ⨯ c) = {vectorTriple(a, b, c)}"</langsyntaxhighlight>
 
{{out}}
Line 3,481 ⟶ 3,518:
 
=={{header|Objeck}}==
<langsyntaxhighlight lang="objeck">bundle Default {
class VectorProduct {
function : Main(args : String[]) ~ Nil {
Line 3,544 ⟶ 3,581:
}
}
</syntaxhighlight>
</lang>
 
Output:
Line 3,553 ⟶ 3,590:
 
=={{header|OCaml}}==
<langsyntaxhighlight lang="ocaml">let a = (3.0, 4.0, 5.0)
let b = (4.0, 3.0, 5.0)
let c = (-5.0, -12.0, -13.0)
Line 3,582 ⟶ 3,619:
Printf.printf "a . (b x c) = %g\n" (scalar_triple a b c);
Printf.printf "a x (b x c) = %s\n" (string_of_vector (vector_triple a b c));
;;</langsyntaxhighlight>
 
outputs:
Line 3,596 ⟶ 3,633:
=={{header|Octave}}==
Octave handles naturally vectors / matrices.
<langsyntaxhighlight lang="octave">a = [3, 4, 5];
b = [4, 3, 5];
c = [-5, -12, -13];
Line 3,620 ⟶ 3,657:
 
% -267 204 -3
v3prod(a, b, c)</langsyntaxhighlight>
 
=={{header|ooRexx}}==
<syntaxhighlight lang="oorexx">
<lang ooRexx>
a = .vector~new(3, 4, 5);
b = .vector~new(4, 3, 5);
Line 3,673 ⟶ 3,710:
expose x y z
return "<"||x", "y", "z">"
</syntaxhighlight>
</lang>
Output:
<pre>
Line 3,683 ⟶ 3,720:
 
=={{header|PARI/GP}}==
<langsyntaxhighlight lang="parigp">dot(u,v)={
sum(i=1,#u,u[i]*v[i])
};
Line 3,700 ⟶ 3,737:
cross(a,b)
striple(a,b,c)
vtriple(a,b,c)</langsyntaxhighlight>
Output:
<pre>49
Line 3,708 ⟶ 3,745:
 
=={{header|Pascal}}==
<langsyntaxhighlight lang="pascal">Program VectorProduct (output);
 
type
Line 3,755 ⟶ 3,792:
writeln('a . (b x c): ', scalarTripleProduct(a,b,c):15:8);
write('a x (b x c): '); printVector(vectorTripleProduct(a,b,c));
end.</langsyntaxhighlight>
Output:
<pre>a: 3.00000000 4.00000000 5.00000000
Line 3,767 ⟶ 3,804:
 
=={{header|Perl}}==
<langsyntaxhighlight Perllang="perl">package Vector;
use List::Util 'sum';
use List::MoreUtils 'pairwise';
Line 3,794 ⟶ 3,831:
print "$a x $b = ", $a ^ $b, "\n";
print "$a . ($b x $c) = ", $a & ($b ^ $c), "\n";
print "$a x ($b x $c) = ", $a ^ ($b ^ $c), "\n";</langsyntaxhighlight>
 
Output: <pre>a = (3 4 5) b = (4 3 5) c = (-5 -12 -13)
Line 3,804 ⟶ 3,841:
=={{header|Phix}}==
{{libheader|Phix/basics}}
<!--<langsyntaxhighlight Phixlang="phix">-->
<span style="color: #008080;">function</span> <span style="color: #000000;">dot_product</span><span style="color: #0000FF;">(</span><span style="color: #004080;">sequence</span> <span style="color: #000000;">a</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">b</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">return</span> <span style="color: #7060A8;">sum</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">sq_mul</span><span style="color: #0000FF;">(</span><span style="color: #000000;">a</span><span style="color: #0000FF;">,</span><span style="color: #000000;">b</span><span style="color: #0000FF;">))</span>
Line 3,828 ⟶ 3,865:
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"a . (b x c) = %v\n"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">scalar_triple_product</span><span style="color: #0000FF;">(</span><span style="color: #000000;">a</span><span style="color: #0000FF;">,</span><span style="color: #000000;">b</span><span style="color: #0000FF;">,</span><span style="color: #000000;">c</span><span style="color: #0000FF;">)})</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"a x (b x c) = %v\n"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">vector_triple_product</span><span style="color: #0000FF;">(</span><span style="color: #000000;">a</span><span style="color: #0000FF;">,</span><span style="color: #000000;">b</span><span style="color: #0000FF;">,</span><span style="color: #000000;">c</span><span style="color: #0000FF;">)})</span>
<!--</langsyntaxhighlight>-->
{{out}}
<pre>
Line 3,838 ⟶ 3,875:
 
=={{header|Phixmonti}}==
<langsyntaxhighlight Phixmontilang="phixmonti">include ..\Utilitys.pmt
 
( 3 4 5 ) var vectorA
Line 3,866 ⟶ 3,903:
"Cross Product = " print vectorA vectorB crossProduct ?
"Scalar Triple Product = " print vectorB vectorC crossProduct vectorA swap dotProduct ?
"Vector Triple Product = " print vectorB vectorC crossProduct vectorA swap crossProduct ?</langsyntaxhighlight>
{{out}}
<pre>Dot Product = 49
Line 3,876 ⟶ 3,913:
 
=={{header|PHP}}==
<langsyntaxhighlight PHPlang="php"><?php
 
class Vector
Line 3,980 ⟶ 4,017:
new Program();
?>
</syntaxhighlight>
</lang>
 
Output:
Line 3,994 ⟶ 4,031:
A × (B × C) =(-267.00, 204.00, -3.00)
</pre>
 
=={{header|Picat}}==
<syntaxhighlight lang="picat">go =>
A = [3, 4, 5],
B = [4, 3, 5],
C = [-5, -12, -13],
 
println(a=A),
println(b=B),
println(c=C),
println("A . B"=dot(A,B)),
println("A x B"=cross(A,B)),
println("A . (B x C)"=scalar_triple(A,B,C)),
println("A X (B X C)"=vector_triple(A,B,C)),
nl.
 
dot(A,B) = sum([ AA*BB : {AA,BB} in zip(A,B)]).
cross(A,B) = [A[2]*B[3]-A[3]*B[2], A[3]*B[1]-A[1]*B[3], A[1]*B[2]-A[2]*B[1]].
 
scalar_triple(A,B,C) = dot(A,cross(B,C)).
vector_triple(A,B,C) = cross(A,cross(B,C)).</syntaxhighlight>
 
{{out}}
<pre>a = [3,4,5]
b = [4,3,5]
c = [-5,-12,-13]
A . B = 49
A x B = [5,5,-7]
A . (B x C) = 6
A X (B X C) = [-267,204,-3]</pre>
 
 
=={{header|PicoLisp}}==
<langsyntaxhighlight PicoLisplang="picolisp">(de dotProduct (A B)
(sum * A B) )
 
Line 4,009 ⟶ 4,077:
 
(de vectorTriple (A B C)
(crossProduct A (crossProduct B C)) )</langsyntaxhighlight>
Test:
<pre>(setq
Line 4,029 ⟶ 4,097:
 
=={{header|PL/I}}==
<langsyntaxhighlight PLlang="pl/Ii">/* dot product, cross product, etc. 4 June 2011 */
 
test_products: procedure options (main);
Line 4,070 ⟶ 4,138:
end vector_triple_product;
 
end test_products;</langsyntaxhighlight>
Results:
<pre>
Line 4,079 ⟶ 4,147:
</pre>
 
<langsyntaxhighlight PLlang="pl/Ii">/* This version uses the ability of PL/I to return arrays. */
 
/* dot product, cross product, etc. 6 June 2011 */
Line 4,126 ⟶ 4,194:
end vector_triple_product;
 
end test_products;</langsyntaxhighlight>
The output is:
<pre>
Line 4,136 ⟶ 4,204:
 
=={{header|Plain English}}==
<langsyntaxhighlight lang="plain english">To run:
Start up.
Make a vector from 3 and 4 and 5.
Line 4,203 ⟶ 4,271:
Compute a cross product of the other vector and the third vector.
Compute another cross product of the vector and the cross product.
Put the other cross product into the vector triple product.</langsyntaxhighlight>
{{out}}
<pre>
Line 4,217 ⟶ 4,285:
 
=={{header|PowerShell}}==
<syntaxhighlight lang="powershell">
<lang PowerShell>
function dot-product($a,$b) {
$a[0]*$b[0] + $a[1]*$b[1] + $a[2]*$b[2]
Line 4,245 ⟶ 4,313:
"a.(bxc) = $(scalar-triple-product $a $b $c)"
"ax(bxc) = $(vector-triple-product $a $b $c)"
</syntaxhighlight>
</lang>
<b>Output:</b>
<pre>
Line 4,256 ⟶ 4,324:
=={{header|Prolog}}==
Works with SWI-Prolog.
<langsyntaxhighlight lang="prolog">
dot_product([A1, A2, A3], [B1, B2, B3], Ans) :-
Ans is A1 * B1 + A2 * B2 + A3 * B3.
Line 4,273 ⟶ 4,341:
cross_product(B, C, Temp),
cross_product(A, Temp, Ans).
</syntaxhighlight>
</lang>
Output:
<pre>
Line 4,290 ⟶ 4,358:
 
=={{header|PureBasic}}==
<langsyntaxhighlight PureBasiclang="purebasic">Structure vector
x.f
y.f
Line 4,339 ⟶ 4,407:
Print(#CRLF$ + #CRLF$ + "Press ENTER to exit"): Input()
CloseConsole()
EndIf</langsyntaxhighlight>
Sample output:
<pre>a = [3.00, 4.00, 5.00], b = [4.00, 3.00, 5.00], c = [-5.00, -12.00, -13.00]
Line 4,349 ⟶ 4,417:
=={{header|Python}}==
The solution is in the form of an [[Executable library]].
<langsyntaxhighlight lang="python">def crossp(a, b):
'''Cross product of two 3D vectors'''
assert len(a) == len(b) == 3, 'For 3D vectors only'
Line 4,375 ⟶ 4,443:
print("a x b = %r" % (crossp(a,b),))
print("a . (b x c) = %r" % scalartriplep(a, b, c))
print("a x (b x c) = %r" % (vectortriplep(a, b, c),))</langsyntaxhighlight>
 
{{out}}
Line 4,386 ⟶ 4,454:
;Note:
The popular [http://numpy.scipy.org/ numpy] package has functions for dot and cross products.
 
=={{header|Quackery}}==
 
<syntaxhighlight lang="quackery"> [ 0 unrot witheach
[ over i^ peek *
rot + swap ]
drop ] is dotproduct ( [ [ --> n )
 
[ join
dup 1 peek over 5 peek *
swap
dup 2 peek over 4 peek *
swap dip -
dup 2 peek over 3 peek *
swap
dup 0 peek over 5 peek *
swap dip -
dup 0 peek over 4 peek *
swap
dup 1 peek swap 3 peek *
- join join ] is crossproduct ( [ [ --> [ )
 
[ crossproduct dotproduct ] is scalartriple ( [ [ [ --> n )
 
[ crossproduct crossproduct ] is vectortriple ( [ [ [ --> [ )
 
[ ' [ 3 4 5 ] ] is a ( --> [ )
[ ' [ 4 3 5 ] ] is b ( --> [ )
[ ' [ -5 -12 -13 ] ] is c ( --> [ )
 
a b dotproduct echo cr
a b crossproduct echo cr
a b c scalartriple echo cr
a b c vectortriple echo cr</syntaxhighlight>
 
{{out}}
 
<pre>49
[ 5 5 -7 ]
6
[ -267 204 -3 ]
</pre>
 
=={{header|R}}==
<langsyntaxhighlight lang="rsplus">#===============================================================
# Vector products
# R implementation
Line 4,444 ⟶ 4,554:
cat("a x b =", crossp(a, b))
cat("a . (b x c) =", scalartriplep(a, b, c))
cat("a x (b x c) =", vectortriplep(a, b, c))</langsyntaxhighlight>
 
{{out}}
Line 4,456 ⟶ 4,566:
=={{header|Racket}}==
 
<syntaxhighlight lang="racket">
<lang Racket>
#lang racket
 
Line 4,487 ⟶ 4,597:
(printf "A . B x C = ~s\n" (scalar-triple-product A B C))
(printf "A x B x C = ~s\n" (vector-triple-product A B C))
</syntaxhighlight>
</lang>
 
=={{header|Raku}}==
(formerly Perl 6)
{{Works with|rakudo|2015-11-24}}
<syntaxhighlight lang="raku" perl6line>sub infix:<⋅> { [+] @^a »*« @^b }
 
sub infix:<⨯>([$a1, $a2, $a3], [$b1, $b2, $b3]) {
Line 4,511 ⟶ 4,621:
say "a ⨯ b = <{ @a ⨯ @b }>";
say "a ⋅ (b ⨯ c) = { scalar-triple-product(@a, @b, @c) }";
say "a ⨯ (b ⨯ c) = <{ vector-triple-product(@a, @b, @c) }>";</langsyntaxhighlight>
{{out}}
<pre>("a" => ["3", "4", "5"], "b" => ["4", "3", "5"], "c" => ["-5", "-12", "-13"])
Line 4,520 ⟶ 4,630:
 
=={{header|REXX}}==
<langsyntaxhighlight lang="rexx">/*REXX program computes the products: dot, cross, scalar triple, and vector triple.*/
a= 3 4 5
b= 4 3 5 /*(positive numbers don't need quotes.)*/
Line 4,538 ⟶ 4,648:
/*──────────────────────────────────────────────────────────────────────────────────────*/
tellV: procedure; parse arg name,x y z; w=max(4,length(x),length(y),length(z)) /*max W*/
say right(name,40) right(x,w) right(y,w) right(z,w); /*show vector.*/ return</langsyntaxhighlight>
{{out|output|text=&nbsp; when using the default internal inputs:}}
<pre>
Line 4,552 ⟶ 4,662:
 
=={{header|Ring}}==
<langsyntaxhighlight lang="ring">
# Project : Vector products
 
Line 4,585 ⟶ 4,695:
cross(a,d,e)
see "a x (b x c) = (" + e[1] + ", " +e[2] + ", " + e[3] + ")"
</syntaxhighlight>
</lang>
Output:
<pre>
Line 4,592 ⟶ 4,702:
a . (b x c) = 6
a x (b x c) = (-267, 204, -3)
</pre>
 
=={{header|RPL}}==
Dot and cross products are built-in functions in RPL.
{{works with|Halcyon Calc|4.2.7}}
≪ → a b c
≪ a b DOT
a b CROSS
a b c CROSS DOT
a b c CROSS CROSS
≫ ≫
‘VPROD’ STO
 
[3 4 5] [4 3 5] [-5 -12 -13] VPROD
{{out}}
<pre>
4: 49
3: [ 5 5 -7 ]
2: 6
1: [ -267 204 -3 ]
</pre>
 
=={{header|Ruby}}==
Dot product is also known as ''inner product''. The standard library already defines Vector#inner_product and Vector# cross_product, so this program only defines the other two methods.
<langsyntaxhighlight lang="ruby">require 'matrix'
 
class Vector
Line 4,615 ⟶ 4,745:
puts "a cross b = #{a.cross_product b}"
puts "a dot (b cross c) = #{a.scalar_triple_product b, c}"
puts "a cross (b cross c) = #{a.vector_triple_product b, c}"</langsyntaxhighlight>
Output: <pre>a dot b = 49
a cross b = Vector[5, 5, -7]
Line 4,622 ⟶ 4,752:
 
=={{header|Rust}}==
<langsyntaxhighlight lang="rust">#[derive(Debug)]
struct Vector {
x: f64,
Line 4,666 ⟶ 4,796:
println!("a . (b x c) = {}", a.scalar_triple_product(&b, &c));
println!("a x (b x c) = {:?}", a.vector_triple_product(&b, &c));
}</langsyntaxhighlight>
 
Output:<pre>a . b = 49
Line 4,674 ⟶ 4,804:
 
=={{header|Scala}}==
<langsyntaxhighlight lang="scala">case class Vector3D(x:Double, y:Double, z:Double) {
def dot(v:Vector3D):Double=x*v.x + y*v.y + z*v.z;
def cross(v:Vector3D)=Vector3D(y*v.z - z*v.y, z*v.x - x*v.z, x*v.y - y*v.x)
Line 4,692 ⟶ 4,822:
println("a x (b x c) : " + (a vectorTriple(b, c)))
}
}</langsyntaxhighlight>
{{out}}
<pre> a . b : 49.0
Line 4,703 ⟶ 4,833:
{{works with|Gauche}}
Using modified dot-product function from the [[Dot product]] task.
<langsyntaxhighlight lang="scheme">(define (dot-product A B)
(apply + (map * (vector->list A) (vector->list B))))
 
Line 4,737 ⟶ 4,867:
(display "A x B = ")(display (cross-product A B))(newline)
(display "A . B x C = ")(display (scalar-triple-product A B C))(newline)
(display "A x B x C = ") (display (vector-triple-product A B C))(newline)</langsyntaxhighlight>
Output:<pre>A = #(3 4 5)
B = #(4 3 5)
Line 4,750 ⟶ 4,880:
The program below uses Seed7s capaibility to define operator symbols.
The operators ''dot'' and ''X'' are defined with with priority 6 and assiciativity left-to-right.
<langsyntaxhighlight lang="seed7">$ include "seed7_05.s7i";
include "float.s7i";
 
Line 4,800 ⟶ 4,930:
writeln("a .(b x c) = " <& scalarTriple(a, b, c));
writeln("a x(b x c) = " <& vectorTriple(a, b, c));
end func;</langsyntaxhighlight>
 
{{output}}
Line 4,812 ⟶ 4,942:
 
=={{header|Sidef}}==
<langsyntaxhighlight lang="ruby">class MyVector(x, y, z) {
method ∙(vec) {
[self{:x,:y,:z}] »*« [vec{:x,:y,:z}] «+»
Line 4,836 ⟶ 4,966:
say "a ⨉ b = #{a ⨉ b}"
say "a ∙ (b ⨉ c) = #{a ∙ (b ⨉ c)}"
say "a ⨉ (b ⨉ c) = #{a ⨉ (b ⨉ c)}"</langsyntaxhighlight>
{{out}}
<pre>a=(3, 4, 5); b=(4, 3, 5); c=(-5, -12, -13);
Line 4,845 ⟶ 4,975:
=={{header|Simula}}==
{{Trans|C}}
<langsyntaxhighlight lang="simula">BEGIN
CLASS VECTOR(I,J,K); REAL I,J,K;;
Line 4,895 ⟶ 5,025:
OUTIMAGE;
END;
END;</langsyntaxhighlight>
{{out}}
<pre>A = (3.000000, 4.000000, 5.000000)
Line 4,907 ⟶ 5,037:
 
=={{header|Stata}}==
<langsyntaxhighlight lang="stata">mata
real scalar sprod(real colvector u, real colvector v) {
return(u[1]*v[1] + u[2]*v[2] + u[3]*v[3])
Line 4,949 ⟶ 5,079:
3 | -3 |
+--------+
end</langsyntaxhighlight>
 
=={{header|Swift}}==
 
<langsyntaxhighlight lang="swift">import Foundation
 
infix operator • : MultiplicationPrecedence
Line 4,991 ⟶ 5,121:
print("a × b = \(a × b)")
print("a • (b × c) = \(a • (b × c))")
print("a × (b × c) = \(a × (b × c))")</langsyntaxhighlight>
 
{{out}}
Line 5,005 ⟶ 5,135:
 
=={{header|Tcl}}==
<langsyntaxhighlight lang="tcl">proc dot {A B} {
lassign $A a1 a2 a3
lassign $B b1 b2 b3
Line 5,022 ⟶ 5,152:
proc vectorTriple {A B C} {
cross $A [cross $B $C]
}</langsyntaxhighlight>
Demonstrating:
<langsyntaxhighlight lang="tcl">set a {3 4 5}
set b {4 3 5}
set c {-5 -12 -13}
Line 5,030 ⟶ 5,160:
puts "a x b = [cross $a $b]"
puts "a • b x c = [scalarTriple $a $b $c]"
puts "a x b x c = [vectorTriple $a $b $c]"</langsyntaxhighlight>
Output:<pre>a • b = 49
a x b = 5 5 -7
Line 5,040 ⟶ 5,170:
{{Trans|BBC BASIC}}
Since uBasic/4tH has only one single array, we use its variables to hold the offsets of the vectors. A similar problem arises when local vectors are required.
<syntaxhighlight lang="text">a = 0 ' use variables for vector addresses
b = a + 3
c = b + 3
Line 5,083 ⟶ 5,213:
Proc _Cross (b@, c@, e@)
Proc _Cross (a@, e@, d@)
Return</langsyntaxhighlight>
{{Out}}
<pre>a . b = 49
Line 5,093 ⟶ 5,223:
 
=={{header|VBA}}==
{{trans|Phix}}<langsyntaxhighlight lang="vb">Option Base 1
Function dot_product(a As Variant, b As Variant) As Variant
dot_product = WorksheetFunction.SumProduct(a, b)
Line 5,118 ⟶ 5,248:
Debug.Print "a . (b x c) = "; scalar_triple_product(a, b, c)
Debug.Print "a x (b x c) = "; "("; Join(vector_triple_product(a, b, c), ", "); ")"
End Sub</langsyntaxhighlight>{{out}}
<pre> a . b = 49
a x b = (5, 5, -7)
Line 5,126 ⟶ 5,256:
=={{header|Visual Basic .NET}}==
Class: Vector3D
<langsyntaxhighlight lang="vbnet">Public Class Vector3D
Private _x, _y, _z As Double
 
Line 5,183 ⟶ 5,313:
Return String.Format("({0}, {1}, {2})", _x, _y, _z)
End Function
End Class</langsyntaxhighlight>
Module: Module1
<langsyntaxhighlight lang="vbnet">Module Module1
 
Sub Main()
Line 5,203 ⟶ 5,333:
End Sub
 
End Module</langsyntaxhighlight>
Output:
<pre>v1: (3, 4, 5)
Line 5,213 ⟶ 5,343:
v1 . (v2 x v3) = 6
v1 x (v2 x v3) = (-267, 204, -3)</pre>
 
=={{header|V (Vlang)}}==
{{trans|Go}}
<syntaxhighlight lang="v (vlang)">struct Vector {
x f64
y f64
z f64
}
const (
a = Vector{3, 4, 5}
b = Vector{4, 3, 5}
c = Vector{-5, -12, -13}
)
fn dot(a Vector, b Vector) f64 {
return a.x*b.x + a.y*b.y + a.z*b.z
}
fn cross(a Vector, b Vector) Vector {
return Vector{a.y*b.z - a.z*b.y, a.z*b.x - a.x*b.z, a.x*b.y - a.y*b.x}
}
fn s3(a Vector, b Vector, c Vector) f64 {
return dot(a, cross(b, c))
}
fn v3(a Vector, b Vector, c Vector) Vector {
return cross(a, cross(b, c))
}
fn main() {
println(dot(a, b))
println(cross(a, b))
println(s3(a, b, c))
println(v3(a, b, c))
}</syntaxhighlight>
 
{{out}}
<pre>
49.
Vector{
x: 5
y: 5
z: -7
}
6.
Vector{
x: -267
y: 204
z: -3
}
</pre>
 
=={{header|Wortel}}==
<langsyntaxhighlight lang="wortel">@let {
dot &[a b] @sum @mapm ^* [a b]
cross &[a b] [[
Line 5,235 ⟶ 5,418:
@!vectorTripleProduct [a b c]
]]
}</langsyntaxhighlight>
Returns:
<pre>[49 [5 5 -7] 6 [-267 204 -3]]</pre>
Line 5,241 ⟶ 5,424:
=={{header|Wren}}==
{{trans|Kotlin}}
<langsyntaxhighlight ecmascriptlang="wren">class Vector3D {
construct new(x, y, z) {
if (x.type != Num || y.type != Num || z.type != Num) Fiber.abort("Arguments must be numbers.")
Line 5,286 ⟶ 5,469:
System.print("a x b = %(a.cross(b))")
System.print("a . b x c = %(a.scalarTriple(b, c))")
System.print("a x b x c = %(a.vectorTriple(b, c))")</langsyntaxhighlight>
 
{{out}}
Line 5,299 ⟶ 5,482:
a x b x c = [-267, 204, -3]
</pre>
 
{{libheader|Wren-vector}}
Alternatively, using the above module to produce exactly the same output as before:
<syntaxhighlight lang="wren">import "./vector" for Vector3
 
var a = Vector3.new(3, 4, 5)
var b = Vector3.new(4, 3, 5)
var c = Vector3.new(-5, -12, -13)
System.print("a = %(a)")
System.print("b = %(b)")
System.print("c = %(c)")
System.print()
System.print("a . b = %(a.dot(b))")
System.print("a x b = %(a.cross(b))")
System.print("a . b x c = %(a.scalarTripleProd(b, c))")
System.print("a x b x c = %(a.vectorTripleProd(b, c))")</syntaxhighlight>
 
=={{header|XBS}}==
<langsyntaxhighlight XBSlang="xbs">#> Vector3 Class <#
class Vector3 {
construct=func(self,x,y,z){
Line 5,388 ⟶ 5,587:
log("Cross: ",a::Cross(b)::ToString());
log("Scalar Triple: ",a::Dot(b::Cross(c)));
log("Vector Triple: ",a::Cross(b::Cross(c))::ToString());</langsyntaxhighlight>
{{out}}
<pre>
Line 5,398 ⟶ 5,597:
 
=={{header|XPL0}}==
<langsyntaxhighlight XPL0lang="xpl0">include c:\cxpl\codes; \intrinsic 'code' declarations
 
func DotProd(A, B); \Return the dot product of two 3D vectors
Line 5,442 ⟶ 5,641:
IntOut(0, D(1)); ChOut(0, 9\tab\);
IntOut(0, D(2)); CrLf(0);
]</langsyntaxhighlight>
 
Output:
Line 5,456 ⟶ 5,655:
 
The [(a1,a2,a3)] parameter notation just means add a preamble to the function body to do list assignment: a1,a2,a3:=arglist[0]. Since we don't need the vector as such, don't bother to name it (in the parameter list)
<langsyntaxhighlight lang="zkl">fcn dotp(a,b){ a.zipWith('*,b).sum() } //1 slow but concise
fcn crossp([(a1,a2,a3)],[(b1,b2,b3)]) //2
{ return(a2*b3 - a3*b2, a3*b1 - a1*b3, a1*b2 - a2*b1) }</langsyntaxhighlight>
<langsyntaxhighlight lang="zkl">a,b,c := T(3,4,5), T(4,3,5), T(-5,-12,-13);
dotp(a,b).println(); //5 --> 49
crossp(a,b).println(); //6 --> (5,5,-7)
dotp(a, crossp(b,c)).println(); //7 --> 6
crossp(a, crossp(b,c)).println(); //8 --> (-267,204,-3)</langsyntaxhighlight>
{{out}}
<pre>
Line 5,472 ⟶ 5,671:
</pre>
Or, using the GNU Scientific Library:
<langsyntaxhighlight lang="zkl">var [const] GSL=Import("zklGSL"); // libGSL (GNU Scientific Library)
a:=GSL.VectorFromData( 3, 4, 5);
b:=GSL.VectorFromData( 4, 3, 5);
Line 5,482 ⟶ 5,681:
(a*(b.copy().crossProduct(c))).println(); // 6 scalar triple product
(a.crossProduct(b.crossProduct(c))) // (-267,204,-3) vector triple product, in place
.format().println();</langsyntaxhighlight>
{{out}}
<pre>
1,981

edits