BVB Source Codes

jsfeat Show jsfeat_mat_math.js Source code

Return Download jsfeat: download jsfeat_mat_math.js Source code - Download jsfeat Source code - Type:.js
  1. /**
  2.  * @author Eugene Zatepyakin / http://inspirit.ru/
  3.  *
  4.  */
  5.  
  6. (function(global) {
  7.     "use strict";
  8.     //
  9.  
  10.     var matmath = (function() {
  11.        
  12.         return {
  13.             identity: function(M, value) {
  14.                 if (typeof value === "undefined") { value=1; }
  15.                 var src=M.data;
  16.                 var rows=M.rows, cols=M.cols, cols_1=(cols+1)|0;
  17.                 var len = rows * cols;
  18.                 var k = len;
  19.                 while(--len >= 0) src[len] = 0.0;
  20.                 len = k;
  21.                 k = 0;
  22.                 while(k < len)  {
  23.                     src[k] = value;
  24.                     k = k + cols_1;
  25.                 }
  26.             },
  27.  
  28.             transpose: function(At, A) {
  29.                 var i=0,j=0,nrows=A.rows,ncols=A.cols;
  30.                 var Ai=0,Ati=0,pAt=0;
  31.                 var ad=A.data,atd=At.data;
  32.  
  33.                 for (; i < nrows; Ati += 1, Ai += ncols, i++) {
  34.                     pAt = Ati;
  35.                     for (j = 0; j < ncols; pAt += nrows, j++) atd[pAt] = ad[Ai+j];
  36.                 }
  37.             },
  38.  
  39.             // C = A * B
  40.             multiply: function(C, A, B) {
  41.                 var i=0,j=0,k=0;
  42.                 var Ap=0,pA=0,pB=0,p_B=0,Cp=0;
  43.                 var ncols=A.cols,nrows=A.rows,mcols=B.cols;
  44.                 var ad=A.data,bd=B.data,cd=C.data;
  45.                 var sum=0.0;
  46.  
  47.                 for (; i < nrows; Ap += ncols, i++) {
  48.                     for (p_B = 0, j = 0; j < mcols; Cp++, p_B++, j++) {
  49.                         pB = p_B;
  50.                         pA = Ap;
  51.                         sum = 0.0;
  52.                         for (k = 0; k < ncols; pA++, pB += mcols, k++) {
  53.                             sum += ad[pA] * bd[pB];
  54.                         }
  55.                         cd[Cp] = sum;
  56.                     }
  57.                 }
  58.             },
  59.  
  60.             // C = A * B'
  61.             multiply_ABt: function(C, A, B) {
  62.                 var i=0,j=0,k=0;
  63.                 var Ap=0,pA=0,pB=0,Cp=0;
  64.                 var ncols=A.cols,nrows=A.rows,mrows=B.rows;
  65.                 var ad=A.data,bd=B.data,cd=C.data;
  66.                 var sum=0.0;
  67.  
  68.                 for (; i < nrows; Ap += ncols, i++) {
  69.                     for (pB = 0, j = 0; j < mrows; Cp++, j++) {
  70.                         pA = Ap;
  71.                         sum = 0.0;
  72.                         for (k = 0; k < ncols; pA++, pB++, k++) {
  73.                             sum += ad[pA] * bd[pB];
  74.                         }
  75.                         cd[Cp] = sum;
  76.                     }
  77.                 }
  78.             },
  79.  
  80.             // C = A' * B
  81.             multiply_AtB: function(C, A, B) {
  82.                 var i=0,j=0,k=0;
  83.                 var Ap=0,pA=0,pB=0,p_B=0,Cp=0;
  84.                 var ncols=A.cols,nrows=A.rows,mcols=B.cols;
  85.                 var ad=A.data,bd=B.data,cd=C.data;
  86.                 var sum=0.0;
  87.  
  88.                 for (; i < ncols; Ap++, i++) {
  89.                     for (p_B = 0, j = 0; j < mcols; Cp++, p_B++, j++) {
  90.                         pB = p_B;
  91.                         pA = Ap;
  92.                         sum = 0.0;
  93.                         for (k = 0; k < nrows; pA += ncols, pB += mcols, k++) {
  94.                             sum += ad[pA] * bd[pB];
  95.                         }
  96.                         cd[Cp] = sum;
  97.                     }
  98.                 }
  99.             },
  100.  
  101.             // C = A * A'
  102.             multiply_AAt: function(C, A) {
  103.                 var i=0,j=0,k=0;
  104.                 var pCdiag=0,p_A=0,pA=0,pB=0,pC=0,pCt=0;
  105.                 var ncols=A.cols,nrows=A.rows;
  106.                 var ad=A.data,cd=C.data;
  107.                 var sum=0.0;
  108.  
  109.                 for (; i < nrows; pCdiag += nrows + 1, p_A = pA, i++) {
  110.                     pC = pCdiag;
  111.                     pCt = pCdiag;
  112.                     pB = p_A;
  113.                     for (j = i; j < nrows; pC++, pCt += nrows, j++) {
  114.                         pA = p_A;
  115.                         sum = 0.0;
  116.                         for (k = 0; k < ncols; k++) {
  117.                             sum += ad[pA++] * ad[pB++];
  118.                         }
  119.                         cd[pC] = sum
  120.                         cd[pCt] = sum;
  121.                     }
  122.                 }
  123.             },
  124.  
  125.             // C = A' * A
  126.             multiply_AtA: function(C, A) {
  127.                 var i=0,j=0,k=0;
  128.                 var p_A=0,pA=0,pB=0,p_C=0,pC=0,p_CC=0;
  129.                 var ncols=A.cols,nrows=A.rows;
  130.                 var ad=A.data,cd=C.data;
  131.                 var sum=0.0;
  132.  
  133.                 for (; i < ncols; p_C += ncols, i++) {
  134.                     p_A = i;
  135.                     p_CC = p_C + i;
  136.                     pC = p_CC;
  137.                     for (j = i; j < ncols; pC++, p_CC += ncols, j++) {
  138.                         pA = p_A;
  139.                         pB = j;
  140.                         sum = 0.0;
  141.                         for (k = 0; k < nrows; pA += ncols, pB += ncols, k++) {
  142.                             sum += ad[pA] * ad[pB];
  143.                         }
  144.                         cd[pC] = sum
  145.                         cd[p_CC] = sum;
  146.                     }
  147.                 }
  148.             },
  149.  
  150.             // various small matrix operations
  151.             identity_3x3: function(M, value) {
  152.                 if (typeof value === "undefined") { value=1; }
  153.                 var dt=M.data;
  154.                 dt[0] = dt[4] = dt[8] = value;
  155.                 dt[1] = dt[2] = dt[3] = 0;
  156.                 dt[5] = dt[6] = dt[7] = 0;
  157.             },
  158.  
  159.             invert_3x3: function(from, to) {
  160.                 var A = from.data, invA = to.data;
  161.                 var t1 = A[4];
  162.                 var t2 = A[8];
  163.                 var t4 = A[5];
  164.                 var t5 = A[7];
  165.                 var t8 = A[0];
  166.  
  167.                 var t9 = t8*t1;
  168.                 var t11 = t8*t4;
  169.                 var t13 = A[3];
  170.                 var t14 = A[1];
  171.                 var t15 = t13*t14;
  172.                 var t17 = A[2];
  173.                 var t18 = t13*t17;
  174.                 var t20 = A[6];
  175.                 var t21 = t20*t14;
  176.                 var t23 = t20*t17;
  177.                 var t26 = 1.0/(t9*t2-t11*t5-t15*t2+t18*t5+t21*t4-t23*t1);
  178.                 invA[0] = (t1*t2-t4*t5)*t26;
  179.                 invA[1] = -(t14*t2-t17*t5)*t26;
  180.                 invA[2] = -(-t14*t4+t17*t1)*t26;
  181.                 invA[3] = -(t13*t2-t4*t20)*t26;
  182.                 invA[4] = (t8*t2-t23)*t26;
  183.                 invA[5] = -(t11-t18)*t26;
  184.                 invA[6] = -(-t13*t5+t1*t20)*t26;
  185.                 invA[7] = -(t8*t5-t21)*t26;
  186.                 invA[8] = (t9-t15)*t26;
  187.             },
  188.             // C = A * B
  189.             multiply_3x3: function(C, A, B) {
  190.                 var Cd=C.data, Ad=A.data, Bd=B.data;
  191.                 var m1_0 = Ad[0], m1_1 = Ad[1], m1_2 = Ad[2];
  192.                 var m1_3 = Ad[3], m1_4 = Ad[4], m1_5 = Ad[5];
  193.                 var m1_6 = Ad[6], m1_7 = Ad[7], m1_8 = Ad[8];
  194.  
  195.                 var m2_0 = Bd[0], m2_1 = Bd[1], m2_2 = Bd[2];
  196.                 var m2_3 = Bd[3], m2_4 = Bd[4], m2_5 = Bd[5];
  197.                 var m2_6 = Bd[6], m2_7 = Bd[7], m2_8 = Bd[8];
  198.  
  199.                 Cd[0] = m1_0 * m2_0 + m1_1 * m2_3 + m1_2 * m2_6;
  200.                 Cd[1] = m1_0 * m2_1 + m1_1 * m2_4 + m1_2 * m2_7;
  201.                 Cd[2] = m1_0 * m2_2 + m1_1 * m2_5 + m1_2 * m2_8;
  202.                 Cd[3] = m1_3 * m2_0 + m1_4 * m2_3 + m1_5 * m2_6;
  203.                 Cd[4] = m1_3 * m2_1 + m1_4 * m2_4 + m1_5 * m2_7;
  204.                 Cd[5] = m1_3 * m2_2 + m1_4 * m2_5 + m1_5 * m2_8;
  205.                 Cd[6] = m1_6 * m2_0 + m1_7 * m2_3 + m1_8 * m2_6;
  206.                 Cd[7] = m1_6 * m2_1 + m1_7 * m2_4 + m1_8 * m2_7;
  207.                 Cd[8] = m1_6 * m2_2 + m1_7 * m2_5 + m1_8 * m2_8;
  208.             },
  209.  
  210.             mat3x3_determinant: function(M) {
  211.                 var md=M.data;
  212.                 return  md[0] * md[4] * md[8] -
  213.                         md[0] * md[5] * md[7] -
  214.                         md[3] * md[1] * md[8] +
  215.                         md[3] * md[2] * md[7] +
  216.                         md[6] * md[1] * md[5] -
  217.                         md[6] * md[2] * md[4];
  218.             },
  219.  
  220.             determinant_3x3: function(M11, M12, M13,
  221.                                       M21, M22, M23,
  222.                                       M31, M32, M33) {
  223.                 return  M11 * M22 * M33 - M11 * M23 * M32 -
  224.                           M21 * M12 * M33 + M21 * M13 * M32 +
  225.                           M31 * M12 * M23 - M31 * M13 * M22;
  226.             }
  227.         };
  228.  
  229.     })();
  230.  
  231.     global.matmath = matmath;
  232.  
  233. })(jsfeat);
downloadjsfeat_mat_math.js Source code - Download jsfeat Source code
Related Source Codes/Software:
flakes - Flakes is an Admin Template Framework. A combinati... 2017-04-15
capstone - Capstone disassembly/disassembler framework: Core ... 2017-04-15
nginx-resources - A collection of resources covering Nginx, Nginx + ... 2017-04-15
utron - A lightweight MVC framework for Go(Golang) 2017-04-15
cfssl - CFSSL: Cloudflare's PKI and TLS toolkit ... 2017-04-15
MLeaksFinder - Find memory leaks in your iOS app at develop time. 2017-04-16
qt - Qt binding for Go (Golang) which supports Windows ... 2017-04-16
rainloop-webmail - Simple, modern & fast web-based email client ... 2017-04-16
pencil - Multiplatform GUI Prototyping/Wireframing 2017-04-16
x64dbg - An open-source x64/x32 debugger for windows. ... 2017-04-16
Toucan - Fabulous Image Processing in Swift 2017-04-23
CoffeeScriptRedux - 2017-04-23
breakpoint - Really simple media queries in Sa 2017-04-23
libsvm - 2017-04-22
grr - GRR Rapid Response: remote live forensics for inci... 2017-04-22
grit - **Grit is no longer maintained. Check out libgit2/... 2017-04-22
guard-livereload - Guard::LiveReload automatically reload your browse... 2017-04-22
Begin-Latex-in-minutes - Brief Intro to LaTeX for beginners that helps you ... 2017-04-22
wicked - Use wicked to turn your controller into a wizard ... 2017-04-22
flexboxfroggy - A game for learning CSS flexbox ... 2017-04-22

 Back to top