Réaliser un graphe

Le problème exposé dans ce sujet a été résolu.

Bonjour à toutes et à tous,

J’ai besoin de dessiner des points en 1D, 2D et 3D dans un graphe. Utilisant Scala, j’ai cherché une API me permettant d’en dessiner un et je pensais avoir trouvé ce qu’il me fallait avec Plotly (https://plot.ly/scala/getting-started/), au final non puisqu’il est impossible de dessiner un graphe contenant des points en 3D (en Scala, pas en Python e.g.).

Du coup plutôt que de chercher une autre API (ça ne semble pas courir les rues en Scala), j’aimerais faire la mienne, de A à Z, pour voir comment on met en place des graphes. Je ne souhaite donc pas me baser sur des outils générateurs de graphes existants (e.g. : Plotly se base sur D3.js).

Ma question est la suivante : en général, comment sont imaginés/constitués/développés les générateurs de graphes, ces derniers pouvant aller de $[1 ; N]$ dimensions ? Est-ce qu’on représente juste le graphe par un tableau multidimensionnel ? Par un arbre ? Par autre chose ? Y a-t-il des algorithmes intéressants à implanter ? etc.

Merci d’avance les mandarines clémentines !

Quand tu es en 2D, si tu dois représenter un cercle, ça va donner un cercle…

Mais quand tu es en 3D, et que tu dois représenter un cercle, tu vas obtenir parois un cercle, parfois un segment, et le plus généralement, tu vas obtenir une ellipse.

Représenter un graphe 3D sur un écran, … quand tu dis cela tu dis un début de phrase, et il manque la fin de la phrase.

Pour représenter un graphe 3D, il faut que le graphe soit défini. Et il faut aussi que tu définisses un axe de projection. Une fois que tu as choisi un axe de projection, et que tu as un graphe 3D, tu as une étape indispensable, c’est de transformer ton graphe 3D en un graphe 2D. Et tu as alors les outils pour le représenter.

Pour représenter un graphe 3D, il faut que le graphe soit défini.

C’est-à-dire ? Donner l’ensemble des points ? Genre $graphe = {(2 ; 4 ; -3) ; (6 ; 0 ; 1)}$ ?

Et il faut aussi que tu définisses un axe de projection. Une fois que tu as choisi un axe de projection

Qu’est-ce qu’un axe de projection ?

c’est de transformer ton graphe 3D en un graphe 2D

En général, quelle façon de faire est utilisée ?

+0 -0

Donner l’ensemble des points … oui.

Qu’est-ce qu’un axe de projection ? C’est la question que je n’imaginais pas ! Imagine une voiture. (une voiture, c’est plus ou moins un graphe). Cette voiture, tu peux la dessiner de face, de côté, par l’arrière, ou de dessus, ou même, choisir un axe autre (de 3/4).

Là , ce que je viens de faire, c’est recenser différents axes de projection. Et selon l’axe choisi, on va obtenir des dessins très différents !

Vouloir représenter un graphe 3D, sans connaître cette notion de projection, c’est comme vouloir construire la Tour Eiffel alors qu’on ne sais pas dessiner un plan… il faut que tu abordes les difficultés dans l’ordre.

Transformer un graphe 3D en graphe 2D, quelle façon de faire ? La façon de faire s’appelle une PROJECTION. Il y a des formules mathématiques ’simples’, pour projeter un point sur un plan selon un axe donné…

Du coup je suis en train de lire l’article https://en.wikipedia.org/wiki/3D_projection pour voir comment m’y prendre. Dans la partie "Orthographic projection", il est dit que l’on doit utiliser une projection orthographique qui est parallèle à l’axe des $y$, "les $y$ positifs représentant la direction vers l’avant, i.e. la vue de profil").

Pourtant :

  1. La notion "vers l’avant" fait référence à la profondeur, qui est normalement $z$ : pourquoi l’auteur utilise-t-il $y$ du coup ?

  2. Un peu plus tôt, l’auteur indiquait "Si la normale du plan représentant la caméra est parallèle à l’un des axes primaires (qui est l’axe $x$, $y$ ou encore $z$), …". Donc il est théoriquement possible d’avoir un tel plan parallèle à l’axe $y$, mais aussi, simultanément, d’utiliser ce dernier pour faire la projection ?

Merci encore pour ta patience:p

Vers l’avant : si je te vois de face, ton nez est vers l’avant, et ton crane est vers l’arrière. C’est dans ce sens là qu’il faut comprendre l’expression vers l’avant.

Et je ne comprend pas ta 2ème question.

elegance

Oui donc c’est bien de profondeur dont on parle, hors en France l’axe des $z$ correspond justement à la profondeur… Pourquoi sur le Wiki anglais c’est $y$ ?

Je reviendrai un peu plus tard sur ma 2è question

Le mot profondeura différentes acceptations : si on parle de la profondeur d’un puits, alors, effectivement, on parle généralement de l’axe des z. Mais si on parle de profondeur de champ,c’est autre chose. C’est toujours relatif à la distance entre l’oeil et l’objet visé. Mais dans ce cas, on est sur un axe qui est généralement horizontal. Et donc, ça peut parfaitement être l’axe des y.

On parle aussi de la profondeur d’une armoire… qu’il ne faut pas confondre avec sa hauteur.

Mouais, je saisis bien la logique et je suis d’accord avec tes explications. Mais e.g. on parle de Z-buffer en infographie/synthèse d’images et pourtant lorsqu’on aborde le sujet, on présente fréquemment cet algorithme avec des cubes placés les uns devant les autres, sur ce même axe… D’ailleurs même en CSS, tu as le z-index qui traduit lui aussi la notion de "A devant B".

Concernant la profondeur d’un puits, c’est généralement l’axe Y et non l’axe Z qui est utilisé…

Pour finir, rien qu’une recherche "géométrie 3D axe" sur google images donne des résultats comme je les entends : axe Y = hauteur, axe Z = profondeur, i.e. ce qui est devant/derrière, i.e. l’axe "Y" du wiki. Bref je pense vraiment que cet article Wiki devrait changer "Y" en "Z" car ça prête à confusion.

Edit : il semblerait que ce soit une habitude américaine, cf. http://www.codeincodeblock.com/2012/03/projecting-3d-world-co-ordinates-into.html

+0 -0

D’accord. Tu dis qu’en fait, l’axe z est l’axe qui va des yeux vers l’objet visé. J’avais zappé cette information.

Ce n’est pas idiot du tout. Quand on travaille en dimension 2, on a x et y à plat devant nous ; x vers la droite et y vers le haut. Avec la convention que tu décris, j’imagine que x et y sont inchangés, et qu’on a en plus un axe z. C’est pas mal, parce que c’est cohérent avec ce qu’on fait en dimension 2.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte