Chapitre 3 Remplissage des polygones. Achraf Othman Support du cours :

Documents pareils
Les algorithmes de base du graphisme

* très facile ** facile *** difficulté moyenne **** difficile ***** très difficile I : Incontournable T : pour travailler et mémoriser le cours

Résolution d équations non linéaires

Continuité et dérivabilité d une fonction

AC AB. A B C x 1. x + 1. d où. Avec un calcul vu au lycée, on démontre que cette solution admet deux solutions dont une seule nous intéresse : x =

EXCEL PERFECTIONNEMENT SERVICE INFORMATIQUE. Version /11/05

TP, première séquence d exercices.

Vision industrielle et télédétection - Détection d ellipses. Guillaume Martinez 17 décembre 2007

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Introduction à la théorie des graphes. Solutions des exercices

Exo7. Calculs de déterminants. Fiche corrigée par Arnaud Bodin. Exercice 1 Calculer les déterminants des matrices suivantes : Exercice 2.

Cours d initiation à la programmation en C++ Johann Cuenin

Baccalauréat L spécialité, Métropole et Réunion, 19 juin 2009 Corrigé.

Cours de Programmation Impérative: Zones de mémoires et pointeurs

Initiation à l algorithmique

chapitre 4 Nombres de Catalan

Fonctions linéaires et affines. 1 Fonctions linéaires. 1.1 Vocabulaire. 1.2 Représentation graphique. 3eme

DOCM Solutions officielles = n 2 10.

Rappels sur les suites - Algorithme

I - PUISSANCE D UN POINT PAR RAPPORT A UN CERCLE CERCLES ORTHOGONAUX POLES ET POLAIRES

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Chp. 4. Minimisation d une fonction d une variable

Statistiques Descriptives à une dimension

Algorithme. Table des matières

Exercices - Polynômes : corrigé. Opérations sur les polynômes

Définition 0,752 = 0,7 + 0,05 + 0,002 SYSTÈMES DE NUMÉRATION POSITIONNELS =

Initiation à la programmation en Python

La fonction exponentielle

B-web V4 MANUEL D UTILISATION. Espace de travail. Clear2Pay Belgium SA B-web V4 Manuel d Utilisation: Espace de travail

Algorithmes récursifs

Compter à Babylone. L écriture des nombres

LES REGLEMENTS AVEC SOCIEL.NET DERNIERE MISE A JOUR : le 14 juin 2010

Définition : On obtient les nombres entiers en ajoutant ou retranchant des unités à zéro.

Groupe symétrique. Chapitre II. 1 Définitions et généralités

Fonctions homographiques


Baccalauréat ES Polynésie (spécialité) 10 septembre 2014 Corrigé

Algorithmique et Programmation, IMA

Introduction à MATLAB R

Raisonnement par récurrence Suites numériques

Les structures. Chapitre 3

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Calcul matriciel. Définition 1 Une matrice de format (m,n) est un tableau rectangulaire de mn éléments, rangés en m lignes et n colonnes.

Bases de programmation. Cours 5. Structurer les données

Module 16 : Les fonctions de recherche et de référence

Synthèse d'images I. Venceslas BIRI IGM Université de Marne La

Optimisation des fonctions de plusieurs variables

point On obtient ainsi le ou les points d inter- entre deux objets».

EXCEL TUTORIEL 2012/2013

Programmation linéaire

Master IMA - UMPC Paris 6 RDMM - Année Fiche de TP

Chapitre 5 : Flot maximal dans un graphe

Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1

Chapitre 11. Séries de Fourier. Nous supposons connues les formules donnant les coefficients de Fourier d une fonction 2 - périodique :

Etude de fonctions: procédure et exemple

Formats d images. 1 Introduction

Priorités de calcul :

Optimisation, traitement d image et éclipse de Soleil

Procédure de sauvegarde pour AB Magique

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

SINE QUA NON. Découverte et Prise en main du logiciel Utilisation de bases

C f tracée ci- contre est la représentation graphique d une

Définitions. Numéro à préciser. (Durée : )

Représentation d un entier en base b

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

1.6- Génération de nombres aléatoires

Représentation géométrique d un nombre complexe

Organigramme / Algorigramme Dossier élève 1 SI

Problèmes de dénombrement.

TD3: tableaux avancées, première classe et chaînes

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

IV- Comment fonctionne un ordinateur?

Correction du baccalauréat ES/L Métropole 20 juin 2014

La classification automatique de données quantitatives

Exercices Alternatifs. Une fonction continue mais dérivable nulle part

Services bancaires par Internet aux entreprises. Guide pratique pour : Rapports de solde Version

Image d un intervalle par une fonction continue

Chapitre 2 Le problème de l unicité des solutions

Deux disques dans un carré

2.4 Représentation graphique, tableau de Karnaugh

Cours 1 : Qu est-ce que la programmation?

Durée de L épreuve : 2 heures. Barème : Exercice n 4 : 1 ) 1 point 2 ) 2 points 3 ) 1 point

Coefficients binomiaux

Initiation à LabView : Les exemples d applications :

Angles orientés et fonctions circulaires ( En première S )

Projet Matlab : un logiciel de cryptage

# let rec concat l1 l2 = match l1 with [] -> l2 x::l 1 -> x::(concat l 1 l2);; val concat : a list -> a list -> a list = <fun>

Algorithmique et programmation : les bases (VBA) Corrigé

Optimisation non linéaire Irène Charon, Olivier Hudry École nationale supérieure des télécommunications

Objectifs. Clustering. Principe. Applications. Applications. Cartes de crédits. Remarques. Biologie, Génomique

Les structures de données. Rajae El Ouazzani

Architecture des Systèmes d Information Architecture des Systèmes d Information

Cours d algorithmique pour la classe de 2nde

Jean-Philippe Préaux

Quels polygones sont formés par les milieux des côtés d un autre polygone?

Projet de traitement d'image - SI 381 reconstitution 3D d'intérieur à partir de photographies

CCP PSI Mathématiques 1 : un corrigé

Transcription:

Chapitre 3 Remplissage des polygones Achraf Othman Support du cours :

Polygones dans le plan Définition Un polygone Π dans le plan est une suite de segments Π = (S 1, S 2,, S n ) avec n ℵ * Et pour i = 1,,n, le segment S i est de la forme S i = [S i-1, S i ] Où P i est un point du plan pour i=0,,n avec P 0= P n P i s appelle un sommet du polygone Les segments S i s appellent les arêtes du polygone. 2

Polygones dans le plan Points intérieurs et points extérieurs Soit un polygone Π = (S 1, S 2,, S n ) et un point M du plan qui ne se trouve pas sur aucun des segments du Π. Considérons une demi-droite issue de M qui ne contient aucun des sommets du polygone Π. On dit que le point M est à l intérieur au polygone Π si la demi-droite intersecte un nombre impair de segments de Π. Sinon, si le nombre est pair, on dit que le point M est à l intérieur du polygone Π. 3

Polygones dans le plan Points intérieurs et points extérieurs 4

Polygones dans le plan Polygones convexes Un polygone Π = (S 1, S 2,, S n ) est dit convexe si pour tous points M et M qui sont intérieurs au polygone Π, le segment [MM ] est entièrement composé de points intérieurs au polygone Π. 5

Principe du remplissage de polygones Considérons un polygone Π du plan, dont tous les sommets ont des coordonnées entières. Le problème du remplissage consiste à trouver un algorithme permettant de parcourir tous les points de coordonnées entières du plan qui sont intérieurs du polygone. Parcourir et afficher tous les pixels qui se trouvent à l intérieur d un polygone donné sur un écran ou une image numérique. 6

Principe du remplissage de polygones Le principe du remplissage consiste à calculer des segments horizontaux inclus du polygone. 7

Principe du remplissage de polygones Nous devons déterminer, pour chaque horizontale, quels pixels sont à l intérieur du polygone: Les marquer Les afficher en couleur En faisant cela itérativement pour toutes les horizontales. On remplit complètement le polygone. 8

Principe du remplissage de polygones Le remplissage, pour chaque ligne horizontale, sera décomposé en trois étapes: 1) Trouver les extrémités des segments horizontaux inclus dans le polygone Π. Ces extrémités correspondent à des intersections de la ligne horizontale avec les arêtes du polygone. 2) Trier les extrémités obtenues à l étape 1 dans l ordre des coordonnées X croissantes. 3) Afficher tous les pixels qui sont à l intérieur du polygone entre paires d extrémités. On utilise la règle de parité pour déterminer qu un pixel se trouve à l intérieur de Π. 9

Parcours des arêtes Comment trouver les extrémités sur chaque horizontale Les extrémités des segments horizontaux inclus dans le polygone correspondent à des intersections d une horizontale avec les arêtes du polygone, donc à des points sur les arêtes. 10

Algorithme de parcours des arêtes du polygone (1) Détermination des extrémités des segments horizontaux inclut dans le polygone par un parcours des arêtes du polygone. Chaque arête du polygone va d un pixel (x bas, y bas ) à un pixel (x haut, y haut ) avec y bas < y haut. On fait varier l ordonnée y de y bas à y haut, et on obtient la relation suivante pour les coordonnées de l intersection de notre arête avec les horizontales: Où est l inverse de la pente de la droite. 11

Algorithme de parcours des arêtes du polygone (2) Pour se ramener à l arithmétique entière, on décompose la donnée 1/m en : Son numérateur numerat = x haut x bas, qui est de signe quelconque. Son dénominateur denomin = y haut y bas, qui est toujours strictement positif. On considère une variable entière increment telle que : représente, à une constante inférieure à 1 près, la partie fractionnaire de x i. La variable increment doit être augmentée de la quantité numerat à chaque étape (itération). On dessine un pixel dont l abscisse est arrondi de la valeur x i. 12

Algorithme de parcours des arêtes du polygone (3) Cette valeur arrondie doit être augmentée lorsque la quantité dépasse 1. On note Q la partie entière de, alors l abscisse du pixel à afficher doit être augmentée de la valeur Q. Il faut alors ramener la quantité à sa partie fractionnaire pour qu elle redevienne inférieure à 1. Astuce 1 : la variable increment doit rester ramenée entre 0 et (denomin-1) Astuce 2 : la variable increment doit être diminué de la Q x denomin. 13

Algorithme de parcours des arêtes du polygone (4) : initialisation L initialisation correcte de la variable increment dépend de la pente de la droite et du caractère gauche ou droite de l arête du polygone : Pour une arête gauche avec numerat>0 (pente positive), on a : int increment = denominateur 1 ; Pour une arête droite avec numerat > 0 (pente positive), on a : int increment = -1 ; Pour une arête gauche avec numerat <= 0 (pente négative), on a : int increment = 0 ; Pour une arête droite avec numerat <= 0 (pente négative), on a : int increment = - denominateur ; 14

Algorithme de parcours des arêtes du polygone (5) void gauche_pente_pos (int xbas, int ybas, int xhaut, int yhaut, int couleur) { }} int y; int x = xbas; int numerateur = xhaut xbas; int denominateur = yhaut / ybas; int increment = denominateur 1; int Q; for(y = ybas ; y <= yhaut ; y++) { PutPixel(x,y,couleur); increment += numerateur; Q = increment / denomintaeur; x += Q; increment -= Q * denominateur; 15

16

Algorithme de parcours des arêtes du polygone (7) Prenons l exemple d une arête : denomin = y haut y bas = 10 numerat = x haut x bas = 4 On suppose, par exemple que : xbas = 3 et ybas = 0 pente positive, initialisation : increment= denomin 1 = 9 Algorithme : 17

void gauche_pente_pos (int xbas, int ybas, int xhaut, int yhaut, int couleur) { int y; int x = xbas; int numerateur = xhaut xbas; int denominateur = yhaut / ybas; int increment = denominateur 1; int Q; for(y = ybas ; y <= yhaut ; y++) { PutPixel(x,y,couleur); increment += numerateur; Q = increment / denomintaeur; x += Q; increment -= Q * denominateur; }} denomin = y haut y bas = 10 numerat = x haut x bas = 4 y 0 1 2 3 4 5 6 7 8 9 10 increment 9 9+4=13 7 7+4=11 1+4=5 5+4=9 9+4=13 3+4=7 7+4=11 1+4=5 5+4=9 x 3 3+1=4 4 4+1=5 5+0=5 5+0=5 5+1=6 6+0=6 6+1=7 7+0=7 7+0=7 18 Pixel (3,0) (4,1) (4,2) (5,3) (5,4) (5,5) (6,6) (6,7) (7,8) (7,9) (7,10)

Remplissage de polygones Le cas du polygone convexe 19

Remplissage de polygones Algorithme 1 : Le cas du polygone convexe Avantage : pour chaque horizontale, on a au plus un segment horizontal inclus dans le polygone Π. Idée de l algorithme : Partir du bas du polygone vers le haut. Parcourir les arêtes qui bordent le polygone à gauche et à droite (en utilisant l algorithme précédent). 20

Remplissage de polygones Algorithme 1 : Le cas du polygone convexe Par exemple, pour le polygone Π : Parcourir les arêtes [AH] et [BC] Lorsqu on arrive à la hauteur 2 On remplace l arête [BC] par [CD] Parcourir les arêtes [AH] et [CD] Lorsqu on arrive à la hauteur 3 On remplace l arête [AH] par [HG] Parcourir les arêtes [HG] et [CD] Jusqu à la hauteur 7. 21

Remplissage de polygones Algorithme 2 : La tables des arêtes actives TAACONV On fait varier une variable y de l ordonnée du point le plus bas du polygone Π à l ordonnée du point le plus haut. On maintient une table des arêtes actives TAACONV qui: Pour une valeur donnée de y, code les deux arêtes du polygone qui intersectent : L horizontale de hauteur y Les abscisses arrondies des intersections de ces arêtes avec l horizontale de hauteur y Exemple : 22

Remplissage de polygones Algorithme 2 : La tables des arêtes actives TAACONV On représente la table des arêtes actives pour Π et pour y = {4,5,6} Exemple pour y = 4 : 23

TAACONV y = 4 : y haut x numerat denomin y haut x numerat denomin 6 4-1 3 5 9 1 3 24

Remplissage de polygones Algorithme 2 : La tables des arêtes actives TAACONV Lorsque la variable y est incrémentée, il faut mettre à jour la table des arêtes actives TAACONV, en remplaçant les arêtes pour laquelles y=y haut par les arêtes pour lesquelles y=y bas. Mettre à jour la donnée x des autres arêtes suivant l algorithme de parcours des arêtes. En déterminant la variable increment. En mémorise cette donnée dans increment[0] pour l arête à gauche et increment[1] pour l arête à droite. 25

TAACONV y = 5 : y haut x numerat denomin y haut x numerat denomin 6 4-1 3 7 9-4 2 26

TAACONV y = 6 : y haut x numerat denomin y haut x numerat denomin 7 3 2 1 7 7-4 2

Remplissage de polygones La table des arêtes globale TACONV Pour introduire rapidement une nouvelle arête telle que y=y bas, on construit une table des arêtes globale (TACONV) contenant toutes les arêtes non-horizontales du polygone, classées suivant leurs y bas. Exemple : 28

Remplissage de polygones La table des arêtes globale TACONV Coordo onnées de Y 7 6 5 4 3 7 3 2 1 7 10-4 2 6 4-1 3 5 9 1 3 2 3 6-2 2 2 7 2 1 TACONV y haut x bas numerat denomin y haut x bas numerat denomin 29

Remplissage de polygones La table des arêtes globale TACONV Chaque deux arêtes doivent apparaître dans la table TACONV ordonnées de gauche à droite. Une arête a1 est à gauche d une arête a2 si et seulement si : Soit a1.xmin < a2.xmin Soit a1.xmin = a2.xmin et (comparaison des pentes). Ce qui exprime en nombre entiers : a1.numerat x a2.numerat < a2.numerat x a1.denomin 30

Remplissage de polygones Algorithme E0 (init) : construite TACONV E1 : initialiser y à la plus petite valeur min(ybas) de ybas. E2 : copier les deux arêtes de la table TACONV à la hauteur 0 (la plus basse, correspondant à y) dans la table TAACONV. Initialiser les deux variables increment. E3 : Répéter tant que y est strictement inférieur à la plus grande valeur possible de yhaut : E3.1 : Afficher les pixels entre les deux pixels (x,y) correspondant aux deux éléments de TAACONV. E3.2 : Remplacer les arêtes de TAACONV qui ont leur yhaut égal à y par les arêtes de la table TACONV pour lesquelles ybas=y. E3.3 : Mettre à jour les valeurs de x dans TAACONV pour incrémenter y. E3.4 : incrémenter y. 31

Exercice d application Soient A(1,5) et B(7,1) deux points. En considérant le segment [AB] comme une arête gauche de polygone, appliquer l algorithme de parcours des arêtes utilisé dans l algorithme de remplissage de polygones pour parcourir l arête [AB]. En considérant le segment [AB] comme une arête droite de polygone, appliquer l algorithme de parcours des arêtes utilisé dans l algorithme de remplissage de polygones pour parcourir l arête [AB]. Refaire le même exercice pour A(1,2) et B(6,4). 32

Exercice d application Appliquer l algorithme de remplissage de polygones au polygone convexe représenté ci-dessus. 33

Fenêtrage de polygones 2D 34

35

36

Le support du cours est disponible sur le site : 37

Références 38