管理驾驶舱 之仪表盘的设计

2024-01-15 09:20

本文主要是介绍管理驾驶舱 之仪表盘的设计,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

     就上次的研究得到很多园友的支持表示感谢。这篇是我最近的新研究。

   我先解释一下

管理驾驶舱是基于ERP的高层决策支持系统。通过详尽的指标体系,实时反映企业的运行 状态,将采集的数据形象化、直观化、具体化。“管理驾驶舱”充分融合了人脑科学、管理科学和信息科学的精华,以人为产品的核心,从管理者的决策环境、企业 管理综合指标的定义以及信息的表述,都围绕着激发人的智能、有利于思维连贯和有效思维判断为目的。将企业管理决策提升到一个新的高度。最大化地发挥高层经 理了解、领导和控制公司业务的管理室(即驾驶舱),实际上是一个为高层管理层提供的“一站式”(One-Stop)决策支持的管理信息中心系统。它以驾驶 舱的形式,通过各种常见的图表(速度表、音量柱、预警雷达、雷达球)形象标示企业运行的关键指标(KPI),直观的监测企业运营情况,并可以对异常关键指 标预警,和

挖掘分析。

框架脚本

js脚本

ExpandedBlockStart.gif 代码
/* 廖强 */

var  jg_ok, jg_ie, jg_fast, jg_dom, jg_moz;


function  _chkDHTM(x, i) {
    x 
=  document.body  ||   null ;
    jg_ie 
=  x  &&   typeof  x.insertAdjacentHTML  !=   " undefined "   &&  document.createElement;
    jg_dom 
=  (x  &&   ! jg_ie  &&
        
typeof  x.appendChild  !=   " undefined "   &&
        
typeof  document.createRange  !=   " undefined "   &&
        
typeof  (i  =  document.createRange()).setStartBefore  !=   " undefined "   &&
        
typeof  i.createContextualFragment  !=   " undefined " );
    jg_fast 
=  jg_ie  &&  document.all  &&   ! window.opera;
    jg_moz 
=  jg_dom  &&   typeof  x.style.MozOpacity  !=   " undefined " ;
    jg_ok 
=   !! (jg_ie  ||  jg_dom);
}

function  _pntCnvDom() {
    
var  x  =   this .wnd.document.createRange();
    x.setStartBefore(
this .cnv);
    x 
=  x.createContextualFragment(jg_fast  ?   this ._htmRpc() :  this .htm);
    
if  ( this .cnv)  this .cnv.appendChild(x);
    
this .htm  =   "" ;
}

function  _pntCnvIe() {
    
if  ( this .cnv)  this .cnv.insertAdjacentHTML( " BeforeEnd " , jg_fast  ?   this ._htmRpc() :  this .htm);
    
this .htm  =   "" ;
}

function  _pntDoc() {
    
this .wnd.document.write(jg_fast  ?   this ._htmRpc() :  this .htm);
    
this .htm  =   '' ;
}

function  _pntN() {
    ;
}

function  _mkDiv(x, y, w, h) {
    
this .htm  +=   ' <div style="position:absolute; '   +
        
' left: '   +  x  +   ' px; '   +
        
' top: '   +  y  +   ' px; '   +
        
' width: '   +  w  +   ' px; '   +
        
' height: '   +  h  +   ' px; '   +
        
' clip:rect(0, '   +  w  +   ' px, '   +  h  +   ' px,0); '   +
        
' background-color: '   +   this .color  +
        (
! jg_moz  ?   ' ;overflow:hidden '  :  '' +
        
' ;"><\/div> ' ;
}

function  _mkDivIe(x, y, w, h) {
    
this .htm  +=   ' %% '   +   this .color  +   ' ; '   +  x  +   ' ; '   +  y  +   ' ; '   +  w  +   ' ; '   +  h  +   ' ; ' ;
}

function  _mkDivPrt(x, y, w, h) {
    
this .htm  +=   ' <div style="position:absolute; '   +
        
' border-left: '   +  w  +   ' px solid  '   +   this .color  +   ' ; '   +
        
' left: '   +  x  +   ' px; '   +
        
' top: '   +  y  +   ' px; '   +
        
' width:0px; '   +
        
' height: '   +  h  +   ' px; '   +
        
' clip:rect(0, '   +  w  +   ' px, '   +  h  +   ' px,0); '   +
        
' background-color: '   +   this .color  +
        (
! jg_moz  ?   ' ;overflow:hidden '  :  '' +
        
' ;"><\/div> ' ;
}

var  _regex  =   / %%([^;]+);([^;]+);([^;]+);([^;]+);([^;]+); / g;
function  _htmRpc() {
    
return   this .htm.replace(
        _regex,
        
' <div style="overflow:hidden;position:absolute;background-color: '   +
        
' $1;left:$2;top:$3;width:$4;height:$5"></div>\n ' );
}

function  _htmPrtRpc() {
    
return   this .htm.replace(
        _regex,
        
' <div style="overflow:hidden;position:absolute;background-color: '   +
        
' $1;left:$2;top:$3;width:$4;height:$5;border-left:$4px solid $1"></div>\n ' );
}

function  _mkLin(x1, y1, x2, y2) {
    
if  (x1  >  x2) {
        
var  _x2  =  x2;
        
var  _y2  =  y2;
        x2 
=  x1;
        y2 
=  y1;
        x1 
=  _x2;
        y1 
=  _y2;
    }
    
var  dx  =  x2  -  x1, dy  =  Math.abs(y2  -  y1),
    x 
=  x1, y  =  y1,
    yIncr 
=  (y1  >  y2)  ?   - 1  :  1 ;

    
if  (dx  >=  dy) {
        
var  pr  =  dy  <<   1 ,
        pru 
=  pr  -  (dx  <<   1 ),
        p 
=  pr  -  dx,
        ox 
=  x;
        
while  (dx  >   0 ) {
            
-- dx;
            
++ x;
            
if  (p  >   0 ) {
                
this ._mkDiv(ox, y, x  -  ox,  1 );
                y 
+=  yIncr;
                p 
+=  pru;
                ox 
=  x;
            }
            
else  p  +=  pr;
        }
        
this ._mkDiv(ox, y, x2  -  ox  +   1 1 );
    }

    
else  {
        
var  pr  =  dx  <<   1 ,
        pru 
=  pr  -  (dy  <<   1 ),
        p 
=  pr  -  dy,
        oy 
=  y;
        
if  (y2  <=  y1) {
            
while  (dy  >   0 ) {
                
-- dy;
                
if  (p  >   0 ) {
                    
this ._mkDiv(x ++ , y,  1 , oy  -  y  +   1 );
                    y 
+=  yIncr;
                    p 
+=  pru;
                    oy 
=  y;
                }
                
else  {
                    y 
+=  yIncr;
                    p 
+=  pr;
                }
            }
            
this ._mkDiv(x2, y2,  1 , oy  -  y2  +   1 );
        }
        
else  {
            
while  (dy  >   0 ) {
                
-- dy;
                y 
+=  yIncr;
                
if  (p  >   0 ) {
                    
this ._mkDiv(x ++ , oy,  1 , y  -  oy);
                    p 
+=  pru;
                    oy 
=  y;
                }
                
else  p  +=  pr;
            }
            
this ._mkDiv(x2, oy,  1 , y2  -  oy  +   1 );
        }
    }
}

function  _mkLin2D(x1, y1, x2, y2) {
    
if  (x1  >  x2) {
        
var  _x2  =  x2;
        
var  _y2  =  y2;
        x2 
=  x1;
        y2 
=  y1;
        x1 
=  _x2;
        y1 
=  _y2;
    }
    
var  dx  =  x2  -  x1, dy  =  Math.abs(y2  -  y1),
    x 
=  x1, y  =  y1,
    yIncr 
=  (y1  >  y2)  ?   - 1  :  1 ;

    
var  s  =   this .stroke;
    
if  (dx  >=  dy) {
        
if  (dx  >   0   &&  s  -   3   >   0 ) {
            
var  _s  =  (s  *  dx  *  Math.sqrt( 1   +  dy  *  dy  /  (dx  *  dx))  -  dx  -  (s  >>   1 *  dy)  /  dx;
            _s 
=  ( ! (s  -   4 ?  Math.ceil(_s) : Math.round(_s))  +   1 ;
        }
        
else   var  _s  =  s;
        
var  ad  =  Math.ceil(s  /   2 );

        
var  pr  =  dy  <<   1 ,
        pru 
=  pr  -  (dx  <<   1 ),
        p 
=  pr  -  dx,
        ox 
=  x;
        
while  (dx  >   0 ) {
            
-- dx;
            
++ x;
            
if  (p  >   0 ) {
                
this ._mkDiv(ox, y, x  -  ox  +  ad, _s);
                y 
+=  yIncr;
                p 
+=  pru;
                ox 
=  x;
            }
            
else  p  +=  pr;
        }
        
this ._mkDiv(ox, y, x2  -  ox  +  ad  +   1 , _s);
    }

    
else  {
        
if  (s  -   3   >   0 ) {
            
var  _s  =  (s  *  dy  *  Math.sqrt( 1   +  dx  *  dx  /  (dy  *  dy))  -  (s  >>   1 *  dx  -  dy)  /  dy;
            _s 
=  ( ! (s  -   4 ?  Math.ceil(_s) : Math.round(_s))  +   1 ;
        }
        
else   var  _s  =  s;
        
var  ad  =  Math.round(s  /   2 );

        
var  pr  =  dx  <<   1 ,
        pru 
=  pr  -  (dy  <<   1 ),
        p 
=  pr  -  dy,
        oy 
=  y;
        
if  (y2  <=  y1) {
            
++ ad;
            
while  (dy  >   0 ) {
                
-- dy;
                
if  (p  >   0 ) {
                    
this ._mkDiv(x ++ , y, _s, oy  -  y  +  ad);
                    y 
+=  yIncr;
                    p 
+=  pru;
                    oy 
=  y;
                }
                
else  {
                    y 
+=  yIncr;
                    p 
+=  pr;
                }
            }
            
this ._mkDiv(x2, y2, _s, oy  -  y2  +  ad);
        }
        
else  {
            
while  (dy  >   0 ) {
                
-- dy;
                y 
+=  yIncr;
                
if  (p  >   0 ) {
                    
this ._mkDiv(x ++ , oy, _s, y  -  oy  +  ad);
                    p 
+=  pru;
                    oy 
=  y;
                }
                
else  p  +=  pr;
            }
            
this ._mkDiv(x2, oy, _s, y2  -  oy  +  ad  +   1 );
        }
    }
}

function  _mkLinDott(x1, y1, x2, y2) {
    
if  (x1  >  x2) {
        
var  _x2  =  x2;
        
var  _y2  =  y2;
        x2 
=  x1;
        y2 
=  y1;
        x1 
=  _x2;
        y1 
=  _y2;
    }
    
var  dx  =  x2  -  x1, dy  =  Math.abs(y2  -  y1),
    x 
=  x1, y  =  y1,
    yIncr 
=  (y1  >  y2)  ?   - 1  :  1 ,
    drw 
=   true ;
    
if  (dx  >=  dy) {
        
var  pr  =  dy  <<   1 ,
        pru 
=  pr  -  (dx  <<   1 ),
        p 
=  pr  -  dx;
        
while  (dx  >   0 ) {
            
-- dx;
            
if  (drw)  this ._mkDiv(x, y,  1 1 );
            drw 
=   ! drw;
            
if  (p  >   0 ) {
                y 
+=  yIncr;
                p 
+=  pru;
            }
            
else  p  +=  pr;
            
++ x;
        }
    }
    
else  {
        
var  pr  =  dx  <<   1 ,
        pru 
=  pr  -  (dy  <<   1 ),
        p 
=  pr  -  dy;
        
while  (dy  >   0 ) {
            
-- dy;
            
if  (drw)  this ._mkDiv(x, y,  1 1 );
            drw 
=   ! drw;
            y 
+=  yIncr;
            
if  (p  >   0 ) {
                
++ x;
                p 
+=  pru;
            }
            
else  p  +=  pr;
        }
    }
    
if  (drw)  this ._mkDiv(x, y,  1 1 );
}

function  _mkOv(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,
    ox 
=   0 , oy  =  b,
    aa2 
=  (a  *  a)  <<   1 , aa4  =  aa2  <<   1 , bb2  =  (b  *  b)  <<   1 , bb4  =  bb2  <<   1 ,
    st 
=  (aa2  >>   1 *  ( 1   -  (b  <<   1 ))  +  bb2,
    tt 
=  (bb2  >>   1 -  aa2  *  ((b  <<   1 -   1 ),
    w, h;
    
while  (y  >   0 ) {
        
if  (st  <   0 ) {
            st 
+=  bb2  *  ((x  <<   1 +   3 );
            tt 
+=  bb4  *  ( ++ x);
        }
        
else   if  (tt  <   0 ) {
            st 
+=  bb2  *  ((x  <<   1 +   3 -  aa4  *  (y  -   1 );
            tt 
+=  bb4  *  ( ++ x)  -  aa2  *  (((y -- <<   1 -   3 );
            w 
=  x  -  ox;
            h 
=  oy  -  y;
            
if  ((w  &   2 &&  (h  &   2 )) {
                
this ._mkOvQds(cx, cy, x  -   2 , y  +   2 1 1 , wod, hod);
                
this ._mkOvQds(cx, cy, x  -   1 , y  +   1 1 1 , wod, hod);
            }
            
else   this ._mkOvQds(cx, cy, x  -   1 , oy, w, h, wod, hod);
            ox 
=  x;
            oy 
=  y;
        }
        
else  {
            tt 
-=  aa2  *  ((y  <<   1 -   3 );
            st 
-=  aa4  *  ( -- y);
        }
    }
    w 
=  a  -  ox  +   1 ;
    h 
=  (oy  <<   1 +  hod;
    y 
=  cy  -  oy;
    
this ._mkDiv(cx  -  a, y, w, h);
    
this ._mkDiv(cx  +  ox  +  wod  -   1 , y, w, h);
}

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 ,
    cx 
=  left  +  a, cy  =  top  +  b,
    x 
=   0 , y  =  b,
    aa2 
=  (a  *  a)  <<   1 , aa4  =  aa2  <<   1 , bb2  =  (b  *  b)  <<   1 , bb4  =  bb2  <<   1 ,
    st 
=  (aa2  >>   1 *  ( 1   -  (b  <<   1 ))  +  bb2,
    tt 
=  (bb2  >>   1 -  aa2  *  ((b  <<   1 -   1 );

    
if  (s  -   4   <   0   &&  ( ! (s  -   2 ||  width  -   51   >   0   &&  height  -   51   >   0 )) {
        
var  ox  =   0 , oy  =  b,
        w, h,
        pxw;
        
while  (y  >   0 ) {
            
if  (st  <   0 ) {
                st 
+=  bb2  *  ((x  <<   1 +   3 );
                tt 
+=  bb4  *  ( ++ x);
            }
            
else   if  (tt  <   0 ) {
                st 
+=  bb2  *  ((x  <<   1 +   3 -  aa4  *  (y  -   1 );
                tt 
+=  bb4  *  ( ++ x)  -  aa2  *  (((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 , oy, pxw, h, wod, hod);
                ox 
=  x;
                oy 
=  y;
            }
            
else  {
                tt 
-=  aa2  *  ((y  <<   1 -   3 );
                st 
-=  aa4  *  ( -- y);
            }
        }
        
this ._mkDiv(cx  -  a, cy  -  oy, s, (oy  <<   1 +  hod);
        
this ._mkDiv(cx  +  a  +  wod  -  s, cy  -  oy, s, (oy  <<   1 +  hod);
    }

    
else  {
        
var  _a  =  (width  -  (s  <<   1 ))  >>   1 ,
        _b 
=  (height  -  (s  <<   1 ))  >>   1 ,
        _x 
=   0 , _y  =  _b,
        _aa2 
=  (_a  *  _a)  <<   1 , _aa4  =  _aa2  <<   1 , _bb2  =  (_b  *  _b)  <<   1 , _bb4  =  _bb2  <<   1 ,
        _st 
=  (_aa2  >>   1 *  ( 1   -  (_b  <<   1 ))  +  _bb2,
        _tt 
=  (_bb2  >>   1 -  _aa2  *  ((_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 ) {
                pxl[pxl.length] 
=  x;
                pxt[pxt.length] 
=  y;
                st 
+=  bb2  *  ((x  <<   1 +   3 );
                tt 
+=  bb4  *  ( ++ x);
            }
            
else   if  (tt  <   0 ) {
                pxl[pxl.length] 
=  x;
                st 
+=  bb2  *  ((x  <<   1 +   3 -  aa4  *  (y  -   1 );
                tt 
+=  bb4  *  ( ++ x)  -  aa2  *  (((y -- <<   1 -   3 );
                pxt[pxt.length] 
=  y;
            }
            
else  {
                tt 
-=  aa2  *  ((y  <<   1 -   3 );
                st 
-=  aa4  *  ( -- y);
            }

            
if  (_y  >   0 ) {
                
if  (_st  <   0 ) {
                    _st 
+=  _bb2  *  ((_x  <<   1 +   3 );
                    _tt 
+=  _bb4  *  ( ++ _x);
                    _pxb[_pxb.length] 
=  _y  -   1 ;
                }
                
else   if  (_tt  <   0 ) {
                    _st 
+=  _bb2  *  ((_x  <<   1 +   3 -  _aa4  *  (_y  -   1 );
                    _tt 
+=  _bb4  *  ( ++ _x)  -  _aa2  *  (((_y -- <<   1 -   3 );
                    _pxb[_pxb.length] 
=  _y  -   1 ;
                }
                
else  {
                    _tt 
-=  _aa2  *  ((_y  <<   1 -   3 );
                    _st 
-=  _aa4  *  ( -- _y);
                    _pxb[_pxb.length 
-   1 ] -- ;
                }
            }
        }

        
var  ox  =   - wod, 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];
                    
this ._mkOvQds(cx, cy, x, oy, x  -  ox, oy  -  _oy, wod, hod);
                    ox 
=  x;
                    oy 
=  pxt[i];
                    _oy 
=  _pxb[i];
                }
            }
            
else  {
                x 
=  pxl[i];
                
this ._mkDiv(cx  -  x, 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 , hodu  =  hod  ^   1 ,
    cx 
=  left  +  a, cy  =  top  +  b,
    x 
=   0 , y  =  b,
    aa2 
=  (a  *  a)  <<   1 , aa4  =  aa2  <<   1 , bb2  =  (b  *  b)  <<   1 , bb4  =  bb2  <<   1 ,
    st 
=  (aa2  >>   1 *  ( 1   -  (b  <<   1 ))  +  bb2,
    tt 
=  (bb2  >>   1 -  aa2  *  ((b  <<   1 -   1 ),
    drw 
=   true ;
    
while  (y  >   0 ) {
        
if  (st  <   0 ) {
            st 
+=  bb2  *  ((x  <<   1 +   3 );
            tt 
+=  bb4  *  ( ++ x);
        }
        
else   if  (tt  <   0 ) {
            st 
+=  bb2  *  ((x  <<   1 +   3 -  aa4  *  (y  -   1 );
            tt 
+=  bb4  *  ( ++ x)  -  aa2  *  (((y -- <<   1 -   3 );
        }
        
else  {
            tt 
-=  aa2  *  ((y  <<   1 -   3 );
            st 
-=  aa4  *  ( -- y);
        }
        
if  (drw  &&  y  >=  hodu)  this ._mkOvQds(cx, cy, x, y,  1 1 , wod, hod);
        drw 
=   ! drw;
    }
}

function  _mkRect(x, y, w, h) {
    
var  s  =   this .stroke;
    
this ._mkDiv(x, y, w, s);
    
this ._mkDiv(x  +  w, y, s, h);
    
this ._mkDiv(x, y  +  h, w  +  s, s);
    
this ._mkDiv(x, y  +  s, s, h  -  s);
}

function  _mkRectDott(x, y, w, h) {
    
this .drawLine(x, y, x  +  w, y);
    
this .drawLine(x  +  w, y, x  +  w, y  +  h);
    
this .drawLine(x, y  +  h, x  +  w, y  +  h);
    
this .drawLine(x, y, x, y  +  h);
}

function  jsgFont() {
    
this .PLAIN  =   ' font-weight:normal; ' ;
    
this .BOLD  =   ' font-weight:bold; ' ;
    
this .ITALIC  =   ' font-style:italic; ' ;
    
this .ITALIC_BOLD  =   this .ITALIC  +   this .BOLD;
    
this .BOLD_ITALIC  =   this .ITALIC_BOLD;
}
var  Font  =   new  jsgFont();

function  jsgStroke() {
    
this .DOTTED  =   - 1 ;
}
var  Stroke  =   new  jsgStroke();

function  jsGraphics(cnv, wnd) {
    
this .setColor  =   function (x) {
        
this .color  =  x.toLowerCase();
    };

    
this .setStroke  =   function (x) {
        
this .stroke  =  x;
        
if  ( ! (x  +   1 )) {
            
this .drawLine  =  _mkLinDott;
            
this ._mkOv  =  _mkOvDott;
            
this .drawRect  =  _mkRectDott;
        }
        
else   if  (x  -   1   >   0 ) {
            
this .drawLine  =  _mkLin2D;
            
this ._mkOv  =  _mkOv2D;
            
this .drawRect  =  _mkRect;
        }
        
else  {
            
this .drawLine  =  _mkLin;
            
this ._mkOv  =  _mkOv;
            
this .drawRect  =  _mkRect;
        }
    };

    
this .setPrintable  =   function (arg) {
        
this .printable  =  arg;
        
if  (jg_fast) {
            
this ._mkDiv  =  _mkDivIe;
            
this ._htmRpc  =  arg  ?  _htmPrtRpc : _htmRpc;
        }
        
else   this ._mkDiv  =  arg  ?  _mkDivPrt : _mkDiv;
    };

    
this .setFont  =   function (fam, sz, sty) {
        
this .ftFam  =  fam;
        
this .ftSz  =  sz;
        
this .ftSty  =  sty  ||  Font.PLAIN;
    };

    
this .drawPolyline  =   this .drawPolyLine  =   function (x, y) {
        
for  ( var  i  =  x.length  -   1 ; i; ) {
            
-- i;
            
this .drawLine(x[i], y[i], x[i  +   1 ], y[i  +   1 ]);
        }
    };

    
this .fillRect  =   function (x, y, w, h) {
        
this ._mkDiv(x, y, w, h);
    };

    
this .drawPolygon  =   function (x, y) {
        
this .drawPolyline(x, y);
        
this .drawLine(x[x.length  -   1 ], y[x.length  -   1 ], x[ 0 ], y[ 0 ]);
    };

    
this .drawEllipse  =   this .drawOval  =   function (x, y, w, h) {
        
this ._mkOv(x, y, w, h);
    };

    
this .fillEllipse  =   this .fillOval  =   function (left, top, w, h) {
        
var  a  =  w  >>   1 , b  =  h  >>   1 ,
        wod 
=  w  &   1 , hod  =  h  &   1 ,
        cx 
=  left  +  a, cy  =  top  +  b,
        x 
=   0 , y  =  b, oy  =  b,
        aa2 
=  (a  *  a)  <<   1 , aa4  =  aa2  <<   1 , bb2  =  (b  *  b)  <<   1 , bb4  =  bb2  <<   1 ,
        st 
=  (aa2  >>   1 *  ( 1   -  (b  <<   1 ))  +  bb2,
        tt 
=  (bb2  >>   1 -  aa2  *  ((b  <<   1 -   1 ),
        xl, dw, dh;
        
if  (w)  while  (y  >   0 ) {
            
if  (st  <   0 ) {
                st 
+=  bb2  *  ((x  <<   1 +   3 );
                tt 
+=  bb4  *  ( ++ x);
            }
            
else   if  (tt  <   0 ) {
                st 
+=  bb2  *  ((x  <<   1 +   3 -  aa4  *  (y  -   1 );
                xl 
=  cx  -  x;
                dw 
=  (x  <<   1 +  wod;
                tt 
+=  bb4  *  ( ++ x)  -  aa2  *  (((y -- <<   1 -   3 );
                dh 
=  oy  -  y;
                
this ._mkDiv(xl, cy  -  oy, dw, dh);
                
this ._mkDiv(xl, cy  +  y  +  hod, dw, dh);
                oy 
=  y;
            }
            
else  {
                tt 
-=  aa2  *  ((y  <<   1 -   3 );
                st 
-=  aa4  *  ( -- y);
            }
        }
        
this ._mkDiv(cx  -  a, cy  -  oy, w, (oy  <<   1 +  hod);
    };

    
this .fillArc  =   function (iL, iT, iW, iH, fAngA, fAngZ) {
        
var  a  =  iW  >>   1 , b  =  iH  >>   1 ,
        iOdds 
=  (iW  &   1 |  ((iH  &   1 <<   16 ),
        cx 
=  iL  +  a, cy  =  iT  +  b,
        x 
=   0 , y  =  b, ox  =  x, oy  =  y,
        aa2 
=  (a  *  a)  <<   1 , aa4  =  aa2  <<   1 , bb2  =  (b  *  b)  <<   1 , bb4  =  bb2  <<   1 ,
        st 
=  (aa2  >>   1 *  ( 1   -  (b  <<   1 ))  +  bb2,
        tt 
=  (bb2  >>   1 -  aa2  *  ((b  <<   1 -   1 ),
        
//  Vars for radial boundary lines
        xEndA, yEndA, xEndZ, yEndZ,
        iSects 
=  ( 1   <<  (Math.floor((fAngA  %=   360.0 /   180.0 <<   3 ))
                
|  ( 2   <<  (Math.floor((fAngZ  %=   360.0 /   180.0 <<   3 ))
                
|  ((fAngA  >=  fAngZ)  <<   16 ),
        aBndA 
=   new  Array(b  +   1 ), aBndZ  =   new  Array(b  +   1 );

        
//  Set up radial boundary lines
        fAngA  *=  Math.PI  /   180.0 ;
        fAngZ 
*=  Math.PI  /   180.0 ;
        xEndA 
=  cx  +  Math.round(a  *  Math.cos(fAngA));
        yEndA 
=  cy  +  Math.round( - *  Math.sin(fAngA));
        _mkLinVirt(aBndA, cx, cy, xEndA, yEndA);
        xEndZ 
=  cx  +  Math.round(a  *  Math.cos(fAngZ));
        yEndZ 
=  cy  +  Math.round( - *  Math.sin(fAngZ));
        _mkLinVirt(aBndZ, cx, cy, xEndZ, yEndZ);

        
while  (y  >   0 ) {
            
if  (st  <   0 //  Advance x
            {
                st 
+=  bb2  *  ((x  <<   1 +   3 );
                tt 
+=  bb4  *  ( ++ x);
            }
            
else   if  (tt  <   0 //  Advance x and y
            {
                st 
+=  bb2  *  ((x  <<   1 +   3 -  aa4  *  (y  -   1 );
                ox 
=  x;
                tt 
+=  bb4  *  ( ++ x)  -  aa2  *  (((y -- <<   1 -   3 );
                
this ._mkArcDiv(ox, y, oy, cx, cy, iOdds, aBndA, aBndZ, iSects);
                oy 
=  y;
            }
            
else   //  Advance y
            {
                tt 
-=  aa2  *  ((y  <<   1 -   3 );
                st 
-=  aa4  *  ( -- y);
                
if  (y  &&  (aBndA[y]  !=  aBndA[y  -   1 ||  aBndZ[y]  !=  aBndZ[y  -   1 ])) {
                    
this ._mkArcDiv(x, y, oy, cx, cy, iOdds, aBndA, aBndZ, iSects);
                    ox 
=  x;
                    oy 
=  y;
                }
            }
        }
        
this ._mkArcDiv(x,  0 , oy, cx, cy, iOdds, aBndA, aBndZ, iSects);
        
if  (iOdds  >>   16 //  Odd height
        {
            
if  (iSects  >>   16 //  Start-angle > end-angle
            {
                
var  xl  =  (yEndA  <=  cy  ||  yEndZ  >  cy)  ?  (cx  -  x) : cx;
                
this ._mkDiv(xl, cy, x  +  cx  -  xl  +  (iOdds  &   0xffff ),  1 );
            }
            
else   if  ((iSects  &   0x01 &&  yEndZ  >  cy)
                
this ._mkDiv(cx  -  x, cy, x,  1 );
        }
    };

    
/*  fillPolygon method, implemented by Matthieu Haller.
    This javascript function is an adaptation of the gdImageFilledPolygon for Walter Zorn lib.
    C source of GD 1.8.4 found at http://www.boutell.com/gd/

THANKS to Kirsten Schulz for the polygon fixes!

The intersection finding technique of this code could be improved
    by remembering the previous intertersection, and by using the slope.
    That could help to adjust intersections to produce a nice
    interior_extrema. 
*/
    
this .fillPolygon  =   function (array_x, array_y) {
        
var  i;
        
var  y;
        
var  miny, maxy;
        
var  x1, y1;
        
var  x2, y2;
        
var  ind1, ind2;
        
var  ints;

        
var  n  =  array_x.length;
        
if  ( ! n)  return ;

        miny 
=  array_y[ 0 ];
        maxy 
=  array_y[ 0 ];
        
for  (i  =   1 ; i  <  n; i ++ ) {
            
if  (array_y[i]  <  miny)
                miny 
=  array_y[i];

            
if  (array_y[i]  >  maxy)
                maxy 
=  array_y[i];
        }
        
for  (y  =  miny; y  <=  maxy; y ++ ) {
            
var  polyInts  =   new  Array();
            ints 
=   0 ;
            
for  (i  =   0 ; i  <  n; i ++ ) {
                
if  ( ! i) {
                    ind1 
=  n  -   1 ;
                    ind2 
=   0 ;
                }
                
else  {
                    ind1 
=  i  -   1 ;
                    ind2 
=  i;
                }
                y1 
=  array_y[ind1];
                y2 
=  array_y[ind2];
                
if  (y1  <  y2) {
                    x1 
=  array_x[ind1];
                    x2 
=  array_x[ind2];
                }
                
else   if  (y1  >  y2) {
                    y2 
=  array_y[ind1];
                    y1 
=  array_y[ind2];
                    x2 
=  array_x[ind1];
                    x1 
=  array_x[ind2];
                }
                
else   continue ;

                
//   Modified 11. 2. 2004 Walter Zorn
                 if  ((y  >=  y1)  &&  (y  <  y2))
                    polyInts[ints
++ =  Math.round((y  -  y1)  *  (x2  -  x1)  /  (y2  -  y1)  +  x1);

                
else   if  ((y  ==  maxy)  &&  (y  >  y1)  &&  (y  <=  y2))
                    polyInts[ints
++ =  Math.round((y  -  y1)  *  (x2  -  x1)  /  (y2  -  y1)  +  x1);
            }
            polyInts.sort(_CompInt);
            
for  (i  =   0 ; i  <  ints; i  +=   2 )
                
this ._mkDiv(polyInts[i], y, polyInts[i  +   1 -  polyInts[i]  +   1 1 );
        }
    };

    
this .drawString  =   function (txt, x, y) {
        
this .htm  +=   ' <div style="position:absolute;white-space:nowrap; '   +
            
' left: '   +  x  +   ' px; '   +
            
' top: '   +  y  +   ' px; '   +
            
' font-family: '   +   this .ftFam  +   ' ; '   +
            
' font-size: '   +   this .ftSz  +   ' ; '   +
            
' color: '   +   this .color  +   ' ; '   +   this .ftSty  +   ' "> '   +
            txt 
+
            
' <\/div> ' ;
    };

    
/*  drawStringRect() added by Rick Blommers.
    Allows to specify the size of the text rectangle and to align the
    text both horizontally (e.g. right) and vertically within that rectangle 
*/
    
this .drawStringRect  =   function (txt, x, y, width, halign) {
        
this .htm  +=   ' <div style="position:absolute;overflow:hidden; '   +
            
' left: '   +  x  +   ' px; '   +
            
' top: '   +  y  +   ' px; '   +
            
' width: '   +  width  +   ' px; '   +
            
' text-align: '   +  halign  +   ' ; '   +
            
' font-family: '   +   this .ftFam  +   ' ; '   +
            
' font-size: '   +   this .ftSz  +   ' ; '   +
            
' color: '   +   this .color  +   ' ; '   +   this .ftSty  +   ' "> '   +
            txt 
+
            
' <\/div> ' ;
    };

    
this .drawImage  =   function (imgSrc, x, y, w, h, a) {
        
this .htm  +=   ' <div style="position:absolute; '   +
            
' left: '   +  x  +   ' px; '   +
            
' top: '   +  y  +   ' px; '   +
        
//  w (width) and h (height) arguments are now optional.
         //  Added by Mahmut Keygubatli, 14.1.2008
            (w  ?  ( ' width: '   +  w  +   ' px; ' ) :  '' +
            (h 
?  ( ' height: '   +  h  +   ' px; ' ) :  '' +   ' "> '   +
            
' <img src=" '   +  imgSrc  +   ' " '   +  (w  ?  ( '  width=" '   +  w  +   ' " ' ) :  '' +  (h  ?  ( '  height=" '   +  h  +   ' " ' ) :  '' +  (a  ?  ( '   '   +  a) :  '' +   ' > '   +
            
' <\/div> ' ;
    };

    
this .clear  =   function () {
        
this .htm  =   "" ;
        
if  ( this .cnv)  this .cnv.innerHTML  =   "" ;
    };

    
this ._mkOvQds  =   function (cx, cy, x, y, w, h, wod, hod) {
        
var  xl  =  cx  -  x, xr  =  cx  +  x  +  wod  -  w, yt  =  cy  -  y, yb  =  cy  +  y  +  hod  -  h;
        
if  (xr  >  xl  +  w) {
            
this ._mkDiv(xr, yt, w, h);
            
this ._mkDiv(xr, yb, w, h);
        }
        
else
            w 
=  xr  -  xl  +  w;
        
this ._mkDiv(xl, yt, w, h);
        
this ._mkDiv(xl, yb, w, h);
    };

    
this ._mkArcDiv  =   function (x, y, oy, cx, cy, iOdds, aBndA, aBndZ, iSects) {
        
var  xrDef  =  cx  +  x  +  (iOdds  &   0xffff ), y2, h  =  oy  -  y, xl, xr, w;

        
if  ( ! h) h  =   1 ;
        x 
=  cx  -  x;

        
if  (iSects  &   0xff0000 //  Start-angle > end-angle
        {
            y2 
=  cy  -  y  -  h;
            
if  (iSects  &   0x00ff ) {
                
if  (iSects  &   0x02 ) {
                    xl 
=  Math.max(x, aBndZ[y]);
                    w 
=  xrDef  -  xl;
                    
if  (w  >   0 this ._mkDiv(xl, y2, w, h);
                }
                
if  (iSects  &   0x01 ) {
                    xr 
=  Math.min(xrDef, aBndA[y]);
                    w 
=  xr  -  x;
                    
if  (w  >   0 this ._mkDiv(x, y2, w, h);
                }
            }
            
else
                
this ._mkDiv(x, y2, xrDef  -  x, h);
            y2 
=  cy  +  y  +  (iOdds  >>   16 );
            
if  (iSects  &   0xff00 ) {
                
if  (iSects  &   0x0100 ) {
                    xl 
=  Math.max(x, aBndA[y]);
                    w 
=  xrDef  -  xl;
                    
if  (w  >   0 this ._mkDiv(xl, y2, w, h);
                }
                
if  (iSects  &   0x0200 ) {
                    xr 
=  Math.min(xrDef, aBndZ[y]);
                    w 
=  xr  -  x;
                    
if  (w  >   0 this ._mkDiv(x, y2, w, h);
                }
            }
            
else
                
this ._mkDiv(x, y2, xrDef  -  x, h);
        }
        
else  {
            
if  (iSects  &   0x00ff ) {
                
if  (iSects  &   0x02 )
                    xl 
=  Math.max(x, aBndZ[y]);
                
else
                    xl 
=  x;
                
if  (iSects  &   0x01 )
                    xr 
=  Math.min(xrDef, aBndA[y]);
                
else
                    xr 
=  xrDef;
                y2 
=  cy  -  y  -  h;
                w 
=  xr  -  xl;
                
if  (w  >   0 this ._mkDiv(xl, y2, w, h);
            }
            
if  (iSects  &   0xff00 ) {
                
if  (iSects  &   0x0100 )
                    xl 
=  Math.max(x, aBndA[y]);
                
else
                    xl 
=  x;
                
if  (iSects  &   0x0200 )
                    xr 
=  Math.min(xrDef, aBndZ[y]);
                
else
                    xr 
=  xrDef;
                y2 
=  cy  +  y  +  (iOdds  >>   16 );
                w 
=  xr  -  xl;
                
if  (w  >   0 this ._mkDiv(xl, y2, w, h);
            }
        }
    };

    
this .setStroke( 1 );
    
this .setFont( " verdana,geneva,helvetica,sans-serif " " 12px " , Font.PLAIN);
    
this .color  =   " #000000 " ;
    
this .htm  =   "" ;
    
this .wnd  =  wnd  ||  window;

    
if  ( ! jg_ok) _chkDHTM();
    
if  (jg_ok) {
        
if  (cnv) {
            
if  ( typeof  (cnv)  ==   " string " )
                
this .cont  =  document.all  ?  ( this .wnd.document.all[cnv]  ||   null )
                    : document.getElementById 
?  ( this .wnd.document.getElementById(cnv)  ||   null )
                    : 
null ;
            
else   if  (cnv  ==  window.document)
                
this .cont  =  document.getElementsByTagName( " body " )[ 0 ];
            
//  If cnv is a direct reference to a canvas DOM node
             //  (option suggested by Andreas Luleich)
             else   this .cont  =  cnv;
            
//  Create new canvas inside container DIV. Thus the drawing and clearing
             //  methods won't interfere with the container's inner html.
             //  Solution suggested by Vladimir.
             this .cnv  =   this .wnd.document.createElement( " div " );
            
this .cnv.style.fontSize  =   0 ;
            
this .cont.appendChild( this .cnv);
            
this .paint  =  jg_dom  ?  _pntCnvDom : _pntCnvIe;
        }
        
else
            
this .paint  =  _pntDoc;
    }
    
else
        
this .paint  =  _pntN;

    
this .setPrintable( false );
}

function  _mkLinVirt(aLin, x1, y1, x2, y2) {
    
var  dx  =  Math.abs(x2  -  x1), dy  =  Math.abs(y2  -  y1),
    x 
=  x1, y  =  y1,
    xIncr 
=  (x1  >  x2)  ?   - 1  :  1 ,
    yIncr 
=  (y1  >  y2)  ?   - 1  :  1 ,
    p,
    i 
=   0 ;
    
if  (dx  >=  dy) {
        
var  pr  =  dy  <<   1 ,
        pru 
=  pr  -  (dx  <<   1 );
        p 
=  pr  -  dx;
        
while  (dx  >   0 ) {
            
-- dx;
            
if  (p  >   0 )     //   Increment y
            {
                aLin[i
++ =  x;
                y 
+=  yIncr;
                p 
+=  pru;
            }
            
else  p  +=  pr;
            x 
+=  xIncr;
        }
    }
    
else  {
        
var  pr  =  dx  <<   1 ,
        pru 
=  pr  -  (dy  <<   1 );
        p 
=  pr  -  dy;
        
while  (dy  >   0 ) {
            
-- dy;
            y 
+=  yIncr;
            aLin[i
++ =  x;
            
if  (p  >   0 )     //   Increment x
            {
                x 
+=  xIncr;
                p 
+=  pru;
            }
            
else  p  +=  pr;
        }
    }
    
for  ( var  len  =  aLin.length, i  =  len  -  i; i; )
        aLin[len 
-  (i -- )]  =  x;
};

function  _CompInt(x, y) {
    
return  (x  -  y);
}

 

 CSS样式 

 

ExpandedBlockStart.gif 代码
<style type="text/css">
        .mybox
        
{
            position
:  relative ;
            left
:  800px ;
            top
:  20px ;
        
}
        
        #header
{

 background-color 
: Red  ;
    width
: 955px ;
    height
: 223px ;
}
#content
{
    background-color 
: Green  ;
    width
: 955px ;
    height
: 223px ;
   background-repeat
: repeat-x ;
}



    </style>

JS脚本暂不公开

Html

ExpandedBlockStart.gif 代码
< body onload = " draw() " >
    
< center >
   

 
    
< div style  = " top:0px "  id = " header " >
        
< div id = " test "  onmousemove = " MouseMove(this) "  onmousedown = " startDrag(this) "  onmouseup = " endDrag(this) "
            style
= " border: 1px solid #000000; background: #FCFCFC; width: 200px; height: 200px;
            position: absolute; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='Images/Snap3.bmp', sizingMethod='scale');
            top: 15px; left: 107px;
" >
            
<%-- 长高为300时 --%>
            
<%--    < div id = " div2 "  style = " position: absolute;  width: 40px;  top: 250px;  left=10px;  height: 150px;  z-index: 1;  background-color: " >
              
< input type = " text "  id = " nTxt "  value = " 40 "  style = " width: 20px; background: red " >
            
< / div>--%>
             <%-- 长高为200时 --%>
            
< div id = " div2 "  style = " position: absolute; width: 40px; top: 170px; left=10px; height: 150px; z-index: 1; background-color:  " >
                
< input type = " text "  id = " nTxt "  value = " 40 "  style = " width: 20px; background: red " >
            
< / div>
         < / div>
        
        
        
< div id = " Div1 "  onmousemove = " MouseMove(this) "  onmousedown = " startDrag(this) "  onmouseup = " endDrag(this) "
            style
= " border: 1px solid #000000; background: #FCFCFC; width: 200px; height: 200px;
            position: absolute; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='Images/Snap3.bmp', sizingMethod='scale');
            top: 15px; left: 307px;
" >
            
<%-- 长高为200时 --%>
            
< div id = " div3 "  style = " position: absolute; width: 40px; top: 170px; left=10px; height: 150px;
                left: 104px;
" >
                
< input type = " text "  id = " Text1 "  value = " 40 "  style = " width: 20px; background: red " >
            
< / div>
         < / div>
        
        
        
< div id = " Div4 "  onmousemove = " MouseMove(this) "  onmousedown = " startDrag(this) "  onmouseup = " endDrag(this) "
            style
= " border: 1px solid #000000; background: #FCFCFC; width: 200px; height: 200px;
            position: absolute; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='Images/Snap3.bmp', sizingMethod='scale');
            top: 15px; left: 507px;
" >
            
<%-- 长高为200时 --%>
            
< div id = " div5 "  style = " position: absolute; width: 40px; top: 170px; left=10px; height: 150px;
                z-index: 1; background-color: 
" >
                
< input type = " text "  id = " Text2 "  value = " 40 "  style = " width: 20px; background: red " >
            
< / div>
         < / div>


 
< div id = " Div6 "  onmousemove = " MouseMove(this) "  onmousedown = " startDrag(this) "  onmouseup = " endDrag(this) "
            style
= " border: 1px solid #000000; background: #FCFCFC; width: 200px; height: 200px;
            position: absolute; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='Images/Snap3.bmp', sizingMethod='scale');
            top: 15px; left: 707px;
" >
            
<%-- 长高为200时 --%>
            
< div id = " div7 "  style = " position: absolute; width: 40px; top: 170px; left=10px; height: 150px;
                z-index: 1; background-color: 
" >
                
< input type = " text "  id = " Text3 "  value = " 40 "  style = " width: 20px; background: red " >
            
< / div>
         < / div>
         < / div> 
          < / center>
     < div style = " position: absolute; width: 40px; top: 500px; left=10px;   " >
    
< input name = " txt "  type = " text "  width = " 40 "  value = " 40 "   / >
     < input type = " button "  value = " 设置 "  onclick = " draw() "   / >
     < input type = " button "  value = " 清除 "  onclick = " clearLine() "   / >
    
    
< / div>
< / body>


效果图

 

 目前只完成了第一个。方法一次类推就可以了。由于各方面的原因暂不公开部分JS脚本。望大家谅解。

 

 

 

 


 

转载于:https://www.cnblogs.com/liaoqiang/archive/2011/01/08/1930758.html

这篇关于管理驾驶舱 之仪表盘的设计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/608398

相关文章

Redis实现RBAC权限管理

《Redis实现RBAC权限管理》本文主要介绍了Redis实现RBAC权限管理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1. 什么是 RBAC?2. 为什么使用 Redis 实现 RBAC?3. 设计 RBAC 数据结构

mac安装nvm(node.js)多版本管理实践步骤

《mac安装nvm(node.js)多版本管理实践步骤》:本文主要介绍mac安装nvm(node.js)多版本管理的相关资料,NVM是一个用于管理多个Node.js版本的命令行工具,它允许开发者在... 目录NVM功能简介MAC安装实践一、下载nvm二、安装nvm三、安装node.js总结NVM功能简介N

SpringBoot中使用 ThreadLocal 进行多线程上下文管理及注意事项小结

《SpringBoot中使用ThreadLocal进行多线程上下文管理及注意事项小结》本文详细介绍了ThreadLocal的原理、使用场景和示例代码,并在SpringBoot中使用ThreadLo... 目录前言技术积累1.什么是 ThreadLocal2. ThreadLocal 的原理2.1 线程隔离2

Linux内存泄露的原因排查和解决方案(内存管理方法)

《Linux内存泄露的原因排查和解决方案(内存管理方法)》文章主要介绍了运维团队在Linux处理LB服务内存暴涨、内存报警问题的过程,从发现问题、排查原因到制定解决方案,并从中学习了Linux内存管理... 目录一、问题二、排查过程三、解决方案四、内存管理方法1)linux内存寻址2)Linux分页机制3)

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

Python中的可视化设计与UI界面实现

《Python中的可视化设计与UI界面实现》本文介绍了如何使用Python创建用户界面(UI),包括使用Tkinter、PyQt、Kivy等库进行基本窗口、动态图表和动画效果的实现,通过示例代码,展示... 目录从像素到界面:python带你玩转UI设计示例:使用Tkinter创建一个简单的窗口绘图魔法:用

SpringBoot使用minio进行文件管理的流程步骤

《SpringBoot使用minio进行文件管理的流程步骤》MinIO是一个高性能的对象存储系统,兼容AmazonS3API,该软件设计用于处理非结构化数据,如图片、视频、日志文件以及备份数据等,本文... 目录一、拉取minio镜像二、创建配置文件和上传文件的目录三、启动容器四、浏览器登录 minio五、

IDEA中的Kafka管理神器详解

《IDEA中的Kafka管理神器详解》这款基于IDEA插件实现的Kafka管理工具,能够在本地IDE环境中直接运行,简化了设置流程,为开发者提供了更加紧密集成、高效且直观的Kafka操作体验... 目录免安装:IDEA中的Kafka管理神器!简介安装必要的插件创建 Kafka 连接第一步:创建连接第二步:选

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖