Home
Le jeu Planarité
Contents
1. gauche dans position x et position y Chaque sommet poss de sa propre nuance de couleur rougeli La couleur rouge NN sera utilis e pour colorier les ar tes 5 Proc der au dessin du r seau carr obtenu noter la pr sence de la fonction fini qui teste si le graphe est planaire et dans le cas favorable dessine un grand cercle bleu sur l cran ce qui se produit bien dans le cas pr sent La fonction fini sera expliqu e plus tard 6 On va maintenant mettre du d sordre dans le graphe pr c dent Commencer par faire une permutation i pli sur les num ros des sommets Puis placer les sommets ainsi permut s sur un cercle intervalles r guliers Par exemple si la permutation fait passer de 012 201 les points plac s sur le cercle seront 201 dans cet ordre et leurs coordonn es sont enregistr es dans x et y Il ne reste plus qu remettre des carr s rouges autour de ces sommets avec leur couleur sp cifique rougel puis de tracer les ar tes de jonction dans ce nouveau contexte include lt stdlib h gt include lt time h gt include lt math h gt include lt SDL SDL h gt define OUI 1 define NON 0 define N 4 define NN NN define pas 50 define R 200 define pi 3 14159 void ligne int xO int y0 int x1 int y1 Uint32 c fonctons utilis es void pause void void cercle int xo int yo int RR Uint32 couleur int secoupent int q int qq int fini void Uint32 getpixel i
2. y vb rouge NN if fini OUT cercle 400 300 400 bleu SDL Flip ecran pause SDL FillRect ecran NULL blanc srand time NULL er Gris for 1 0 i lt NN i do h randO NN while dejafait h OUD pli h dejafait h OUT for i 0 i lt NN i x plil l 400 R cos 2 pi float i float NN y pli 1 300 R sin 2 pi float i float NN for i 0 i lt NN i SDL FillRect pointcarre i NULL rouge i position i x x 1 5 position i y y i 5 for i 0 i lt NN i SDL BlitSurface pointcarre i 0 ecran amp position i for i 0 i lt NN i for j 0 j lt nbv i j4 if i lt v i 5 ligne xfil y ilx vEiN y Vi rougeINND SDL Flip ecran Le jeu Apr s ce qui pr c de voici ce que voit le joueur sur l cran Il va maintenant utiliser la souris pour bouger les points et tenter d obtenir finalement le graphe sous forme planaire Comment faire bouger un point Il suffit de d placer la souris de fa on que la fl che qui lui correspond sur l cran vienne se placer sur un carr rouge repr sentant un point En appuyant sur un bouton de la souris le point se trouvera agripp la souris En d pla ant celle ci le point suivra le m me mouvement Une fois arriv l o on veut mettre le point il suffit de rel cher le bouton de la souris le point se fixe et la souris reprend sa libert pour aller vers un autre point d placer En cas de victoire le graphe tant devenu planaire u
3. NN i for j 0 j lt nbv 1 j if i lt v 5 ligne position i x 5 position i y 5 position v 1 5 x 5 position v 1 5 y 5 rouge NN for 1 0 i lt NN i4 SDL BlitSurface pointcarre i 0 ecran amp position i if fini 0 OUT cercle 400 300 400 bleu SDL Flip ecran for 1 0 i lt 4 i SDL FreeSurface pointcarre i return O Les tests d intersection Pour savoir si deux segments AB et CD se coupent on exprime que C et D sont de part et d autre de AB et que et B sont de part et d autre de CD comme on l a vu dans le chapitre sur Orientation et angles cf cours Graphisme et g om trie Il convient aussi que l intersection soit franche si les deux segments ont une extr mit en commun on consid re qu ils ne se coupent pas ce qui impose qu aucun des d terminants utilis s ne soit nul C est ce que fait ici la fonction secoupent q qq qui prend comme variables les num ros q et qq de deux ar tes et qui ram ne si oui ou non les deux ar tes concern es se coupent On comprend a posteriori l int r t d avoir num rot les ar tes Enfin la fonction fin se charge de prendre toutes les paires d ar tes et de compter le nombre des intersections Quand il n y en a plus elle dessine un grand cercle sur l cran int secoupent int q int qq int a b c d abx aby acx acy adx ady cdx cdy cax cay cbx cby float det1 det2 det3 det4 a extrl q b extr2 q c extrl qg d ext
4. Planarit Le jeu Planarity cf planarity net d velopp par John Tantalo est la fois simple par son mode d emploi et sa programmation et captivant voire exasp rant comme un supplice de Tantale Il s agit de d m ler un graphe pour que finalement il devienne planaire c est dire que ses ar tes ne se coupent jamais entre elles le graphe initial le m me graphe devenu planaire Nous en donnons ici une version simplifi e que nous allons programmer Nous allons commencer par construire un graphe planaire simple pour nous un r seau carr puis nous y mettrons du d sordre en d pla ant les sommets au hasard C est l que le jeu commence partir de ce graphe d sordonn le joueur devra d placer les sommets manuellement avec l aide de la souris jusqu obtenir la fin un graphe planaire En signe de succ s un grand cercle appara tra alors sur l cran Etapes pr liminaires E NT e 1 Construire un r seau carr avec N sommets par c t soit N sommets au total 0 3 4 7 8 11 12 15 Un r seau carr avec N 4 et NN 16 sommets num rot s de O 15 Il s agit d entrer le graphe en machine Pour chaque sommet i ses voisins vont tre enregistr s dans le tableau v i ainsi que leur nombre nbv i Mais les sommets ont quatre trois ou deux voisins selon leur position Ainsi les sommets qui ont un voisin leur droite sont ceux qui ne sont pas sur la bordure de droite i
5. ls portent un num ro i tel que i 1 N est diff rent de O Ceux qui n ont pas de voisin au dessus d eux sont ceux qui ne sont pas sur la bordure sup rieure soit i gt N Ceux qui ne sont pas sur la bordure de gauche soit iYoN diff rent de 0 ont un voisin gauche et ceux qui ne sont pas sur la derni re ligne i lt NN N ont un voisin au dessous Cela permet d enregistrer les voisins de chaque sommet gr ce au programme suivant o le tableau nbv est suppos mis O au d part for i 0 1 lt NN 1 if G D9N 0 v i nbv i i 1 if G gt N v i nbv i i N if G N 0 v i nbv i i 1 if G lt NN N v i nbv i i N 2 Donner un num ro chaque ar te du graphe et enregistrer ses deux sommets extr mes dans extrl et extr2 avec extrl lt extr2 Le nombre des ar tes sera plac dans NA Il suffit de parcourir la liste des voisins de chaque sommet i o les ar tes entre i et chaque voisin v i j j seront prises pourvu que i soit inf rieur au voisin k 0 for i 0 i lt NN i forg 0 j lt nbv i j if 1 lt v 1 5 extr1 k i extr2 k v i j k NA k Puis on a les tapes suivantes traiter Les morceaux de programme qui leur correspondent se trouvent dans le programme global ci dessous 3 D terminer les coordonn es x et y de chaque sommet 4 Placer un carr colori en rouge autour de chaque sommet i soit pointcarreli avec les coordonn es de son coin en haut
6. n grand cercle bleu appara tra sur l cran Le joueur pourra encore am liorer le r sultat en redessinant le graphe sous forme du r seau carr Le graphe redevenu planaire gauche et retrouvant m me sa forme de r seau carr droite Pour le programme nous avons repris celui d j fait pour la courbe de B zier en mouvement cf probl mes compl mentaires algorithmes 4 Il s agit d un programme v nementiel o une boucle ne cesse de tourner dans l attente du moindre v nement venant essentiellement de la souris Lors du mouvement d un point sous l effet de la souris les ar tes li es ce sommet suivent le mouvement A chaque instant aussi le programme teste s il existe des intersections entre les ar tes par le biais des fonctions secoupent et fin que nous expliquerons plus bas Il en r sulte cette partie du programme qui s ajoute la pr c dente flag 1 while continuer OUI SDL WaitEvent amp event if event type SDL QUIT continuer NON else if flag 1 amp amp event type SDL MOUSEBUTTONDOWN for i 0 i lt NN5i if getpixel event button x event button y rougeli flag i SDL WarpMouse position i x 5 position i y 5 break else if flag 1 amp amp event type SDL_MOUSEBUTTONUP flag 1 else if event type SDL_MOUSEMOTION position flag x event button x 5 position flag y event button y 5 SDL_FillRect ecran NULL blanc for i 0 i lt
7. nt xe int ye Uint32 blanc rouge NN 1 vert bleu SDL Surface ecran pointcarre NN SDL Rect position NN int vENN 4 nbv NN x NN y NN dejafait NNI pINNINA extrI NN NN extr2 NN NN int main int argc char argv int 1 j k h flag continuer OUI SDL Event event for i 0 i lt NN i prints q Hein if G D9 N 0 vli nbv i i 1 if G gt N v i nbv i i N if GZN 0 v i nbv i i 1 if 1 lt NN N v i nbv i i1 N k 0 prix estafeta for i 0 i lt NN i for j 0 j lt nbv i j if i lt v 1 5 fextrl k 1 extr2 k v 5 k NA k for i 0 i lt NN i primer 3 diet y 1 200 pas 1 N x 1 300 pas 170N SDL Init SDL INIT VIDEO ecran SDL SetVideoMode 800 600 32 SDL_HWSURFACE SDL DOUBLEBUF blanc SDL MapRGB ecran gt format 255 255 255 vert SDL MapRGB ecran gt format 0 255 0 bleu SDL MapRGB ecran gt format 0 0 255 SDL FillRect ecran NULL blanc for i 0 i lt NN i print 4 Het pointcarre i SDL CreateRGBSurface SDL HWSURFACE 10 10 32 0 0 0 0 rouge i SDL_MapRGB ecran gt format 255 5 i 0 0 rouge NN SDL_MapRGB ecran gt format 255 20 NN 0 0 for 1 0 i lt NN i SDL FillRect pointcarre 1 NULL rougeli position i x x i 5 position i y y 1 5 for Gi Oi lt NNii freins 5 init SDL BlitSurface pointcarre i 0 ecran amp position i for i 0 i lt NN i for j 0 j lt nbv i j if i lt v i 5 ligne x 1 y 1 x v 1
8. r2 gg abx position b x position a x aby position b y position a y acx position c x position a x acy position c y position a y adx position d x position a x ady position d y position a y deti abx acy aby acx det2 abx ady aby adx cdx position d x position c x cdy position d y position c y cax acx cay acy cbx position b x position c x cby position b y position c y det3 cdx cay cdy cax det4 cdx cby cdy cbx if det det2 lt 0 amp amp det3 det4 lt 0 return OUI return NON int fini void int 1 e ee nbdefois 0 for e 0 e lt NA 1 e for ee e l ee lt NA ee if secoupent e ee OUT nbdefois for i 0 i lt nbdefois i cercle 700 100 2 1 1 bleu if nbdefois 0 return OUT else return NON
Download Pdf Manuals
Related Search
Related Contents
Philips AZ1209 User's Manual English - Magura FT BENTOTEK STRIP 取扱説明書 /A1305SA 取扱い説明書 - エレス株式会社 Descargar - Hospital Rezola 26890 oxoid_MICE prod insert X7216C:1 Toshiba Satellite L745D-SP4174RM notebook MANN+HUMMEL MANN+HUMMEL Depósito de compensación de Copyright © All rights reserved.
Failed to retrieve file