Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 10.12.2008, 20:39
enepx вне форума Посмотреть профиль Отправить личное сообщение для enepx Посетить домашнюю страницу enepx Найти все сообщения от enepx
  № 1  
Ответить с цитированием
enepx
 
Аватар для enepx

Регистрация: Aug 2006
Адрес: Мюнхен
Сообщений: 509
Отправить сообщение для enepx с помощью ICQ Отправить сообщение для enepx с помощью Yahoo Отправить сообщение для enepx с помощью Skype™
По умолчанию Плавная кривая

Привет,

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

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

Старый 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.
Старый 11.12.2008, 03:18
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 3  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
Движение по кривым Безье
http://www.dnadillo.dn.ua/flex/Crooked-Motion.html

Старый 11.12.2008, 12:10
ramshteks вне форума Посмотреть профиль Отправить личное сообщение для ramshteks Найти все сообщения от ramshteks
  № 4  
Ответить с цитированием
ramshteks
 
Аватар для ramshteks

Регистрация: Jul 2007
Сообщений: 805
Отправить сообщение для ramshteks с помощью ICQ Отправить сообщение для ramshteks с помощью Skype™
кроме безье и шаманских решение есть вполне научные понятия такие как сплайны эрмита и б-сплайны. они вам могу помоч. безье не панацея

Создать новую тему Ответ Часовой пояс GMT +4, время: 18:44.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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