Показать сообщение отдельно
Старый 10.12.2008, 22:08
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 2  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
есть такое "шаманское" решение, но где-то и его достаточно
Код AS3:
var test:Shape = new Shape();
addChild(test);
var points:Array=[new Point(20,20),new Point(50,30),new Point(120,10),new Point(50,150)];
test.graphics.lineStyle(1, 0xFF0000);
draw(test.graphics, points);
 
 
function draw(gr:Graphics, points:Array):void {
	var k:Number=0.382;//вовсе не обязательно, подбирается на глаз
	var i:int;
	var p:Point = Point.interpolate(new Point((3 * points[1].x - points[2].x)/2,(3*points[1].y-points[2].y)/2), new Point((points[0].x + points[1].x)/2,(points[0].y+points[1].y)/2), k);
 
	var cntrArr:Array=[p];
 
	for (i = 1; i < points.length - 1; i++) {
		var dist:Number=k*Point.distance(points[i],points[i+1]);
		var dir:Number=Math.atan2(points[i].y-cntrArr[i-1].y,points[i].x-cntrArr[i-1].x);
		cntrArr.push(new Point(points[i].x + dist * Math.cos(dir), points[i].y + dist * Math.sin(dir)));
	}
 
	gr.moveTo(points[0].x,points[0].y);
	for (i = 0; i < cntrArr.length; i++) {
		gr.curveTo(cntrArr[i].x, cntrArr[i].y, points[i + 1].x, points[i + 1].y);
	}
 
}
ps аналогичное решение для кривой 3го порядка здесь есть


Последний раз редактировалось silin; 10.12.2008 в 22:10.