ActionScript LineStyle spessore per riempire un cerchio
-
30-09-2019 - |
Domanda
Sto cercando di costruire un cerchio utilizzando le linee. Ogni riga inizia nel centro del cerchio e è lunga quanto il raggio della circonferenza. Utilizzando un ciclo con seno e le onde CoSign, posso costruire il cerchio con il seno e CoSign per contrassegnare le coordinate del parametro lineTo
.
Il mio problema è con il parametro di spessore della linea di lineStyle
. Desidero le estremità delle linee da combaciare perfettamente, non importa quanto grande la circonferenza del cerchio, ma non riesco a capire un metodo appropriato per lo spessore della linea.
//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);
}
Per rendere le estremità delle linee incontrano sulla circonferenza cerchi, senza vuoti, devo ampliare le linee per riempire lo spazio che rimanente. Cosa senso per me, ma non funziona, è quello di sottrarre il 360 dalla circonferenza, quindi dividere il numero per la quantità di spazi vuoti tra le linee (che è 359) e aggiungendo che il numero lo spessore di 1.
Quello che mi ha preoccupante è che il parametro dello spessore lineStyle
è un Number
, ma sembra prendere solo valori compresi tra 0 e 255, quindi non sono sicuro se un numero decimale come 1.354 è uno spessore valido.
Soluzione
suggerirei loro disegno come cunei invece di linee, copia e incolla questo in un nuovo FLA per vedere quello che voglio dire:
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;
}