Skip to content
Snippets Groups Projects
premier-dessin.md 8.69 KiB
Newer Older
Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
---
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

Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
+++ {"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 :

Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
```{code-cell}
---
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"
```

```{code-cell}
---
deletable: false
editable: false
nbgrader:
  cell_type: code
Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
  checksum: 9d359d2bf83f09dfcd9eb723473a197f
Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
  grade: false
  grade_id: cell-c2afd88f340f46f4
  locked: true
  schema_version: 3
  solution: false
  task: false
Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
tags: []
Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
---
Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
RenderWindow window(VideoMode(640, 480), "Ma super fenêtre");
window.canvas
Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
```

```{code-cell}
window.clear(Color::Green);
```

Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
+++ {"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 :

Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
```{code-cell}
draw_point(window, {418, 143}, Color::Black );
window.display();
```

Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
+++ {"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}}

1.  Dessinez un segment blanc entre les points de coordonnées
    respsectives (100,200) et (200,200) :

Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
```{code-cell}
---
deletable: false
nbgrader:
  cell_type: code
Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
  checksum: ce1d6a0deeef3221d1ea8d9afbd40bce
Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
  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();
```

Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
+++ {"deletable": false, "editable": false, "nbgrader": {"cell_type": "markdown", "checksum": "2be96f003c2555d67d32213924f40a59", "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 «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}}

2.  Dessinez un segment rouge entre les points (200,300) et (200,400) :

Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
```{code-cell}
---
deletable: false
nbgrader:
  cell_type: code
Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
  checksum: 90954d14f326667b7a51643cd5d83bc0
Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
  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();
```

Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
+++ {"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}}

3.  Dessinez un rectangle horizontal vide de sommets diagonaux
    (200,200) et (400,300) et de contour rouge :

Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
```{code-cell}
---
deletable: false
nbgrader:
  cell_type: code
Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
  checksum: 4c65f8e4cec21af229e5a44dd7063a03
Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
  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()
```

Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
+++ {"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}}

4.  Dessinez un rectangle horizontal plein noir de sommets diagonaux
    (400,150) et (500,200) :

Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
```{code-cell}
---
deletable: false
nbgrader:
  cell_type: code
Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
  checksum: f66e8172c61aca3cb946861a95326520
Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
  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()
```

Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
+++ {"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}}

5.  Dessinez un segment rouge entre les points (400,300) et
    (500,400) :

Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
```{code-cell}
---
deletable: false
nbgrader:
  cell_type: code
Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
  checksum: 49650230393c3fc8d743c211525de50c
Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
  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()
```

Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
+++ {"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}}

6.  ♣ Dessinez un triangle bleu entre les (0,0), (640,0) et (0,160) :

```{code-cell}
---
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}}

7.  Dessinez un cercle noir de centre (415,145) et de rayon 10 :

Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
```{code-cell}
---
deletable: false
nbgrader:
  cell_type: code
Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
  checksum: e56a4a8d478945ff8d1ef1c4497dcf05
Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
  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()
```

Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
+++ {"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}}

8.  Dessinez un disque jaune de centre (550, 75) et de rayon 50 :

Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
```{code-cell}
---
deletable: false
nbgrader:
  cell_type: code
Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
  checksum: 6419729d5f34a928308cdd11942a3f1a
Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
  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()
```

Nicolas M. Thiéry's avatar
Nicolas M. Thiéry committed
+++ {"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.

:::