![]() |
|
||||||||||
|
|||||
|
блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
|
import flash.display.Graphics; import flash.geom.Point; import flash.events.MouseEvent; function drawTrapezium(drawTo:Graphics, points:Array, cornerRaduis:Number = 0):void { // top line var angle_0_1:Number = Math.atan2(points[1].y - points[0].y,points[1].x - points[0].x); var x1:Number = points[0].x + Math.cos(angle_0_1) * cornerRaduis; var y1:Number = points[0].y + Math.sin(angle_0_1) * cornerRaduis; var angle_1_0:Number = Math.atan2(points[0].y - points[1].y,points[0].x - points[1].x); var x2:Number = points[1].x + Math.cos(angle_1_0) * cornerRaduis; var y2:Number = points[1].y + Math.sin(angle_1_0) * cornerRaduis; // drawTo.moveTo(x1, y1); drawTo.lineTo(x2, y2); // right line var angle_1_2:Number = Math.atan2(points[2].y - points[1].y,points[2].x - points[1].x); var x3:Number = points[1].x + Math.cos(angle_1_2) * cornerRaduis; var y3:Number = points[1].y + Math.sin(angle_1_2) * cornerRaduis; var angle_2_1:Number = Math.atan2(points[1].y - points[2].y,points[1].x - points[2].x); var x4:Number = points[2].x + Math.cos(angle_2_1) * cornerRaduis; var y4:Number = points[2].y + Math.sin(angle_2_1) * cornerRaduis; // drawTo.curveTo(points[1].x, points[1].y, x3,y3); drawTo.lineTo(x4, y4); // bottom line var angle_2_3:Number = Math.atan2(points[3].y - points[2].y,points[3].x - points[2].x); var x5:Number = points[2].x + Math.cos(angle_2_3) * cornerRaduis; var y5:Number = points[2].y + Math.sin(angle_2_3) * cornerRaduis; var angle_3_2:Number = Math.atan2(points[2].y - points[3].y,points[2].x - points[3].x); var x6:Number = points[3].x + Math.cos(angle_3_2) * cornerRaduis; var y6:Number = points[3].y + Math.sin(angle_3_2) * cornerRaduis; // drawTo.curveTo(points[2].x, points[2].y, x5,y5); drawTo.lineTo(x6, y6); // left line var angle_3_4:Number = Math.atan2(points[0].y - points[3].y,points[0].x - points[3].x); var x7:Number = points[3].x + Math.cos(angle_3_4) * cornerRaduis; var y7:Number = points[3].y + Math.sin(angle_3_4) * cornerRaduis; var angle_4_3:Number = Math.atan2(points[3].y - points[0].y,points[3].x - points[0].x); var x8:Number = points[0].x + Math.cos(angle_4_3) * cornerRaduis; var y8:Number = points[0].y + Math.sin(angle_4_3) * cornerRaduis; // drawTo.curveTo(points[3].x, points[3].y, x7,y7); drawTo.lineTo(x8, y8); drawTo.curveTo(points[0].x, points[0].y, x1,y1); } var points:Array = [new Point(20,20),new Point(200,30),new Point(200,250),new Point(20,240)]; stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler); function mouseMoveHandler(e:MouseEvent):void{ this.graphics.clear(); this.graphics.lineStyle(1); points[2].x = stage.mouseX; points[2].y = stage.mouseY; drawTrapezium(this.graphics, points, 20); } mouseMoveHandler(null) Добавлено через 13 минут Я не хотел выносить основные методы в отдельную вспомогательную функцию, но, в принципе, с таким же успехом можно сделать рисование n-угольника со скругленными краями.
__________________
hauts.ru |
![]() |
Часовой пояс GMT +4, время: 18:30. |
|
|
« Предыдущая тема | Следующая тема » |
| Теги |
| трапеция graphics |
|
|