javascript 常用代码大全(四 )

来源:互联网 发布:chart.js 饼图文字 编辑:程序博客网 时间:2024/03/29 09:06

 

//8

一个可以在页面上随意画线、多边形、圆,填充等功能的js  (part 2) 

function mkOv2D(left, top, width, height) 

var s = this.stroke; 
width += s-1; 
height += s-1; 
var a = width>>1, b = height>>1, 
wod = width&1, hod = (height&1)+1, 
cx = left+a, cy = top+b, 
x = 0, y = b, 
aa = (a*a)<<1, bb = (b*b)<<1, 
st = (aa>>1)*(1-(b<<1)) + bb, 
tt = (bb>>1) - aa*((b<<1)-1); 
if (s-4 < 0 && (!(s-2) || width-51 > 0 && height-51 > 0)) 

var ox = 0, oy = b, 
w, h, 
pxl, pxr, pxt, pxb, pxw; 
while (y > 0) 

if (st < 0) 

st += bb*((x<<1)+3); 
tt += (bb<<1)*(++x); 

else if (tt < 0) 

st += bb*((x<<1)+3) - (aa<<1)*(y-1); 
tt += (bb<<1)*(++x) - aa*(((y--)<<1)-3); 
w = x-ox; 
h = oy-y; 
if (w-1) 

pxw = w+1+(s&1); 
h = s; 

else if (h-1) 

pxw = s; 
h += 1+(s&1); 

else pxw = h = s; 
this.mkOvQds(cx, cy, -x+1, ox-pxw+w+wod, -oy, -h+oy+hod, pxw, h); 
ox = x; 
oy = y; 

else 

tt -= aa*((y<<1)-3); 
st -= (aa<<1)*(--y); 


this.mkDiv(cx-a, cy-oy, s, (oy<<1)+hod); 
this.mkDiv(cx+a+wod-s+1, cy-oy, s, (oy<<1)+hod); 

else 

var _a = (width-((s-1)<<1))>>1, 
_b = (height-((s-1)<<1))>>1, 
_x = 0, _y = _b, 
_aa = (_a*_a)<<1, _bb = (_b*_b)<<1, 
_st = (_aa>>1)*(1-(_b<<1)) + _bb, 
_tt = (_bb>>1) - _aa*((_b<<1)-1), 
pxl = new Array(), 
pxt = new Array(), 
_pxb = new Array(); 
pxl[0] = 0; 
pxt[0] = b; 
_pxb[0] = _b-1; 
while (y > 0) 

if (st < 0) 

st += bb*((x<<1)+3); 
tt += (bb<<1)*(++x); 
pxl[pxl.length] = x; 
pxt[pxt.length] = y; 

else if (tt < 0) 

st += bb*((x<<1)+3) - (aa<<1)*(y-1); 
tt += (bb<<1)*(++x) - aa*(((y--)<<1)-3); 
pxl[pxl.length] = x; 
pxt[pxt.length] = y; 

else 

tt -= aa*((y<<1)-3); 
st -= (aa<<1)*(--y); 

if (_y > 0) 

if (_st < 0) 

_st += _bb*((_x<<1)+3); 
_tt += (_bb<<1)*(++_x); 
_pxb[_pxb.length] = _y-1; 

else if (_tt < 0) 

_st += _bb*((_x<<1)+3) - (_aa<<1)*(_y-1); 
_tt += (_bb<<1)*(++_x) - _aa*(((_y--)<<1)-3); 
_pxb[_pxb.length] = _y-1; 

else 

_tt -= _aa*((_y<<1)-3); 
_st -= (_aa<<1)*(--_y); 
_pxb[_pxb.length-1]--; 



var ox = 0, oy = b, 
_oy = _pxb[0], 
l = pxl.length, 
w, h; 
for (var i = 0; i < l; i++) 

if (typeof _pxb[i] != "undefined") 

if (_pxb[i] < _oy || pxt[i] < oy) 

x = pxl[i]; 
thi, s.mkOvQds(cx, cy, -x+1, ox+wod, -oy, _oy+hod, x-ox, oy-_oy); 
ox = x; 
oy = pxt[i]; 
_oy = _pxb[i]; 


else 

x = pxl[i]; 
this.mkDiv(cx-x+1, cy-oy, 1, (oy<<1)+hod); 
this.mkDiv(cx+ox+wod, cy-oy, 1, (oy<<1)+hod); 
ox = x; 
oy = pxt[i]; 


this.mkDiv(cx-a, cy-oy, 1, (oy<<1)+hod); 
this.mkDiv(cx+ox+wod, cy-oy, 1, (oy<<1)+hod); 

function mkOvDott(left, top, width, height) 

var a = width>>1, b = height>>1, 
wod = width&1, hod = height&1, 
cx = left+a, cy = top+b, 
x = 0, y = b, 
aa2 = (a*a)<<1, aa4 = aa2<<1, bb = (b*b)<<1, 
st = (aa2>>1)*(1-(b<<1)) + bb, 
tt = (bb>>1) - aa2*((b<<1)-1), 
drw = true; 
while (y > 0) 

if (st < 0) 

st += bb*((x<<1)+3); 
tt += (bb<<1)*(++x); 

else if (tt < 0) 

st += bb*((x<<1)+3) - aa4*(y-1); 
tt += (bb<<1)*(++x) - aa2*(((y--)<<1)-3); 

else 

tt -= aa2*((y<<1)-3); 
st -= aa4*(--y); 

if (drw) this.mkOvQds(cx, cy, -x, x+wod, -y, y+hod, 1, 1); 
drw = !drw; 


 

原创粉丝点击