MCPcopy
hub / github.com/ericdrowell/KineticJS / ToPolar

Function ToPolar

kinetic.js:5735–5785  ·  view source on GitHub ↗
(src,dst,opt)

Source from the content-addressed store, hash-verified

5733 */
5734
5735 var ToPolar = function(src,dst,opt){
5736
5737 var srcPixels = src.data,
5738 dstPixels = dst.data,
5739 xSize = src.width,
5740 ySize = src.height,
5741 xMid = opt.polarCenterX || xSize/2,
5742 yMid = opt.polarCenterY || ySize/2,
5743 i, x, y, r=0,g=0,b=0,a=0;
5744
5745 // Find the largest radius
5746 var rad, rMax = Math.sqrt( xMid*xMid + yMid*yMid );
5747 x = xSize - xMid;
5748 y = ySize - yMid;
5749 rad = Math.sqrt( x*x + y*y );
5750 rMax = (rad > rMax)?rad:rMax;
5751
5752 // We'll be uisng y as the radius, and x as the angle (theta=t)
5753 var rSize = ySize,
5754 tSize = xSize,
5755 radius, theta;
5756
5757 // We want to cover all angles (0-360) and we need to convert to
5758 // radians (*PI/180)
5759 var conversion = 360/tSize*Math.PI/180, sin, cos;
5760
5761 // var x1, x2, x1i, x2i, y1, y2, y1i, y2i, scale;
5762
5763 for( theta=0; theta<tSize; theta+=1 ){
5764 sin = Math.sin(theta*conversion);
5765 cos = Math.cos(theta*conversion);
5766 for( radius=0; radius<rSize; radius+=1 ){
5767 x = Math.floor(xMid+rMax*radius/rSize*cos);
5768 y = Math.floor(yMid+rMax*radius/rSize*sin);
5769 i = (y*xSize + x)*4;
5770 r = srcPixels[i+0];
5771 g = srcPixels[i+1];
5772 b = srcPixels[i+2];
5773 a = srcPixels[i+3];
5774
5775 // Store it
5776 //i = (theta * xSize + radius) * 4;
5777 i = (theta + radius*xSize) * 4;
5778 dstPixels[i+0] = r;
5779 dstPixels[i+1] = g;
5780 dstPixels[i+2] = b;
5781 dstPixels[i+3] = a;
5782
5783 }
5784 }
5785 };
5786
5787 /*
5788 * FromPolar Filter. Converts image data from polar coordinates back to rectangular.

Callers 1

kinetic.jsFile · 0.70

Calls

no outgoing calls

Tested by

no test coverage detected