ActionScript lineStyle толщина для заполнения круга

#actionscript-3 #graphics #thickness #linestyle

#actionscript-3 #графика #толщина #linestyle

Вопрос:

Я пытаюсь построить круг, используя линии. Каждая линия начинается в центре круга и имеет длину, равную радиусу круга. Используя цикл вместе с волнами синуса и совпадения, я могу построить круг, используя синус и совпадение для обозначения координат 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 параметром thickness является Number , но, похоже, принимает только значения от 0 до 255, поэтому я не уверен, что число с плавающей запятой, такое как 1.354, является допустимой толщиной.

Комментарии:

1. думаю, я понимаю, чего вы пытаетесь достичь, но я действительно не понимаю, почему ? (мне просто любопытно)

2. это позволяет мне получить доступ к значению цвета каждой строки

Ответ №1:

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


var nRadians : Number;

var nRadius : Number = 100;

var nX : Number;

var nY : Number;

var previousX : Number = nRadius;

var previousY : Number = 0;

//this is what makes sense to me, but it still creates some gaps

var lineThickness : Number = 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.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;
  

}