Frage

Ich versuche, einen Kreis mit Linien zu bauen. Jede Zeile beginnt in der Mitte des Kreises und ist so lang wie Kreisradius. Verwendung einer Schleife zusammen mit Sinus- und Cosinus-Wellen, kann ich den Kreis mit dem Sinus und Cosinus bauen, um die Koordinaten des lineTo Parameter kennzeichnen.

Mein Problem ist mit den Linienstärke-Parametern von lineStyle. Ich würde die Enden der Linien wie perfekt zusammenpassen, egal wie groß der Umfang des Kreises, aber ich kann nicht eine richtige Methode für die Linienstärke ausrechnen.

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

Um die Enden der Linien machen im Kreise Umfang treffen, ohne Lücken, ich brauche die Linien zu füllen in den Raum zu erweitern, die verbleibenden ist. Was macht Sinn für mich, aber nicht funktioniert, ist die 360 ??von dem Umfang zu subtrahieren, dividieren dann diese Zahl durch die Menge der leeren Schlitze zwischen den Linien (die 359) und fügte hinzu, dass die Anzahl der Dicke von 1

Was ich ist über ist, dass die lineStyle Dickenparameter ein Number ist, scheinen aber nur Werte zwischen 0 und 255 zu nehmen, so dass ich nicht sicher bin, ob eine Gleitkommazahl wie 1.354 ist eine gültige Dicke.

War es hilfreich?

Lösung

Ich würde vorschlagen, sie als Keile statt Linien zeichnen, kopieren und einfügen, diese in eine neue FLA, um zu sehen, was ich meine:

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;

}

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top