Из параболы окружность не сделаешь, только приблизительно.
Ловите метод, риует эллипс (или его часть) под заданным углом. Точность - 927/1000.

Код:
function Ellipse(CenterX, CenterY, ARadius, BRadius, ARadAngle){
if (arguments.length == 7){
if (arguments[6] >= arguments[5]){
var StartAngle = arguments[5];
var EndAngle = arguments[6];
} else {
var StartAngle = arguments[6];
var EndAngle = arguments[5];
};
var div = Math.ceil((EndAngle-StartAngle)/30)
var delta = (EndAngle-StartAngle)/div;
} else {
var StartAngle = 0;
var div = 12;
var delta = 30;
};
with (Math){
var ABRadius = ARadius/cos(PI*delta/360);
var BBRadius = BRadius/cos(PI*delta/360);
var te = round(ARadius*cos(PI*StartAngle/180)*10)/10;
var Y1 = round(BRadius*sin(PI*StartAngle/180)*10)/10;
var X1 = CenterX+te*cos(PI*ARadAngle/180)-Y1*sin(PI*ARadAngle/180);
Y1 = CenterY-te*sin(PI*ARadAngle/180)-Y1*cos(PI*ARadAngle/180);
var X2;
var Y2;
this.moveTo (X1, Y1);
for (var i = 1; i<=div; i++){
te = round(ABRadius*cos(PI*(StartAngle+delta*(i-0.5))/180)*10)/10;
Y1 = round(BBRadius*sin(PI*(StartAngle+delta*(i-0.5))/180)*10)/10;
X1 = CenterX+te*cos(PI*ARadAngle/180)-Y1*sin(PI*ARadAngle/180);
Y1 = CenterY-te*sin(PI*ARadAngle/180)-Y1*cos(PI*ARadAngle/180);
te = round(ARadius*cos(PI*(StartAngle+delta*i)/180)*10)/10;
Y2 = round(BRadius*sin(PI*(StartAngle+delta*i)/180)*10)/10;
X2 = CenterX+te*cos(PI*ARadAngle/180)-Y2*sin(PI*ARadAngle/180);
Y2 = CenterY-te*sin(PI*ARadAngle/180)-Y2*cos(PI*ARadAngle/180);
this.curveTo (X1, Y1, X2, Y2);
};
};
return this;
}
Object.prototype.ellipseTo = Ellipse;