Показать сообщение отдельно
Старый 30.03.2002, 12:13
Aib вне форума Посмотреть профиль Отправить личное сообщение для Aib Посетить домашнюю страницу Aib Найти все сообщения от Aib
  № 8  
Aib

Регистрация: Oct 2001
Адрес: Россия, Казань
Сообщений: 270
Из параболы окружность не сделаешь, только приблизительно.
Ловите метод, риует эллипс (или его часть) под заданным углом. Точность - 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;
__________________
The war does not determine who is right. Only who is left.