Question

Je suis en train de construire un cercle à l'aide de lignes.Chaque ligne commence dans le centre du cercle et est aussi long que le cercle de rayon.À l'aide d'une boucle avec condition sine et cosign ondes, je peux construire le cercle en utilisant le sinus et le cosign pour marquer les coordonnées de l' lineTo le paramètre.

Mon problème est avec l'épaisseur de la ligne de paramètre de lineStyle.Je voudrais les extrémités des lignes, pour correspondre parfaitement, peu importe comment grand que la circonférence du cercle, mais je ne peux pas trouver une méthode appropriée pour l'épaisseur de la ligne.

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

Pour rendre les extrémités des lignes se rencontrent à la circonférence des cercles, sans lacunes, j'ai besoin d'élargir les lignes pour remplir l'espace restant.Ce qui fait sens pour moi, mais ne fonctionne pas, est de soustraire la 360 à partir de la circonférence, puis divisez ce nombre par le nombre de logements vides entre les lignes (ce qui est 359) et en ajoutant à ce nombre les à l'épaisseur de 1.

Ce qui est me concernant est que l' lineStyle l'épaisseur paramètre est un Number, mais il semble ne prendre que des valeurs entre 0 et 255, donc je ne suis pas sûr si un nombre à virgule flottante comme 1.354 est valide épaisseur.

Était-ce utile?

La solution

Je vous suggère de les dessiner que des coins au lieu de lignes, de copier et de les coller dans un nouveau FLA pour voir ce que je veux dire:

var nRadians : Number;

var nRadius :Nombre = 100;

var nX :Nombre;

var nY :Nombre;

var previousX :Nombre = nRadius;

var previousY :Nombre = 0;

//c'est ce qui fait sens pour moi, mais il crée tout de même quelques lacunes

var lineThickness :Nombre = 1 + ( ( ( nRadius * 2 ) * Math.PI ) - 360 ) / 359;

for( var i :int = 0;j' < 360;i++ ) {

// Convertir les degrés en 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;

}

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top