Skip to content

TP7. Kaléidoscope

Énoncé

On se propose dans ce TP de travailler sur un générateur d'images SVG. On souhaite générer des images kaléidoscopiques comme celle ci-dessous.

exemple

On vous fournit le fichier principal du programme kaleidoscope.py et on vous demande d'écrire deux modules : dessin.py et triangle.py

Prenez le temps pour bien comprendre le programme principal fourni. En particulier, on vous demande de bien identifier les fonctions qui devront être implémentées dans les différents modules. Pour chacune des fonctions, veillez à bien comprendre les paramètres ainsi qu'à identifier ce qu'elle retourne.

Pour dessiner un triangle au format SVG, on se référera à la documentation en ligne : http://www.w3schools.com/graphics/svg_polygon.asp. Rajoutez donc une fonction pour générer des polygones à votre module svg.py :

1
2
3
4
5
6
7
def genere_polygone(points):
    """
    Retourne la chaine de caractères correspondant à un élément SVG représentant un polygone.
    points est un tableaux de points.
    """
    # TODO
    ...

Vous aurez également besoin de dessiner des triangles transparents. Pour cela, vous rajouterez la fonction suivante à votre module svg.py. Vous vous renseignerez auprès de votre moteur de recherche préféré pour trouver comment faire de la transparence en SVG.

1
2
3
4
5
6
7
8
9
def genere_balise_debut_groupe_transp(niveau_opacite):
    """
    Retourne la chaine de caractères correspondant à une balise ouvrant un
    groupe d’éléments qui, dans son ensemble, sera partiellement transparent.
    Les éléments qui composent le groupe se masquent les uns les autres dans
    l’ordre d’apparition (ils ne sont pas transparents entre eux).
    niveau_opacite doit être un nombre entre 0 et 1. Ce groupe doit être refermé
    de la même manière que les groupes définissant un style.
    """

Pour effectuer la rotation d'angle α d’un point de coordonnées (x, y) autour d'un centre de rotation de coordonnées (xc, yc), plusieurs approches sont possibles. Si cette partie ne vous inspire pas, vous pouvez toujours utiliser la formule suivante :

x′ = (x - xc) × cos(α) - (y - yc) × sin(α) + xc

y′ = (x - xc) × sin(α) + (y - yc) × cos(α) + yc

Difficulté

star star star star

Exercices associés