-
Nicolas M. Thiéry authoredNicolas M. Thiéry authored
jupytext:
text_representation:
extension: .md
format_name: myst
format_version: 0.13
kernelspec:
display_name: C++17
language: C++17
name: xcpp17
+++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "a706520256c25b19a9257cc4544a6111", "grade": false, "grade_id": "cell-db040b06c5a92099", "locked": true, "schema_version": 3, "solution": false, "task": false}}
Premiers graphiques avec Jupyter
+++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "f43a760bd6125e25df23a9ab2628c3e9", "grade": false, "grade_id": "cell-db040b06c5a92100", "locked": true, "schema_version": 3, "solution": false, "task": false}}
Dans cette feuille, nous allons reprendre l'exercice 2 du TD et effectuer un premier dessin.
+++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "f4cbf5563a6542f5c409f308fdca30a3", "grade": false, "grade_id": "cell-db040b06c5a92101", "locked": true, "schema_version": 3, "solution": false, "task": false}}
Commençons par créer un canvas vert de taille 640 x 480 :
---
deletable: false
editable: false
nbgrader:
cell_type: code
checksum: e337cf30f41be5c2c6c788f10b454f9a
grade: false
grade_id: cell-51d47887d053f179
locked: true
schema_version: 3
solution: false
task: false
---
#include "primitives_jupyter.hpp"
---
deletable: false
editable: false
nbgrader:
cell_type: code
checksum: 9d359d2bf83f09dfcd9eb723473a197f
grade: false
grade_id: cell-c2afd88f340f46f4
locked: true
schema_version: 3
solution: false
task: false
tags: []
---
RenderWindow window(VideoMode(640, 480), "Ma super fenêtre");
window.canvas
window.clear(Color::Green);
+++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "7df12946868397e5fbe4bc994fb8d19c", "grade": false, "grade_id": "cell-db040b06c5a92102", "locked": true, "schema_version": 3, "solution": false, "task": false}}
puis dessinons un point noir de coordonnées (418, 143). Ce point est tout petit, vous aurez peut-être un peu de mal à le distinguer :
draw_point(window, {418, 143}, Color::Black );
window.display();
+++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "d8948ac8886182d90df0fb2bce302b52", "grade": false, "grade_id": "cell-db040b06c5a92103", "locked": true, "schema_version": 3, "solution": false, "task": false}}
- Dessinez un segment blanc entre les points de coordonnées respsectives (100,200) et (200,200) :
---
deletable: false
nbgrader:
cell_type: code
checksum: ce1d6a0deeef3221d1ea8d9afbd40bce
grade: true
grade_id: cell-e77db2d9ed7265ac
locked: false
points: 1
schema_version: 3
solution: true
task: false
---
// REMPLACEZ CETTE LIGNE PAR VOTRE RÉPONSE
window.display();
+++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "5da5ff8010119a35e52e9ba76dc3237d", "grade": false, "grade_id": "cell-db040b06c5a92104", "locked": true, "schema_version": 3, "solution": false, "task": false}}
:::{tip} Astuce
Pour éviter de monter et descendre constamment dans cette feuille, faites un clic droit sur le canvas et cliquez sur «Créer une nouvelle vue pour la sortie» (ou «Create new view for output»). Puis disposez la copie obtenue du canvas sur votre espace de travail de sorte à voir simultanément votre code et le canvas.
:::
+++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "fea5730c56d940cd6a18b432d9069629", "grade": false, "grade_id": "cell-db040b06c5a92105", "locked": true, "schema_version": 3, "solution": false, "task": false}}
- Dessinez un segment rouge entre les points (200,300) et (200,400) :
---
deletable: false
nbgrader:
cell_type: code
checksum: 90954d14f326667b7a51643cd5d83bc0
grade: true
grade_id: cell-03b3d3f225c29d1d
locked: false
points: 1
schema_version: 3
solution: true
task: false
---
// REMPLACEZ CETTE LIGNE PAR VOTRE RÉPONSE
window.display();
+++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "0791571f18f4df2c2bfecb5a3ba9c0ff", "grade": false, "grade_id": "cell-db040b06c5a92106", "locked": true, "schema_version": 3, "solution": false, "task": false}}
- Dessinez un rectangle horizontal vide de sommets diagonaux (200,200) et (400,300) et de contour rouge :
---
deletable: false
nbgrader:
cell_type: code
checksum: 4c65f8e4cec21af229e5a44dd7063a03
grade: true
grade_id: cell-3606e0158c83309d
locked: false
points: 1
schema_version: 3
solution: true
task: false
---
// REMPLACEZ CETTE LIGNE PAR VOTRE RÉPONSE
window.display()
+++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "4eda0a34767a781e0fd3c186999331e2", "grade": false, "grade_id": "cell-db040b06c5a92107", "locked": true, "schema_version": 3, "solution": false, "task": false}}
- Dessinez un rectangle horizontal plein noir de sommets diagonaux (400,150) et (500,200) :
---
deletable: false
nbgrader:
cell_type: code
checksum: f66e8172c61aca3cb946861a95326520
grade: true
grade_id: cell-25abe8a7c6c8c617
locked: false
points: 1
schema_version: 3
solution: true
task: false
---
// REMPLACEZ CETTE LIGNE PAR VOTRE RÉPONSE
window.display()
+++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "2f11cf73501e6fcc67b66d7ced218656", "grade": false, "grade_id": "cell-db040b06c5a92108", "locked": true, "schema_version": 3, "solution": false, "task": false}}
- Dessinez un segment rouge entre les points (400,300) et (500,400) :
---
deletable: false
nbgrader:
cell_type: code
checksum: 49650230393c3fc8d743c211525de50c
grade: true
grade_id: cell-c6d75131df2bea6d
locked: false
points: 1
schema_version: 3
solution: true
task: false
---
// REMPLACEZ CETTE LIGNE PAR VOTRE RÉPONSE
window.display()
+++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "34955bd551a86d7f66e34edca2617cab", "grade": false, "grade_id": "cell-db040b06c5a92109", "locked": true, "schema_version": 3, "solution": false, "task": false}}
-
Dessinez un triangle bleu entre les (0,0), (640,0) et (0,160) :
---
deletable: false
nbgrader:
cell_type: code
checksum: de3439e6f2af1c2ebadec5e92840b900
grade: true
grade_id: cell-c6d75131df2bea6e
locked: false
points: 1
schema_version: 3
solution: true
task: false
---
// REMPLACEZ CETTE LIGNE PAR VOTRE RÉPONSE
window.display()
+++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "16aaa6f47064b571ba75a417797361e4", "grade": false, "grade_id": "cell-db040b06c5a92110", "locked": true, "schema_version": 3, "solution": false, "task": false}}
- Dessinez un cercle noir de centre (415,145) et de rayon 10 :
---
deletable: false
nbgrader:
cell_type: code
checksum: e56a4a8d478945ff8d1ef1c4497dcf05
grade: true
grade_id: cell-63406c09d76b868b
locked: false
points: 1
schema_version: 3
solution: true
task: false
---
// REMPLACEZ CETTE LIGNE PAR VOTRE RÉPONSE
window.display()
+++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "92e964b26520043007e0fe1972b38638", "grade": false, "grade_id": "cell-db040b06c5a92111", "locked": true, "schema_version": 3, "solution": false, "task": false}}
- Dessinez un disque jaune de centre (550, 75) et de rayon 50 :
---
deletable: false
nbgrader:
cell_type: code
checksum: 6419729d5f34a928308cdd11942a3f1a
grade: true
grade_id: cell-4f7332edb4646cbf
locked: false
points: 1
schema_version: 3
solution: true
task: false
---
// REMPLACEZ CETTE LIGNE PAR VOTRE RÉPONSE
window.display()
+++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "ef878f93df33be50d5262273cefbc00a", "grade": false, "grade_id": "cell-db040b06c5a92112", "locked": true, "schema_version": 3, "solution": false, "task": false}}
:::{attention}
Comme vous l'avez constaté, les performances sont lamentables. C'est parce que nous avons abusé des canvas de HTML : alors que ceux-ci sont conçus pour du dessin vectoriel, nous approximons les figures vectorielles (lignes, triangles, ...) par des accumulations d'un très grand nombre de pixels (combien pour le triangle bleu?), sachant que chacun de ces pixels est en fait représenté en interne par un petit rectangle.
En dehors de ce premier dessin -- dont l'objectif pédagogique était de faire un peu d'algorithmique -- il faut au contraire utiliser les primitives vectorielles fournies.
:::