PDA

Просмотр полной версии : Проставить точки на спирали


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
если расстояние "по окружности" то всё верно. а если "по спирали" - то читайте матчасть (http://mathworld.wolfram.com/LogarithmicSpiral.html)

ммм т.е. я имел ввиду было бы нормально где-то так: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
зря вы не любите математику. взяли бы выражение для длины дуги спирали и посчитали бы необходимое приращение угла