- contrib/xml.factor -- XML parser and writer (Daniel Ehrenberg)
- contrib/cairo/ -- cairo bindings (Sampo Vuori)
+
+- contrib/math/ -- extended math library (Doug Coleman)
"contrib/math/combinatorics.factor"
"contrib/math/analysis.factor"
"contrib/math/polynomial.factor"
+ "contrib/math/quaternions.factor"
+ "contrib/math/matrices.factor"
! "contrib/math/dimensions.factor"
! "contrib/math/constants.factor"
[ t ] [ 11 gammaln 15.1044 - abs .0001 < ] unit-test
[ t ] [ 9000000000000000000000000000000000000000000 gammaln 8.811521863477754e+44 - abs 5.387515050969975e+30 < ] unit-test
+[ 1 ] [ qi norm ] unit-test
+[ 1 ] [ qj norm ] unit-test
+[ 1 ] [ qk norm ] unit-test
+[ 1 ] [ q1 norm ] unit-test
+[ 0 ] [ q0 norm ] unit-test
+[ t ] [ qi qj q* qk = ] unit-test
+[ t ] [ qj qk q* qi = ] unit-test
+[ t ] [ qk qi q* qj = ] unit-test
+[ t ] [ qi qi q* q1 v+ q0 = ] unit-test
+[ t ] [ qj qj q* q1 v+ q0 = ] unit-test
+[ t ] [ qk qk q* q1 v+ q0 = ] unit-test
+[ t ] [ qi qj qk q* q* q1 v+ q0 = ] unit-test
+[ t ] [ i qj n*v qk = ] unit-test
+[ t ] [ qj i q*n qk v+ q0 = ] unit-test
+[ t ] [ qk qj q/ qi = ] unit-test
+[ t ] [ qi qk q/ qj = ] unit-test
+[ t ] [ qj qi q/ qk = ] unit-test
+[ t ] [ qi q>v v>q qi = ] unit-test
+[ t ] [ qj q>v v>q qj = ] unit-test
+[ t ] [ qk q>v v>q qk = ] unit-test
+[ t ] [ 1 c>q q1 = ] unit-test
+[ t ] [ i c>q qi = ] unit-test
+
+[
+ @{ @{ 0 }@ @{ 0 }@ @{ 0 }@ }@
+] [
+ 3 1 zero-matrix
+] unit-test
+
+[
+ @{ @{ 1 0 0 }@
+ @{ 0 1 0 }@
+ @{ 0 0 1 }@ }@
+] [
+ 3 identity-matrix
+] unit-test
+
+[
+ @{ @{ 1 0 4 }@
+ @{ 0 7 0 }@
+ @{ 6 0 3 }@ }@
+] [
+ @{ @{ 1 0 0 }@
+ @{ 0 2 0 }@
+ @{ 0 0 3 }@ }@
+
+ @{ @{ 0 0 4 }@
+ @{ 0 5 0 }@
+ @{ 6 0 0 }@ }@
+
+ m+
+] unit-test
+
+[
+ @{ @{ 1 0 4 }@
+ @{ 0 7 0 }@
+ @{ 6 0 3 }@ }@
+] [
+ @{ @{ 1 0 0 }@
+ @{ 0 2 0 }@
+ @{ 0 0 3 }@ }@
+
+ @{ @{ 0 0 -4 }@
+ @{ 0 -5 0 }@
+ @{ -6 0 0 }@ }@
+
+ m-
+] unit-test
+
+[
+ @{ 10 20 30 }@
+] [
+ 10 @{ 1 2 3 }@ n*v
+] unit-test
+
+[
+ @{ 3 4 }@
+] [
+ @{ @{ 1 0 }@
+ @{ 0 1 }@ }@
+
+ @{ 3 4 }@
+
+ m.v
+] unit-test
+
+[
+ @{ 4 3 }@
+] [
+ @{ @{ 0 1 }@
+ @{ 1 0 }@ }@
+
+ @{ 3 4 }@
+
+ m.v
+] unit-test
+
+[ @{ 0 0 1 }@ ] [ @{ 1 0 0 }@ @{ 0 1 0 }@ cross ] unit-test
+[ @{ 1 0 0 }@ ] [ @{ 0 1 0 }@ @{ 0 0 1 }@ cross ] unit-test
+[ @{ 0 1 0 }@ ] [ @{ 0 0 1 }@ @{ 1 0 0 }@ cross ] unit-test
+
+[ @{ @{ 1 2 }@ @{ 3 4 }@ @{ 5 6 }@ }@ ]
+[ @{ @{ 1 2 }@ @{ 3 4 }@ @{ 5 6 }@ }@ flip flip ]
+unit-test
+
+[ @{ @{ 1 3 5 }@ @{ 2 4 6 }@ }@ ]
+[ @{ @{ 1 3 5 }@ @{ 2 4 6 }@ }@ flip flip ]
+unit-test
+
+[ @{ @{ 1 3 5 }@ @{ 2 4 6 }@ }@ ]
+[ @{ @{ 1 2 }@ @{ 3 4 }@ @{ 5 6 }@ }@ flip ]
+unit-test
+
+[
+ @{ @{ 6 }@ }@
+] [
+ @{ @{ 3 }@ }@ @{ @{ 2 }@ }@ m.
+] unit-test
+
+[
+ @{ @{ 11 }@ }@
+] [
+ @{ @{ 1 3 }@ }@ @{ @{ 5 }@ @{ 2 }@ }@ m.
+] unit-test
+
+[
+ @{ @{ 28 }@ }@
+] [
+ @{ @{ 2 4 6 }@ }@
+
+ @{ @{ 1 }@
+ @{ 2 }@
+ @{ 3 }@ }@
+
+ m.
+] unit-test
"/library/math/pow.factor"
"/library/math/trig-hyp.factor"
"/library/math/arc-trig-hyp.factor"
- "/library/math/matrices.factor"
- "/library/math/quaternions.factor"
+ "/library/math/vectors.factor"
"/library/math/parse-numbers.factor"
"/library/words.factor"
+++ /dev/null
-! Copyright (C) 2005 Slava Pestov.
-! See http://factor.sf.net/license.txt for BSD license.
-
-! Everybody's favorite non-commutative skew field, the
-! quaternions!
-
-! Quaternions are represented as pairs of complex numbers,
-! using the identity: (a+bi)+(c+di)j = a+bi+cj+dk.
-USING: arrays kernel math sequences ;
-IN: math-internals
-
-: 2q [ first2 ] 2apply ; inline
-
-: q*a 2q swapd ** >r * r> - ; inline
-
-: q*b 2q >r ** swap r> * + ; inline
-
-IN: math
-
-: q* ( u v -- u*v )
- #! Multiply quaternions.
- [ q*a ] 2keep q*b 2array ;
-
-: qconjugate ( u -- u' )
- #! Quaternion conjugate.
- first2 neg >r conjugate r> 2array ;
-
-: qrecip ( u -- 1/u )
- #! Quaternion inverse.
- qconjugate dup norm-sq v/n ;
-
-: q/ ( u v -- u/v )
- #! Divide quaternions.
- qrecip q* ;
-
-: q*n ( q n -- q )
- #! Note: you will get the wrong result if you try to
- #! multiply a quaternion by a complex number on the right
- #! using v*n. Use this word instead. Note that v*n with a
- #! quaternion and a real is okay.
- conjugate v*n ;
-
-: c>q ( c -- q )
- #! Turn a complex number into a quaternion.
- 0 2array ;
-
-: v>q ( v -- q )
- #! Turn a 3-vector into a quaternion with real part 0.
- first3 rect> >r 0 swap rect> r> 2array ;
-
-: q>v ( q -- v )
- #! Get the vector part of a quaternion, discarding the real
- #! part.
- first2 >r imaginary r> >rect 3array ;
-
-: cross ( u v -- u*v )
- #! Cross product of two 3-vectors can be computed using
- #! quaternion multiplication.
- [ v>q ] 2apply q* q>v ;
-
-! Zero
-: q0 @{ 0 0 }@ ;
-
-! Units
-: q1 @{ 1 0 }@ ;
-: qi @{ #{ 0 1 }# 0 }@ ;
-: qj @{ 0 1 }@ ;
-: qk @{ 0 #{ 0 1 }# }@ ;
-
-! Euler angles -- see
-! http://www.mathworks.com/access/helpdesk/help/toolbox/aeroblks/euleranglestoquaternions.html
-
-: (euler) ( theta unit -- q )
- >r -0.5 * dup cos c>q swap sin r> n*v v- ;
-
-: euler ( phi theta psi -- q )
- qk (euler) >r qj (euler) >r qi (euler) r> q* r> q* ;
+++ /dev/null
-IN: temporary
-USING: kernel lists math matrices namespaces sequences test
-vectors ;
-
-[
- @{ @{ 0 }@ @{ 0 }@ @{ 0 }@ }@
-] [
- 3 1 zero-matrix
-] unit-test
-
-[
- @{ @{ 1 0 0 }@
- @{ 0 1 0 }@
- @{ 0 0 1 }@ }@
-] [
- 3 identity-matrix
-] unit-test
-
-[
- @{ @{ 1 0 4 }@
- @{ 0 7 0 }@
- @{ 6 0 3 }@ }@
-] [
- @{ @{ 1 0 0 }@
- @{ 0 2 0 }@
- @{ 0 0 3 }@ }@
-
- @{ @{ 0 0 4 }@
- @{ 0 5 0 }@
- @{ 6 0 0 }@ }@
-
- m+
-] unit-test
-
-[
- @{ @{ 1 0 4 }@
- @{ 0 7 0 }@
- @{ 6 0 3 }@ }@
-] [
- @{ @{ 1 0 0 }@
- @{ 0 2 0 }@
- @{ 0 0 3 }@ }@
-
- @{ @{ 0 0 -4 }@
- @{ 0 -5 0 }@
- @{ -6 0 0 }@ }@
-
- m-
-] unit-test
-
-[
- @{ 10 20 30 }@
-] [
- 10 @{ 1 2 3 }@ n*v
-] unit-test
-
-[
- @{ 3 4 }@
-] [
- @{ @{ 1 0 }@
- @{ 0 1 }@ }@
-
- @{ 3 4 }@
-
- m.v
-] unit-test
-
-[
- @{ 4 3 }@
-] [
- @{ @{ 0 1 }@
- @{ 1 0 }@ }@
-
- @{ 3 4 }@
-
- m.v
-] unit-test
-
-[ @{ 0 0 1 }@ ] [ @{ 1 0 0 }@ @{ 0 1 0 }@ cross ] unit-test
-[ @{ 1 0 0 }@ ] [ @{ 0 1 0 }@ @{ 0 0 1 }@ cross ] unit-test
-[ @{ 0 1 0 }@ ] [ @{ 0 0 1 }@ @{ 1 0 0 }@ cross ] unit-test
-
-[ @{ @{ 1 2 }@ @{ 3 4 }@ @{ 5 6 }@ }@ ]
-[ @{ @{ 1 2 }@ @{ 3 4 }@ @{ 5 6 }@ }@ flip flip ]
-unit-test
-
-[ @{ @{ 1 3 5 }@ @{ 2 4 6 }@ }@ ]
-[ @{ @{ 1 3 5 }@ @{ 2 4 6 }@ }@ flip flip ]
-unit-test
-
-[ @{ @{ 1 3 5 }@ @{ 2 4 6 }@ }@ ]
-[ @{ @{ 1 2 }@ @{ 3 4 }@ @{ 5 6 }@ }@ flip ]
-unit-test
-
-[
- @{ @{ 6 }@ }@
-] [
- @{ @{ 3 }@ }@ @{ @{ 2 }@ }@ m.
-] unit-test
-
-[
- @{ @{ 11 }@ }@
-] [
- @{ @{ 1 3 }@ }@ @{ @{ 5 }@ @{ 2 }@ }@ m.
-] unit-test
-
-[
- @{ @{ 28 }@ }@
-] [
- @{ @{ 2 4 6 }@ }@
-
- @{ @{ 1 }@
- @{ 2 }@
- @{ 3 }@ }@
-
- m.
-] unit-test
+++ /dev/null
-IN: temporary
-USING: kernel math test ;
-
-[ 1 ] [ qi norm ] unit-test
-[ 1 ] [ qj norm ] unit-test
-[ 1 ] [ qk norm ] unit-test
-[ 1 ] [ q1 norm ] unit-test
-[ 0 ] [ q0 norm ] unit-test
-[ t ] [ qi qj q* qk = ] unit-test
-[ t ] [ qj qk q* qi = ] unit-test
-[ t ] [ qk qi q* qj = ] unit-test
-[ t ] [ qi qi q* q1 v+ q0 = ] unit-test
-[ t ] [ qj qj q* q1 v+ q0 = ] unit-test
-[ t ] [ qk qk q* q1 v+ q0 = ] unit-test
-[ t ] [ qi qj qk q* q* q1 v+ q0 = ] unit-test
-[ t ] [ i qj n*v qk = ] unit-test
-[ t ] [ qj i q*n qk v+ q0 = ] unit-test
-[ t ] [ qk qj q/ qi = ] unit-test
-[ t ] [ qi qk q/ qj = ] unit-test
-[ t ] [ qj qi q/ qk = ] unit-test
-[ t ] [ qi q>v v>q qi = ] unit-test
-[ t ] [ qj q>v v>q qj = ] unit-test
-[ t ] [ qk q>v v>q qk = ] unit-test
-[ t ] [ 1 c>q q1 = ] unit-test
-[ t ] [ i c>q qi = ] unit-test
"words" "prettyprint" "random"
"stream" "math/bitops"
"math/math-combinators" "math/rational" "math/float"
- "math/complex" "math/quaternions" "math/irrational"
- "math/integer" "math/matrices"
+ "math/complex" "math/irrational"
+ "math/integer"
"httpd/url-encoding" "httpd/html" "httpd/httpd"
"httpd/http-client" "threads" "parsing-word"
"inference" "interpreter" "alien"