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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 11.09.2008, 15:28
incoob вне форума Посмотреть профиль Отправить личное сообщение для incoob Найти все сообщения от incoob
  № 10  
Ответить с цитированием
incoob

Регистрация: Mar 2008
Сообщений: 215
Цитата:
Сообщение от Iv Посмотреть сообщение
Офигительно полезный класс.
Полностью с вами согласен!
Конечно, этот класс не является работоспособным примером, но если его немного поправить, то получим
Код:
package 
{
	import flash.display.Graphics;
	import flash.geom.Point;
	
	public class CubicBezier
	{
		public static function cBez(g:Graphics, prevX:Number, prevY:Number, control1X:Number, 
			control1Y:Number, control2X:Number, control2Y:Number, x:Number, y:Number):void
		{
			var qPts:QuadraticPoints
			if (prevX && control1X && control2X && x)
			{
				var p1:Point = new Point(prevX, prevY);
				var p2:Point = new Point(x, y);
				var c1:Point = new Point(control1X, control1Y);		
				var c2:Point = new Point(control2X, control2Y);
			
				// calculates the useful base points
				var PA:Point = Point.interpolate(c1, p1, 3/4);
				var PB:Point = Point.interpolate(c2, p2, 3/4);
	
				// get 1/16 of the [p2, p1] segment
				var dx:Number = (p2.x - p1.x) / 16;
				var dy:Number = (p2.y - p1.y) / 16;

				qPts = new QuadraticPoints;
		
				// calculates control point 1
				qPts.control1 = Point.interpolate(c1, p1, 3/8);
	
				// calculates control point 2
				qPts.control2 = Point.interpolate(PB, PA, 3/8);
				qPts.control2.x -= dx;
				qPts.control2.y -= dy;
	
				// calculates control point 3
				qPts.control3 = Point.interpolate(PA, PB, 3/8);
				qPts.control3.x += dx;
				qPts.control3.y += dy;
	
				// calculates control point 4
				qPts.control4 = Point.interpolate(c2, p2, 3/8);
	
				// calculates the 3 anchor points
				qPts.anchor1 = Point.interpolate(qPts.control1, qPts.control2, 0.5); 
				qPts.anchor2 = Point.interpolate(PA, PB, 0.5); 
				qPts.anchor3 = Point.interpolate(qPts.control3, qPts.control4, 0.5); 
	
				// the 4th anchor point is p2
				qPts.anchor4 = p2;
				
				g.curveTo(qPts.control1.x, qPts.control1.y, qPts.anchor1.x, qPts.anchor1.y);
				g.curveTo(qPts.control2.x, qPts.control2.y, qPts.anchor2.x, qPts.anchor2.y);
				g.curveTo(qPts.control3.x, qPts.control3.y, qPts.anchor3.x, qPts.anchor3.y);
				g.curveTo(qPts.control4.x, qPts.control4.y, qPts.anchor4.x, qPts.anchor4.y);
			}

		}
	}
}
import flash.geom.Point;

class QuadraticPoints
{
	public var control1:Point;
	public var anchor1:Point;
	public var control2:Point;
	public var anchor2:Point;
	public var control3:Point;
	public var anchor3:Point;
	public var control4:Point;
	public var anchor4:Point;
	
	/**
     * Constructor.
     */
    public function QuadraticPoints()
    {
    }
}
,что является значительно более приятной реализацией рисования, чем все вышепредставленные.

Так что
Цитата:
Сообщение от Iv Посмотреть сообщение
Ну прям в трубочку свернуть и засунуть по назначению.
- все же перебор.

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

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

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


 


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


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