Цитата:
Сообщение от 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
Ну прям в трубочку свернуть и засунуть по назначению.
|
- все же перебор.