Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Проставить точки на спирали (http://www.flasher.ru/forum/showthread.php?t=105509)

xMailer 17.12.2007 17:37

Проставить точки на спирали
 
Подскажите пожалуйста, не могу сообразить, как на спирали поставить точки через одинаковые интервалы (расстояние) по окружности. Спираль рисую так:

Код:

stop();

var a:Number = 90;
var r:Number = 12;

// алгоритм - 200 шагов по спирали
_mc.lineStyle (20, "0xffffff", 100);
for (var i:Number = 1; i <= 200; i++) {
  r += 0.8;
  a += 6.5;
  x = r * Math.cos (a * Math.PI / 180);
  y = r * Math.sin (a * Math.PI / 180);
  _mc.lineTo (x, y - 12);
}
play(); // в следующем кадре нужно по данному алгоритму поставить точки

вариант расстановки точек, который пытался безуспешно:
Код:

stop();

var a:Number = 90;
var r:Number = 12;
var aprev:Number = 90;
var fpoint:Number = 0;

_mc.lineStyle (20, "0xff0000", 100);
for (var i:Number = 1; i <= 200; i++) {
  r += 0.8;
  a += 6.5;
  x = r * Math.cos (a * Math.PI / 180);
  y = r * Math.sin (a * Math.PI / 180);
 
  // Через каждые 10 градусов - точка
  for (var n:Number = aprev; n < a; n++) {
          if(fpoint == 10){
                  fpoint = 0;
                  x = r * Math.cos (a * Math.PI / 180);
                  y = r * Math.sin (a * Math.PI / 180);
                    _mc.moveTo (x, y - 11);
                  _mc.lineTo (x, y - 12);
          }
          fpoint++;
  }
  aprev = a;
}


aQuestion 17.12.2007 18:02

если расстояние "по окружности" то всё верно. а если "по спирали" - то читайте матчасть

ммм т.е. я имел ввиду было бы нормально где-то так:
Код:

for (var i:Number = 1; i <= 200; i++) {
  r += 0.8;
  a += 6.5;
  x = r * Math.cos (a * Math.PI / 180);
  y = r * Math.sin (a * Math.PI / 180);
 
  // Через каждые 6.5 градусов - точка
                  x = r * Math.cos (a * Math.PI / 180);
                  y = r * Math.sin (a * Math.PI / 180);
                    _mc.moveTo (x, y - 11);
                  _mc.lineTo (x, y - 12);
}


xMailer 17.12.2007 20:35

по окружности
Код:

var a:Number = 90;
var r:Number = 100;

_mc.lineStyle (10, "0xffffff", 100);
for (var i:Number = 1; i <= 20; i++) {
  a += 30;
  x = r * Math.cos (a * Math.PI / 180);
  y = r * Math.sin (a * Math.PI / 180);
  _mc.moveTo (x, y);
  _mc.lineTo (x+1, y);
}

по спирали, пока остановился на варианте подсчета расстояния м/д точками спирали, но это не совсем то что надо, т.к. к концу спирали разница в расстояниях м/д точками все равно есть.
Код:

var a:Number = 90;
var r:Number = 12;
var xold:Number = r * Math.cos (a * Math.PI / 180);
var yold:Number = r * Math.sin (a * Math.PI / 180);
var xdis:Number = 0;

for (var i:Number = 1; i <= 500; i++) {
_mc.lineStyle (5, "0xff0000", 100);
  r += 0.8;
  a += 6.5;
  x = r * Math.cos (a * Math.PI / 180);
  y = r * Math.sin (a * Math.PI / 180);
 
  dis=_global.Math.sqrt(Math.pow(x-xold, 2) + Math.pow(y-yold, 2));
  xdis+=dis;
  if(xdis > 20){
          xdis=0;
          _mc.moveTo (x, y - 11);
          _mc.lineTo (x, y - 12);
  }
  xold = x;
  yold = y;
}


aQuestion 17.12.2007 21:27

зря вы не любите математику. взяли бы выражение для длины дуги спирали и посчитали бы необходимое приращение угла


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

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