多边形外角和的验证:以前做的一个效果,代码很烂,不想改了,记录一下
//注意:绘制区(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(0xffccff, 0.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;
}
//有一个类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(0xffccff, 0.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;
}