多边形外角和的验证

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

//注意:绘制区(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;
}
原文地址:https://www.cnblogs.com/ddw1997/p/1544695.html