Graphes de noeud en php en utilisant svg
Résolu
Onizuka95
Messages postés
6
Date d'inscription
Statut
Membre
Dernière intervention
-
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
j'ai un projet qui consiste a faire des graphes svg en récupérant le nombres de noeuds et d'arcs dans une base de donnée.
Voici mon code de test pour dessiner le graphe :

Ma question :
Comment faire pour avoir des arcs de même taille mais avec un angle qui varie ?
En fonction du nombre de noeud qu'il y aura, la disposition du graphe ne sera pas la même.
Par exemple si on a 4 noeud autour du noeud principal, ils seront disposer a 90° les uns des autres par rapport au noeud principal.
Merci d'avance pour vos réponses.
j'ai un projet qui consiste a faire des graphes svg en récupérant le nombres de noeuds et d'arcs dans une base de donnée.
Voici mon code de test pour dessiner le graphe :
function graph($nb_nodes, $nb_edges, $ego){ $pos_x = 75; $pos_y = 75; $degre = 360/$nb_nodes; $rotation_x = cos($degre); $rotation_y = sin($degre); $pos_x_succ = -$pos_x*$rotation_x; $pos_y_succ = $pos_y*$rotation_y; $pos_x_suc = array(); $pos_y_suc = array(); echo'<?xml version="1.0" encoding="UTF-8" ?>'; echo'<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">'; echo'<svg xmlns="http://www.w3.org/2000/svg" version="1.0" width="500" height="500">'; echo' <g stroke="white" stroke-width="2">'; $pos_x_suc[0] = -$pos_x_succ; $pos_y_suc[0] = $pos_y_succ; for($i=1;$i<=$nb_nodes;$i++) { $pos_x_suc[$i] = $pos_x_suc[$i-1]+$degre; $pos_y_suc[$i] = $pos_y_suc[$i-1]+$degre; echo '<line y2="'.$pos_y_suc[$i].'" x2="'.$pos_x_suc[$i].'" y1="250" x1="250" />'; } echo '</g> <g fill="blue" stroke="black" stroke-width="2"> <circle cx="250" cy="250" r="30" /> </g>'; for($j=1;$j<=$nb_nodes;$j++) { $pos_x_suc[$j] = $pos_x_suc[$j-1]+$degre; $pos_y_suc[$j] = $pos_y_suc[$j-1]+$degre; echo '<g fill="red" stroke="black" stroke-width="1"> <circle cx="'.$pos_x_suc[$j].'" cy="'.$pos_y_suc[$j].'" r="20" /> </g>'; } echo '</g> <g font-family="Arial" font-size="10" font-weight="100" text-anchor="middle"> <text x="250" y="250">Ego'.$ego.'</text>'; for($k=1;$k<=$nb_nodes;$k++) { $pos_x_suc[$k] = $pos_x_suc[$k-1]+$degre; $pos_y_suc[$k] = $pos_y_suc[$k-1]+$degre; echo '<text x="'.$pos_x_suc[$k].'" y="'.$pos_y_suc[$k].'">Ego '.$k.'</text>'; } echo '</g> </svg>'; }
EDIT : ajout du LANGAGE dans les balises de code (pour la coloration syntaxique.... )
Sur l'image ci-dessous vous pouvez voir le résultat de ce code.
Ma question :
Comment faire pour avoir des arcs de même taille mais avec un angle qui varie ?
En fonction du nombre de noeud qu'il y aura, la disposition du graphe ne sera pas la même.
Par exemple si on a 4 noeud autour du noeud principal, ils seront disposer a 90° les uns des autres par rapport au noeud principal.
Merci d'avance pour vos réponses.
A voir également:
- Graphes de noeud en php en utilisant svg
- Svg viewer - Télécharger - Divers Web & Internet
- Notice d'utilisation en français - Guide
- Easy php - Télécharger - Divers Web & Internet
- Impossible d'utiliser ce numéro de téléphone pour la validation. - Forum Gmail
- Vous avez utilisé ce numéro de téléphone à de trop nombreuses reprises - Forum Gmail
3 réponses
Bonjour,
Je n'ai pas regardé le code ... mais ta question ressemble plus à un problème de math qu'autre chose...
Je pense qu'il faut que tu détermine, avant de commencer, combien de cercles tu vas devoir dessiner.
De là ... tu peux faire une simple division : 360° / N cercles
=> ce que tu fais déjà visiblement:
Dans ce cas... se sont les coordonnées X et Y de tes points que tu dois calculer...par rapport à ton premier points (le bleu)....
Si je ne me trompe pas ...
En partant du principe que ton cerlce bleu est le "centre" d'un autre cercle (fictif... mais qui servira à positionner les autres noeuds...)
tu peux calculer les coordonnées de chaque noeud via la formule :
(x0,y0) sont les coordonées du centre (le cercle bleu)
, r est le rayon (du cercle fictif où tu vas placer tes points) ,
et t l'angle (en radian) de chaque noeud à positionner.
Ce ne sont que des maths... je le répète.... rien à voir avec du code PHP à proprement parlé....
Bonnes recherches :-)
Je n'ai pas regardé le code ... mais ta question ressemble plus à un problème de math qu'autre chose...
Je pense qu'il faut que tu détermine, avant de commencer, combien de cercles tu vas devoir dessiner.
De là ... tu peux faire une simple division : 360° / N cercles
=> ce que tu fais déjà visiblement:
$degre = 360/$nb_nodes;
Dans ce cas... se sont les coordonnées X et Y de tes points que tu dois calculer...par rapport à ton premier points (le bleu)....
Si je ne me trompe pas ...
En partant du principe que ton cerlce bleu est le "centre" d'un autre cercle (fictif... mais qui servira à positionner les autres noeuds...)
tu peux calculer les coordonnées de chaque noeud via la formule :
x = x0 + r*cos(t)
y = y0 + r*sin(t)
(x0,y0) sont les coordonées du centre (le cercle bleu)
, r est le rayon (du cercle fictif où tu vas placer tes points) ,
et t l'angle (en radian) de chaque noeud à positionner.
Ce ne sont que des maths... je le répète.... rien à voir avec du code PHP à proprement parlé....
Bonnes recherches :-)
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour, je suggère ceci, pour calculer les centres de tes cercles rouges:
$rayon=40; $degre=2*pi()/$nb_nodes; for($i=0;$i<$nb_nodes;$i++) { $pos_x_suc[$i] = $pos_x + $rayon * cos($i*$degre); $pos_y_suc[$i] = $pos_y + $rayon * sin($i*$degre); }
Merci pour ta réponse.
En effet, tu as raison ce ne sont que des maths lol.
Je vais tester la formule que tu m'as proposé, sinon je vais m'orienté vers un forum de maths :-)