Показать сообщение отдельно
Старый 22.11.2012, 22:37
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 5  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Код AS3:
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