![]() |
|
||||||||||
|
|||||
|
Регистрация: 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. |
|
|||||
|
Негуру
администратор
Регистрация: 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);
}
|
|
|||||
|
Регистрация: 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);
}
}
|
![]() |
![]() |
Часовой пояс GMT +4, время: 19:29. |
|
|
« Предыдущая тема | Следующая тема » |
|
|