2016-01-27 2 views
1

J'ai des problèmes pour définir les coordonnées de l'étoile. Y at-il une meilleure solution pour cela? Je ne peux pas obtenir la forme correcte. Quelqu'un peut-il m'aider à ce sujet?Comment dessiner une étoile dans une java swing en utilisant fillPolygon

public void star(Graphics shapes) 
{ 
    shapes.setColor(color); 
    int[] x = {42,52,72,52,60,40,15,28,9,32,42}; 
    int [] y = {38,62,68,80,105,85,102,75,58,20,38}; 
    shapes.fillPolygon(x, y, 5); 
} 
+0

Honnêtement, j'utiliser le ([Graphics 2D] https://docs.oracle.com/javase/tutorial/2d /) formes API, ils vous permettent de "dessiner" une forme, ce qui est plus simple (IMHO), puis en utilisant un polygone. L'avantage est, ils sont faciles à peindre et à transformer – MadProgrammer

+0

Je trouve que cette question est plus sur les mathématiques que la programmation. –

Répondre

2

mise en œuvre de Sun offre une certaine mesure Java 2D comme des formes Rectangle, Oval, Polygon etc., mais il ne suffit pas. Il y a des interfaces graphiques qui nécessitent plus de formes personnalisées comme Regular Polygon, Star et Regular polygon avec des coins arrondis. Le projet fournit d'autres formes souvent utilisées. Toutes les classes implémente l'interface Shape qui permet à l'utilisateur d'utiliser toutes les méthodes habituelles de Graphics2D comme fill(), draw(), et de créer ses propres formes en les combinant.

Regular Polygon Star

Edit:

Link

+0

Merci pour la réponse rapide. –

+0

mais ne peut toujours pas obtenir le parfait 5 étoiles. –

+0

@JayGorio voir mon édition. – Satya

2

Honnêtement, j'utiliser l'API 2D Graphics de formes, ils vous permettent de "dessiner" une forme, ce qui est plus simple (à mon humble avis), puis en utilisant le polygone. L'avantage est qu'ils sont faciles à peindre et à transformer

Cela dit, le problème que vous rencontrez actuellement est le fait que vous ne transmettez pas les bonnes informations à la méthode fillPolygon.

Si vous jetez un oeil à l'JavaDocs for Graphics#fillPolygon, vous remarquerez que le dernier paramètre est le nombre de points:

NPOINTS - un nombre total de points.

Mais vous passez 5, où il y a effectivement des points 11 dans votre tableau

Quelque chose comme ...

shapes.setColor(color); 
int[] x = {42,52,72,52,60,40,15,28,9,32,42}; 
int [] y = {38,62,68,80,105,85,102,75,58,20,38}; 
shapes.fillPolygon(x, y, 11); 

devrait maintenant tirer tous les points, mais certaines de vos coordonnées sont légèrement éteints, donc vous voudrez peut-être vérifier que

+0

Merci également pour les références tellement utiles –

0

Je n'arrive pas à régler les coordonnées de e star y at-il une meilleure solution pour cela

Découvrez Playing With Shapes. Vous devriez être capable d'utiliser la classe ShapeUtils pour générer votre forme.

Cette classe générera les points pour vous afin que vous n'ayez pas besoin de gérer chaque pixel.

0

Le deuxième au dernier numéro de votre Y devrait être 60 pas 20

g2.setColor(color); 
int[] x = {42,52,72,52,60,40,15,28,9,32,42}; 
int[] y = {38,62,68,80,105,85,102,75,58,60,38}; 
g2.fillPolygon(x , y, 11);