ActionScript lineStyle Толщина для заполнения круга - PullRequest
0 голосов
/ 19 мая 2010

Я пытаюсь построить круг, используя линии. Каждая линия начинается в центре круга и равна его радиусу. Используя цикл вместе с волнами синуса и косинуса, я могу построить круг, используя синус и косинус, чтобы отметить координаты параметра lineTo.

Моя проблема связана с параметром толщины линии lineStyle. Я бы хотел, чтобы концы линий идеально совпадали, независимо от того, насколько велика окружность круга, но я не могу найти правильный метод для толщины линии.

//this is what makes sense to me, but it still creates some gaps
lineThickness = 1 + (((nRadius * 2) * Math.PI) - 360) / 359;

for(var i:int = 0; i < 360; i++)
{
    // Convert the degree to radians.
    nRadians = i * (Math.PI / 180);

    // Calculate the coordinate in which the line should be drawn to.
    nX = nRadius * Math.cos(nRadians);
    nY = nRadius * Math.sin(nRadians);

    // Create and drawn the line.
    graphics.lineStyle(lineThickness, 0, 1, false, LineScaleMode.NORMAL, CapsStyle.NONE);
    graphics.moveTo(0, 0);
    graphics.lineTo(nX, nY);
}

Чтобы концы линий встречались на окружности окружности, без каких-либо промежутков, мне нужно расширить линии, чтобы заполнить оставшееся пространство. Что имеет смысл для меня, но не работает, так это вычесть 360 из окружности, а затем разделить это число на количество пустых слотов между строками (а это 359) и прибавить это число к толщине 1.

Что меня беспокоит, так это то, что параметр толщины lineStyle равен Number, но, похоже, принимает значения только от 0 до 255, поэтому я не уверен, является ли число с плавающей точкой, например 1.354, допустимой толщиной. 1012 *

1 Ответ

1 голос
/ 19 мая 2010

Я бы предложил нарисовать их в виде клиньев, а не линий, скопировать и вставить их в новый FLA, чтобы понять, что я имею в виду:

var nRadians : Number;</p> <p>var nRadius : Number = 100;</p> <p>var nX : Number;</p> <p>var nY : Number;</p> <p>var previousX : Number = nRadius;</p> <p>var previousY : Number = 0;</p> <p>//this is what makes sense to me, but it still creates some gaps</p> <p>var lineThickness : Number = 1 + ( ( ( nRadius * 2 ) * Math.PI ) - 360 ) / 359;</p> <p>for( var i : int = 0; i < 360; i++ ) {</p> <p>// Convert the degree to radians. nRadians = i * ( Math.PI / 180 );</p> <pre>// Calculate the coordinate in which the line should be drawn to. nX = nRadius * Math.cos( nRadians ); nY = nRadius * Math.sin( nRadians ); // Create and drawn the line. graphics.beginFill( Math.random() * 0xFFFFFF ); graphics.moveTo( 0, 0 ); graphics.lineTo( previousX, previousY ); graphics.lineTo( nX, nY ); graphics.lineTo( 0, 0 ); graphics.endFill(); previousX = nX; previousY = nY;

}

...