如题。
实现方法很多。这里利用旋转变换来实现。
假设已知等边三角形的两点A、B的坐标,求第三点C的坐标。
连接点AB得到线段AB,以A为圆心,将AB旋转60度,B所在的位置即是等边三角形的第3点C。其实应该存在两个点,AB旋转60度或-60度。
效果如下,可拖动绿色圆点,观察三角形的变化。
舞台上放了4个影片剪辑:pa、pb、pc、pd,代码直接写在帧上。
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | pa.buttonMode=pb.buttonMode= true ; var curTar:Sprite; drag(pa); drag(pb); update(); function drag(tar:Sprite): void { tar.addEventListener(MouseEvent.MOUSE_DOWN,mouseDownHandler); } function mouseDownHandler(e:MouseEvent): void { curTar=e.currentTarget as Sprite; curTar.startDrag(); stage.addEventListener(MouseEvent.MOUSE_UP,mouseUpHandler); stage.addEventListener(MouseEvent.MOUSE_MOVE,mouseMoveHandler); } function mouseUpHandler(e:MouseEvent): void { stage.removeEventListener(MouseEvent.MOUSE_UP,mouseUpHandler); stage.removeEventListener(MouseEvent.MOUSE_MOVE,mouseMoveHandler); curTar.stopDrag(); curTar= null ; } function mouseMoveHandler(e:MouseEvent): void { update(); } function update(): void { var p: Object ={x:pb.x-pa.x, y:pb.y-pa.y}; p=rotate(p,Math.PI* 60 / 180 ); pc.x=pa.x+p.x; pc.y=pa.y+p.y; p={x:pb.x-pa.x, y:pb.y-pa.y}; p=rotate(p,-Math.PI* 60 / 180 ); pd.x=pa.x+p.x; pd.y=pa.y+p.y; graphics.clear(); graphics.lineStyle( 1 , 0x000000 ); graphics.moveTo(pa.x,pa.y); graphics.lineTo(pb.x,pb.y); graphics.lineTo(pc.x,pc.y); graphics.lineTo(pa.x,pa.y); graphics.lineTo(pd.x,pd.y); graphics.lineTo(pb.x,pb.y); } function rotate(p: Object ,q: Number ): Object { var o: Object ={x: 0 ,y: 0 } var sin: Number =Math.sin(q); var cos: Number =Math.cos(q); o.x=cos*p.x+sin*p.y; o.y=-sin*p.x+cos*p.y; return o; } |
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。