Waves 'n borders
authorAlyssa Rosenzweig <bobbybee@users.noreply.github.com>
Tue, 26 May 2015 15:06:44 +0000 (11:06 -0400)
committerAlyssa Rosenzweig <bobbybee@users.noreply.github.com>
Tue, 26 May 2015 15:06:44 +0000 (11:06 -0400)
DynImage.js
main.js

index 8e2f2ca..21dff33 100644 (file)
@@ -139,6 +139,20 @@ DynImage.prototype.punchImage = function(sx, sy, sw, sh, force, spread) {
        }       
 }
 
+DynImage.prototype.punchWave = function(sx, sy, sw, sh, force, spread, period) {
+       for(var i = -(sw / 2); i < (sw/2); ++i) {
+               for(var j = (-(sh/2)); j < (sh/2); ++j) {
+                       var x = sx + i,
+                           y = sy + j;
+       
+                       var intensity = Math.sqrt( (i*i) + (j*j) );
+                       intensity = Math.pow(2, -intensity / spread);   
+                       
+                       this.punchPoint(x, y, intensity * force * Math.sin(intensity / period));
+               }
+       }       
+}
+
 // opposite of point pulling; works on a single point only
 
 DynImage.prototype.punchPoint = function(x, y, force) {
@@ -175,5 +189,31 @@ DynImage.prototype.recontrast = function(threshold, amount) {
        }
 }
 
+DynImage.prototype.borderPoint = function(x, y, bred, bgreen, bblue, percent) {
+       var color = this.getColor(x, y);
+
+       // weighted average
+
+       this.setColor( ((bred * percent) + (color[0] * (200 - percent))) / 2,
+                       ((bgreen * percent) + (color[1] * (200 - percent))) / 2,
+                       ((bblue * percent) + (color[2] * (200 - percent))) / 2);
+}
+
+DynImage.prototype.border = function(width, height, bred, bgreen, bblue, mul) {
+       var borderIterations = 10;
+
+       for(var i = 0; i < borderIterations; ++i) {
+               for(var x = i; x < (width - i); ++x) {
+                       // top
+                       
+                       var y = i;
+                       this.borderPoint(x, y, bred, bgreen, bblue, 100 - (i * mul));                   
+
+                       y = height - i - 1;
+                       this.borderPoint(x, y, bred, bgreen, bblue, 100 - (i * mul));                   
+               }
+       }       
+}
+
 
 module.exports = DynImage;
diff --git a/main.js b/main.js
index f7b6435..64e897b 100644 (file)
--- a/main.js
+++ b/main.js
@@ -14,7 +14,7 @@ var DynImage = require("./DynImage");
 var width = process.argv[2]*1;
 var height = process.argv[3]*1;
 
-function pretty(name, ired, igreen, iblue, ringConstant, stainConstant, stainSize) {
+function pretty(name, ired, igreen, iblue, ringConstant, stainConstant, stainSize, waveConstant, contrastThreshold, bred, bgreen, bblue) {
        // buffer size is: width * height * 4 (RGBA is 4 bytes)
        var buffer = new Buffer(width * height * 4);
 
@@ -31,16 +31,18 @@ function pretty(name, ired, igreen, iblue, ringConstant, stainConstant, stainSiz
 
        // make a beautiful point ring
 
-       dynimage.punchImage(width / 2, height / 2, width * stainSize, height * stainSize, Math.floor(stainConstant), width / 3);
+       dynimage.punchWave(width / 2, height / 2, width * stainSize, height * stainSize, Math.floor(stainConstant), width / 3, waveConstant);
 
        dynimage.pointRing(width / 2, height / 2, width, ringConstant);
 
-       dynimage.recontrast(127, 70);
+       dynimage.recontrast(contrastThreshold, Math.floor(Math.random() * 60));
 
+       dynimage.border(width, height, bred, bgreen, bblue, 10);
+       
        var png = new Png(buffer, width, height, 'rgba');
        png.encode(function(image) {
                                fs.writeFile(name+".png", image);
                        });
 }
 
-pretty("output", Math.random() * 255, Math.random() * 255, Math.random() * 255, Math.random() * 6, Math.random() * 170, 0.5 + (0.5*Math.random()));
+pretty("output", Math.random() * 255, Math.random() * 255, Math.random() * 255, Math.random() * 6, Math.random() * 170, 0.5 + (0.5*Math.random()), Math.floor(Math.random() * 20), 50 + (Math.random() * 150), Math.random() * 255, Math.random() * 255, Math.random() * 255);
This page took 0.031804 seconds and 4 git commands to generate.