Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function Average(left, right) {
- var result = new Array();
- if (left instanceof Array && right instanceof Array) {
- for (var i=0; i<left.length || i<right.length; i++) {
- result[i] = Average((i<left.length ? left[i] : 0.0), (i<right.length ? right[i] : 0.0));
- }
- } else if (left instanceof Array) {
- for (var i=0; i<left.length; i++) {
- result[i] = Average(left[i], (i==0 ? right : 0.0));
- }
- } else if (right instanceof Array) {
- for (var i=0; i<right.length; i++) {
- result[i] = Average((i==0 ? left : 0.0), right[i]);
- }
- } else {
- result = (left + right) / 2;
- }
- return result;
- }
- function Difference (left, right) {
- var result = new Array();
- if (left instanceof Array && right instanceof Array) {
- for (var i=0; i<left.length || i<right.length; i++) {
- result[i] = Difference((i<left.length ? left[i] : 0.0), (i<right.length ? right[i] : 0.0));
- }
- } else if (left instanceof Array) {
- for (var i=0; i<left.length; i++) {
- result[i] = Difference(left[i], (i==0 ? right : 0.0));
- }
- } else if (right instanceof Array) {
- for (var i=0; i<right.length; i++) {
- result[i] = Difference((i==0 ? left : 0.0), right[i]);
- }
- } else {
- result = left - right;
- }
- return result;
- }
- function Haar(source) {
- if (source instanceof Array) {
- if (source.length > 1) {
- var avg = new Array();
- var diff = new Array();
- for (var i=0; i<source.length - 1; i += 2) {
- avg[avg.length] = Average(source[i], source[i+1]);
- diff[diff.length] = Difference(source[i], source[i+1]);
- }
- for (var i=0; i<diff.length; i++) { diff[i] = Haar(diff[i]); }
- source = Haar(avg).concat(diff, (source.length % 2 == 1 ? source[source.length -1] : []));
- } else if (source.length == 1) { source[0] = Haar(source[0]); }
- }
- return source;
- }
- function Left(average, difference) {
- var result = new Array();
- if (average instanceof Array && difference instanceof Array) {
- for (var i=0; i<average.length || i<difference.length; i++) {
- result[i] = Left((i<average.length ? average[i] : 0.0), (i<difference.length ? difference[i] : 0.0));
- }
- } else if (average instanceof Array) {
- for (var i=0; i<average.length; i++) {
- result[i] = Left(average[i], (i==0 ? difference : 0.0));
- }
- } else if (difference instanceof Array) {
- for (var i=0; i<difference.length; i++) {
- result[i] = Left((i==0 ? average : 0.0), difference[i]);
- }
- } else {
- result = average + difference/2;
- }
- return result;
- }
- function Right(average, difference) {
- var result = new Array();
- if (average instanceof Array && difference instanceof Array) {
- for (var i=0; i<average.length || i<difference.length; i++) {
- result[i] = Right((i<average.length ? average[i] : 0.0), (i<difference.length ? difference[i] : 0.0));
- }
- } else if (average instanceof Array) {
- for (var i=0; i<average.length; i++) {
- result[i] = Right(average[i], (i==0 ? difference : 0.0));
- }
- } else if (difference instanceof Array) {
- for (var i=0; i<difference.length; i++) {
- result[i] = Right((i==0 ? average : 0.0), difference[i]);
- }
- } else {
- result = average - difference/2;
- }
- return result;
- }
- function deHaar(source) {
- if (source instanceof Array) {
- if (source.length > 1) {
- var sub = Math.floor(source.length/2);
- var avg = source.slice(0,sub);
- var diff = source.slice(sub, sub*2);
- deHaar(avg);
- for (var i=0; i<sub; i++) {
- diff[i] = deHaar(diff[i]);
- source[i*2] = Left(avg[i], diff[i]);
- source[i*2+1] = Right(avg[i], diff[i]);
- }
- } else if (source.length == 1) { source[0] = deHaar(source[0]); }
- }
- return source;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement