begin process at 2010 02 10 00:29:22
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Java2D

 > POLYGONE RÉGULIER EN FORME D'ÉTOILE

POLYGONE RÉGULIER EN FORME D'ÉTOILE


 Information sur la source

Note :
9,5 / 10 - par 2 personnes
9,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Java2D Classé sous :etoile, polygon, regulier, ellipse Niveau :Débutant Date de création :05/07/2006 Date de mise à jour :07/07/2006 07:59:38 Vu :13 880

Auteur : DARKSIDIOUS

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (9)
Ajouter un commentaire et/ou une note


 Description

Cliquez pour voir la capture en taille normale
Voici une petite fonction permettant de tracer un polygone régulier (juste régulier, ou en forme d'étoile). J'en avais besoin dans un projet de création d'affiche publicitaire, et n'ayant pas trouvé de source similaire sur le site, j'en profite pour la déposer.

Rien de bien compliqué, seul l'algorithme est intéressant qui consiste à tracer des lignes dont les points sont situées sur deux ellipses : l'une extérieure pour les branches de l'étoile, l'autre intérieure pour la grosseur de l'étoile.

Vous n'avez qu'à passer en paramètre à la fonction le centre des elipses, la dimension du rectangle englobant l'ellipse intérieure et extérieure (ce qui permet de calculer la position des points sur l'ellipse) et enfin le nombre de côtés de l'étoile que vous voulez obtenir.


Source

  • private Polygon regularPolygonEllipse(Point pCenter, Dimension pSizeOut, Dimension pSizeIn, int iSidesNumber) {
  • int [] xpoints = new int[iSidesNumber * 2]; // Les différents points de l'ellipse
  • int [] ypoints = new int[iSidesNumber * 2];
  • double delta = Math.PI * 2 / iSidesNumber; // L'angle de référence entre 2 pointes de l'étoile
  • double angle = 0;
  • for ( int i = 0; i < iSidesNumber; i++ ) {
  • if (pSizeIn.width != pSizeOut.width && pSizeIn.height != pSizeOut.height) { // Si la hauteur ou la largeur des 2 elipses sont différents, alors on trace une étoile
  • angle = delta * i + Math.PI / 2; // l'angle sur lequel on se base est augmenté du delta de référence
  • xpoints[i * 2] = (int)(pSizeOut.width * Math.cos(angle) + 0.5) + pCenter.x; // on calcule les coordoonées en x du prochain point du polygone = largeur de l'elipse externe * cos(angle) + x du centre
  • ypoints[i * 2] = pCenter.y - (int)(pSizeOut.height * Math.sin(angle) + 0.5); // on calcule les coordoonées en y du prochain point du polygone = hauteur de l'elipse externe * cos(angle) + y du centre
  • angle += delta / 2; // on refait de même avec un angle légérement augmenté (la moitié de l'angle de référence) afin d'obtenir une étoile
  • xpoints[i * 2 + 1] = (int)(pSizeIn.width * Math.cos(angle) + 0.5) + pCenter.x;
  • ypoints[i * 2 + 1] = pCenter.y - (int)(pSizeIn.height * Math.sin(angle) + 0.5);
  • } else { // sinon, on trace un polygône régulier
  • angle = delta * i + Math.PI / 2;
  • xpoints[i] = (int)(pSizeOut.width * Math.cos(angle) + 0.5) + pCenter.x;
  • ypoints[i] = pCenter.y - (int)(pSizeOut.height * Math.sin(angle) + 0.5);
  • }
  • }
  • return new Polygon(xpoints, ypoints, (pSizeIn.width != pSizeOut.width && pSizeIn.height != pSizeOut.height) ? iSidesNumber * 2 : iSidesNumber);
  • }
private Polygon regularPolygonEllipse(Point pCenter, Dimension pSizeOut, Dimension pSizeIn, int iSidesNumber) {
		int [] xpoints = new int[iSidesNumber * 2]; // Les différents points de l'ellipse
		int [] ypoints = new int[iSidesNumber * 2];
		
		double delta = Math.PI * 2 / iSidesNumber; // L'angle de référence entre 2 pointes de l'étoile
		double angle = 0;
		
		for ( int i = 0; i < iSidesNumber; i++ ) {
			if (pSizeIn.width != pSizeOut.width && pSizeIn.height != pSizeOut.height) { // Si la hauteur ou la largeur des 2 elipses sont différents, alors on trace une étoile 
				angle = delta * i + Math.PI / 2; // l'angle sur lequel on se base est augmenté du delta de référence
				xpoints[i * 2] = (int)(pSizeOut.width * Math.cos(angle) + 0.5) + pCenter.x; // on calcule les coordoonées en x du prochain point du polygone = largeur de l'elipse externe * cos(angle) + x du centre 
				ypoints[i * 2] = pCenter.y - (int)(pSizeOut.height * Math.sin(angle) + 0.5); // on calcule les coordoonées en y du prochain point du polygone = hauteur de l'elipse externe * cos(angle) + y du centre 
				angle += delta / 2; // on refait de même avec un angle légérement augmenté (la moitié de l'angle de référence) afin d'obtenir une étoile
				xpoints[i * 2 + 1] = (int)(pSizeIn.width * Math.cos(angle) + 0.5) + pCenter.x;
				ypoints[i * 2 + 1] = pCenter.y - (int)(pSizeIn.height * Math.sin(angle) + 0.5);
			} else { // sinon, on trace un polygône régulier
				angle = delta * i + Math.PI / 2;
				xpoints[i] = (int)(pSizeOut.width * Math.cos(angle) + 0.5) + pCenter.x;
				ypoints[i] = pCenter.y - (int)(pSizeOut.height * Math.sin(angle) + 0.5);			
			}
		}
		return new Polygon(xpoints, ypoints, (pSizeIn.width != pSizeOut.width && pSizeIn.height != pSizeOut.height) ? iSidesNumber * 2 : iSidesNumber);
	}

 Conclusion

Voilà, comme promis, mon code est à jour en se basant non plus sur des cercles mais sur des ellipses, ce qui permet d'obtenir des étoiles plus jolies et plus souples.


 Historique

07 juillet 2006 07:59:38 :
Code commenté et mis à jour pour tracer des étoiles basées sur des ellipse et non plus des cercles.

 Sources du même auteur

Source avec Zip Source avec une capture DKSWORDART : UN EDITEUR DE WORDART PERSONNALISÉ EN JAVA
Source avec Zip Source avec une capture DKSWARPEDITOR : TRANSFORMEZ UNE IMAGE TRÈS SIMPLEMENT
Source avec Zip Source avec une capture MARIO BROS : LE JEU DE MARIO
Source avec Zip Source avec une capture DKSTEXTUREEDITOR : CRÉEZ DES TEXTURES COMPLEXES TRÈS SIMPLEM...
Source avec Zip Source avec une capture DKSSHADOWEDITOR : UN ÉDITEUR D'OMBRE SUR DES OBJETS GRAPHIQU...

 Sources de la même categorie

AFFICHER UNE ÉTOILE AVEC JAVA2D par 2mohamed2
TEXTE AVEC OMBRE par 2mohamed2
Source avec Zip Source avec une capture JBOXIKON PORTAGE DE BOXIKON par ulm950
Source avec Zip Source avec une capture AQUARIUM 2D AVEC DOUBLE-BUFFERING ET EN UTILISANT UNIQUEMENT... par Cornellus1985
Source avec Zip Source avec une capture JPANELTEXTEDEFILANT : FAIRE DEFILER DU TEXTE (PLUSIEURES MAN... par loloof64

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture TRIANGLE D'ÉTOILES par alino91
Source avec Zip Source avec une capture JEU DE NIM EN ETOILE - JEU DES ALLUMETTES - IA MINMAX - ALPH... par Spawnrider

Commentaires et avis

Commentaire de Twinuts le 06/07/2006 16:44:06 administrateur CS

Salut,

Le concepte est sympas et le code pas bien sorcier mais quelques commentaire seraient les bien venue

Commentaire de DARKSIDIOUS le 06/07/2006 19:40:33 administrateur CS

Ok, je mettrais la source à jour de toute façon lorsque je l'aurais un peu améliorer : prochaine étape, faire des étoiles non plus basées sur des cercles, mais des ovales (sûrement plus compliqué à faire !!!), et du coup je rajouterai des commentaires.

Comme je le disais : ce n'est guère compliqué.

Commentaire de DARKSIDIOUS le 07/07/2006 08:01:02 administrateur CS

C'est fait, j'ai rajouté des commentaires et je fais le calcul non plus sur des cercles mais sur des ellipses (en fait, l'équation change quasiment pas entre les cercles et les ellipses !).

Commentaire de Twinuts le 07/07/2006 09:08:12 administrateur CS

Les maths dans un code sont tout de suite plus lisible avec un bon commentaire :P


(tu commence tes journées comme les poules toi ....(08h01 rien que je dors encore à cette heure :P))

Commentaire de DARKSIDIOUS le 07/07/2006 13:26:13 administrateur CS

Bah vouais, mais y'en a qui bosse aussi ;)

Commentaire de Twinuts le 07/07/2006 14:02:02 administrateur CS

Ba vi c'est la meme mais je commence plus tard ce qui me va très bien vu que je suis pas trop du matin (j'ai bien mon lit) :P

Commentaire de Twinuts le 07/07/2006 14:02:52 administrateur CS

J'oubliai c'est normal que la capture merdouille? je vois pas la meme capture sur la mini que qd je clic dessus

Commentaire de DARKSIDIOUS le 07/07/2006 14:06:09 administrateur CS

Sûrement un problème de cache de ton navigateur, supprime donc le cache de celui-ci, ca devrais résoudre le problème.

Commentaire de kaloway le 08/07/2006 09:17:19

des idées pour dessiner différent type d'étoiles :
-avoir un rapport d'homothétie différent en x et y pour les 2 ellipses.
-au lieu d'avoir seulement 2 ellipses en avoir 3 ou 4. àfin des tailles de pointe différente.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Trouver un polygone [ par GIGN90 ] Bonjour à tous,je vais essayer de vous expliquer mon problème le plus clairement possible.En fait mon problème est plus ou moins la suite de mon post Carte, et point dans polygon ? [ par albert0 ] Bonjour, Voilà, je voulais commencer à dev. un ptit prog en java, pour afficher des cartes interractives. http://www.tsr-rsr.ch/index.html?sit...207 dessiner un ellipse avec jgraph ou jlow [ par papillon2000 ] bonjour,je veux dessiner un réseau ou une sorte d'une représentetion graphique d'un workflow (réseau de taches). j'ai trouvé deux bibliothéque java (


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,530 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales