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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 13.02.2008, 17:22
alrusdi вне форума Посмотреть профиль Отправить личное сообщение для alrusdi Найти все сообщения от alrusdi
  № 1  
Ответить с цитированием
alrusdi

Регистрация: Nov 2005
Сообщений: 75
По умолчанию Как нарисовать аппроксимацию дуги?

Даны три точки - центр окружности и две точки на окружности
Как построить дугу отрезками двигаясь против часовой стрелки от одной точки к другой (сделать нужно например 10 шагов)?

Разумеется програмно, на AS2 или 1
Радиус и так понятно как найти.
Угол между двумя точками я тоже нашел. Более того, даже дуга строится, но блин не там где ожидается. Может кто-то поможет?

ЗЫ curveTo не годится - по сути просто эти 10 точек нужно найти математически
Здесь был - что такое поиск в курсе
http://www.flasher.ru/forum/showthre...t=%E4%F3%E3%E0
http://www.flasher.ru/forum/showthre...t=%E4%F3%E3%E0
http://www.flasher.ru/forum/showthre...t=%E4%F3%E3%E0


Последний раз редактировалось alrusdi; 13.02.2008 в 17:26.
Старый 13.02.2008, 18:11
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 2  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
{x0, y0} - координаты центра
{x1, y1} и {x2, y2} - координаты точек на окружности
Код:
var a1:Number = Math.atan2 (y2 - y0, x2 - x0) * 180 / Math.PI;
var a2:Number = Math.atan2 (y1 - y0, x1 - x0) * 180 / Math.PI;
var r = Math.sqrt ((x2 - x0) * (x2 - x0) + (y2 - y0) * (y2 - y0));
var a:Number = a2 - a1;
var step:Number = 3;
var as:Number = a / step;
this.lineStyle (2, 0x0000FF);
this.moveTo (x2, y2);
for (i = 0; i < step + 1; i++) {
	var u:Number = (a1 + as * i) * Math.PI / 180;
	var x:Number = x0 + r * Math.cos (u);
	var y:Number = y0 + r * Math.sin (u);
	this.lineTo (x, y);
}
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 14.02.2008, 08:06
alrusdi вне форума Посмотреть профиль Отправить личное сообщение для alrusdi Найти все сообщения от alrusdi
  № 3  
Ответить с цитированием
alrusdi

Регистрация: Nov 2005
Сообщений: 75
iNils, спасибо!
Для того чтобы это соответсвовало условию задачи одну строчку еще добавить надо
Код:
function drawArc(mc:MovieClip, x0:Number, y0:Number, x1:Number, y1:Number, x2:Number, y2:Number){	
	var a1:Number = Math.atan2 ((y2 - y0), (x2 - x0));
	var a2:Number = Math.atan2 ((y1 - y0), (x1 - x0));
	var r = Math.sqrt ((x2 - x0) * (x2 - x0) + (y2 - y0) * (y2 - y0));
	var a:Number = a2 - a1;
	if (a<0){a+=Math.PI*2;};
	var step:Number = 10;
	var as:Number = a / step;
	
	mc.lineStyle (0, 0x0000FF);
	mc.moveTo (x2, y2);
	
	for (var i = 0; i < step + 1; i++) {
		var u:Number = (a1 + as * i);
		var x:Number = x0 + r * Math.cos (u);
		var y:Number = y0 + r * Math.sin (u);
		mc.lineTo (x, y);
	}
}
Функция Math.atan2 это тот же арктангенс, только с разделением параметров, проверкой области допустимых значений и сменой четверти в тех местах где функция меняется на кофункцию. Для тех кому нужна ее реализация вот она:
Код:
function atan2(dy, dx){
	if (dy==0){
		if (dx>0){
			return Math.PI/2;
			}else{
			return -Math.PI/2;
		};
	};
	if (dx<0 && dy>0){ return Math.atan(dy/dx)+Math.PI;}
	if (dx<0 && dy<0){ return Math.atan(dy/dx)-Math.PI;}
	return Math.atan(dy/dx);
}

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

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

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


 


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


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