Pregunta

Estoy tratando de construir un círculo usando líneas. Cada línea comienza en el centro del círculo y es tan larga como el radio del círculo. El uso de un bucle a lo largo con ondas de seno y CoSign, puedo construir el círculo usando el seno y sirva de fiador para marcar las coordenadas del parámetro lineTo.

Mi problema es con el parámetro de grosor de la línea de lineStyle. Me gustaría que los extremos de las líneas para que coincida perfectamente, no importa lo grande que la circunferencia del círculo, pero no puedo imaginar un método adecuado para el grosor de la línea.

//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);
}

Para hacer que los extremos de las líneas se reúnen en la circunferencia círculos, sin huecos, necesito ensanchar las líneas para rellenar el espacio que está restante. Lo que tiene sentido para mí, pero no funciona, es restar el 360 de la circunferencia, y luego dividir ese número por la cantidad de ranuras vacías entre las líneas (que es 359) y la adición de ese número el espesor de 1.

Lo que me preocupante es que el parámetro de grosor lineStyle es un Number, pero parece tomar sólo valores entre 0 y 255, así que no estoy seguro de si un número de coma flotante como 1.354 es un espesor válida.

¿Fue útil?

Solución

Me gustaría sugerir dibujo como cuñas en lugar de líneas, copia y pega esto en un nuevo FLA para ver lo que quiero decir:

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;

}

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top