zoukankan      html  css  js  c++  java
  • 多边形外角和的验证

    多边形外角和的验证:以前做的一个效果,代码很烂,不想改了,记录一下

    //注意:绘制区(huiziqu)的坐标为(0,0)不能改,否则所有坐标都要改
    //
    有一个类Pen.as在同一个文件夹下.ddw1997___2008.4.13
    //
    ============================初始化===============
    var mymousemp3:Sound= new mousemp3;
    var sc:SoundChannel=new SoundChannel();//SoundChannel类(对象)控制声音(对象)
    var old_x:Number;
    var old_y:Number;
    var bian:Sprite;
    var P_point:Array;
    var Q_point:Array;
    var R_point:Array;
    var Distance:Array;
    var RectangleObject:Rectangle=new Rectangle(huiziqu.x,huiziqu.y,huiziqu.width,huiziqu.height);
    note.text
    ="请你先单击开始按钮";
    start_btn.visible
    =true;
    del_btn.visible
    =false;
    show_btn.visible
    =false;
    del_btn.x
    =show_btn.x=start_btn.x;
    del_btn.y
    =show_btn.y=start_btn.y;
    start_btn.addEventListener(MouseEvent.MOUSE_DOWN,startDraw);
    //=======================================================================
    function startDraw(e:MouseEvent):void {
        P_point
    =new Array();
        Q_point
    =new Array();
        R_point
    =new Array();
        Distance
    =new Array();
        huiziqu.duobianxing
    =new Sprite();
        huiziqu.waijiao
    =new Sprite();
        addChild(huiziqu.duobianxing);
        addChild(huiziqu.waijiao);
        start_btn.visible
    =false;
        note.text
    ="请注意:把鼠标移到绘图区单击画多边形";
        start_btn.removeEventListener(MouseEvent.MOUSE_DOWN,startDraw);
        stage.addEventListener(MouseEvent.MOUSE_DOWN,Down_Draw);

    }
    function Down_Draw(e:MouseEvent):void {
        
    if (RectangleObject.contains(mouseX,mouseY)) {
            stage.addEventListener(MouseEvent.MOUSE_MOVE,Move_Draw);
            
    var P:Point=new Point(mouseX,mouseY);
            
    if (P_point.length!=0) {
                
    var start_point:Point=new Point(P_point[0].x,P_point[0].y);
                
    var distance:Number = Point.distance(start_point, P);
                
    if (distance>5) {
                    P_point.push(P);
                    sc
    =mymousemp3.play();
                    
    var mydingdianA:dingdian=new dingdian();
                    huiziqu.duobianxing.addChild(mydingdianA);
                    old_x
    =mydingdianA.x=mouseX;
                    old_y
    =mydingdianA.y=mouseY;
                    bian
    =new Sprite();
                } 
    else {
                    
    if (P_point.length>2) {
                        show_btn.visible
    =true;
                        show_btn.addEventListener(MouseEvent.MOUSE_DOWN,show_Draw);
                        stage.removeEventListener(MouseEvent.MOUSE_DOWN,Down_Draw);
                        stage.removeEventListener(MouseEvent.MOUSE_MOVE,Move_Draw);
                        note.text
    =P_point.length+"边形";
                        bian.graphics.clear();
                        bian.graphics.lineStyle(
    1,0x000000);
                        bian.graphics.moveTo(old_x,old_y);
                        bian.graphics.lineTo(P_point[
    0].x,P_point[0].y);
                        huiziqu.duobianxing.addChild(bian);
                    }
                }
            } 
    else {
                P_point.push(P);
                sc
    =mymousemp3.play();
                
    var mydingdianB:dingdian=new dingdian();
                huiziqu.duobianxing.addChild(mydingdianB);
                old_x
    =mydingdianB.x=mouseX;
                old_y
    =mydingdianB.y=mouseY;
                bian
    =new Sprite();
            }
        }
    }

    function Move_Draw(e:MouseEvent):void {
        
    if (RectangleObject.contains(mouseX,mouseY)) {
            note.text
    ="鼠标单击→鼠标移动→画多边形";
            bian.graphics.clear();
            bian.graphics.lineStyle(
    1,0x000000);
            bian.graphics.moveTo(old_x,old_y);
            bian.graphics.lineTo(mouseX,mouseY);
            huiziqu.duobianxing.addChild(bian);
        } 
    else {
            note.text
    ="请注意:鼠标不能移到绘图区外!!!";
        }
    }

    function show_Draw(e:MouseEvent):void {
        P_point.push(P_point[
    0]);
        
    //==============每边中点集合====================
        for (var i=0; i<P_point.length-1; i++) {
            
    var Q:Point=Point.interpolate(P_point[i],P_point[i+1],0.5);
            Q_point.push(Q);
            Distance.push(Point.distance(P_point[i],P_point[i
    +1]));
        }
        
    //==============延长线上点集合====================
        for (var j=0; j<Q_point.length; j++) {
            
    var R:Point;
            
    if (j==0) {
                R
    =Point.interpolate(P_point[0],P_point[Q_point.length-1],(Distance[0]*0.5+Distance[Q_point.length-1])/Distance[Q_point.length-1]);
            } else {
                R
    =Point.interpolate(P_point[j],P_point[j-1],(Distance[j]*0.5+Distance[j-1])/Distance[j-1]);
            }
            R_point.push(R);
        }
        
    //==============每边大小重排====================
        Distance.sort(Array.NUMERIC);
        
    for (var k=0; k<Q_point.length; k++) {
            
    var Waij_R:Number;
            
    var Waij_Q:Number;
            
    var Waij_RPQ:Number;
            
    var waijiao_AB:Sprite=new Sprite();
            huiziqu.waijiao.addChild(waijiao_AB);
            
    var waijiao_A:Sprite=new Sprite();
            
    var waijiao_B:Sprite=new Sprite();
            waijiao_AB.addChild(waijiao_A);
            waijiao_AB.addChild(waijiao_B);
            waijiao_AB.addEventListener(MouseEvent.MOUSE_DOWN,start_Drag);
            
    //==================画扇形=================================
            var Wai_sx:Pen=new Pen(waijiao_A.graphics);
            Wai_sx.lineStyle(
    1,0x0033ff);
            Wai_sx.beginFill(
    0xffccff0.5);
            
    if (R_point[k].y<P_point[k].y) {
                Waij_R
    =-180*(Math.atan((R_point[k].x-P_point[k].x)/(R_point[k].y-P_point[k].y)))/Math.PI-90;
            } 
    else {
                Waij_R
    =90-180*(Math.atan((R_point[k].x-P_point[k].x)/(R_point[k].y-P_point[k].y)))/Math.PI;
            }
            
    if (Q_point[k].y<P_point[k].y) {
                Waij_Q
    =-180*(Math.atan((Q_point[k].x-P_point[k].x)/(Q_point[k].y-P_point[k].y)))/Math.PI-90;
            } 
    else {
                Waij_Q
    =90-180*(Math.atan((Q_point[k].x-P_point[k].x)/(Q_point[k].y-P_point[k].y)))/Math.PI;
            }
            Waij_RPQ
    =Waij_R-Waij_Q;
            
    if (Math.abs(Waij_RPQ)>180) {
                
    if (Waij_RPQ<0) {
                    Waij_RPQ 
    = 360+Waij_RPQ;
                } 
    else {
                    Waij_RPQ 
    = Waij_RPQ-360;
                }
            }
            Wai_sx.drawArc(P_point[k].x,P_point[k].y,
    0.25*Distance[0],Waij_RPQ,Waij_Q,true);
            Wai_sx.endFill();
            
    //=============================画外角的边==================================================
            var Wai_xx:Pen=new Pen(waijiao_B.graphics);
            Wai_xx.lineStyle(
    1,0x0033ff);
            Wai_xx.moveTo(R_point[k].x,R_point[k].y);
            Wai_xx.lineTo(P_point[k].x,P_point[k].y);
            Wai_xx.lineTo(Q_point[k].x,Q_point[k].y);
        }
        
    //==============删除按钮出现====================
        note.text = "用鼠标拖动外角验证外角和";
        del_btn.visible
    =true;
        show_btn.visible
    =false;
        del_btn.addEventListener(MouseEvent.MOUSE_DOWN,del_Draw);
        show_btn.removeEventListener(MouseEvent.MOUSE_DOWN,show_Draw);
    }
    function start_Drag(e:MouseEvent):void {
        e.currentTarget.startDrag();
        e.currentTarget.addEventListener(MouseEvent.MOUSE_UP,stop_Drag);
    }
    function stop_Drag(e:MouseEvent):void {
        e.currentTarget.stopDrag();    
        e.currentTarget.removeEventListener(MouseEvent.MOUSE_UP,stop_Drag);
    }
    function del_Draw(e:MouseEvent):void {
        note.text
    ="请你先单击开始按钮";
        start_btn.visible
    =true;
        del_btn.visible
    =false;
        start_btn.addEventListener(MouseEvent.MOUSE_DOWN,startDraw);
        del_btn.removeEventListener(MouseEvent.MOUSE_DOWN,del_Draw);
        removeChild(huiziqu.duobianxing);
        removeChild(huiziqu.waijiao);
        
    delete huiziqu.waijiao;
        
    delete huiziqu.duobianxing;
    }
  • 相关阅读:
    Redis Info详解
    ABAP常用事务码
    ABAP区别CLEAR、REFRESH、FREE
    virtualbox安装增强功能时【未能加载虚拟光盘】
    https://www.safaribooksonline.com/home/
    图文教程教您蓝底照片更换成白底和红底的方法
    URAL1495. One-two, One-two 2(dp)
    URAL1513. Lemon Tale(dp)
    URAL1900 Brainwashing Device(dp)
    Codeforces Round #228 (Div. 1)B
  • 原文地址:https://www.cnblogs.com/ddw1997/p/1544695.html
Copyright © 2011-2022 走看看