Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Плавная кривая (http://www.flasher.ru/forum/showthread.php?t=119045)

enepx 10.12.2008 20:39

Плавная кривая
 
Привет,

как можно программно нарисовать плавную кривую (траекторию, по ней надо сделать анимацию) только по точкам.
В bezier.ru надо вычислять координаты контрольной точки, а мне надо что бы только по ключевым точкам.

Не подскажите как? плиз..
Спасибо!

silin 10.12.2008 22:08

есть такое "шаманское" решение, но где-то и его достаточно
Код 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го порядка здесь есть

Alex Lexcuk 11.12.2008 03:18

Движение по кривым Безье
http://www.dnadillo.dn.ua/flex/Crooked-Motion.html

ramshteks 11.12.2008 12:10

кроме безье и шаманских решение есть вполне научные понятия такие как сплайны эрмита и б-сплайны. они вам могу помоч. безье не панацея


Часовой пояс GMT +4, время: 19:31.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.