Dessin de formes d'étoile avec des paramètres variables
Je tâche d'écrire le programme permet aux utilisateurs de dessiner des étoiles, qui peuvent différer selon la taille et la quantité d'armes. Lorsque je travaillais sur base des étoiles je le faisais avec GeneralPath et les tableaux de points :
int xPoints[] = { 55, 67, 109, 73, 83, 55, 27, 37, 1, 43 };
int yPoints[] = { 0, 36, 36, 54, 96, 72, 96, 54, 36, 36 };
Graphics2D g2d = ( Graphics2D ) g;
GeneralPath star = new GeneralPath();
star.moveTo( xPoints[ 0 ], yPoints[ 0 ] );
for ( int k = 1; k < xPoints.length; k++ )
star.lineTo( xPoints[ k ], yPoints[ k ] );
star.closePath();
g2d.fill( star );
Quelle méthode dois-je choisir pour le dessin des étoiles variables intérieure et extérieure rayon, ainsi que le montant différent de bras ? C'est ce que je devrais obtenir :
le texte d'alt http://img228.imageshack.us/img228/6427/lab6c.jpg
Vous devez vous connecter pour publier un commentaire.
Ayant n des armes signifie que vous vous retrouvez avec 2n sommets, le même celles qui sont sur le cercle extérieur, et les impairs sur le cercle intérieur. Consulté à partir du centre, les sommets sont en espaçant les angles (l'angle est 2*PI/2*n = Pi/n). Sur une unité de cercle (r=1), les coordonnées x,y des points i=0..n est cos(x),sin(x). Multipliez ces coordonnées avec le rayon (routeur ou rInner, en fonction de si i est pair ou impair), et d'ajouter que le vecteur au centre de l'étoile pour obtenir les coordonnées de chaque sommet de l'étoile chemin.
Voici la fonction pour créer une forme d'étoile avec étant donné le nombre d'armes, centre de coordonner et d'extérieur, rayon intérieur:
Je pense que vous devriez utiliser les mêmes classes (GeneralPath), mais ici, vous devriez vous concentrer sur la manière de calculer les coordonnées des vertices.
La première chose qui me vient à l'esprit est le positionnement de 2N points sur un cercle de rayon R1, centré en (0,0). Ensuite, "strech" tous les deux vertex en multipliant le vecteur par c. La constante c devrait être égal à R2/R1 (c'est à dire la proportion de rayons intérieur et extérieur).
Mais peut-être qu'il y a une solution plus simple...
Voici un exemple de trouver des points également espacés sur une cercle qui peuvent vous aider. Il suffit de faire le nombre de points, n, un paramètre dans le constructeur.