コード例 #1
0
ファイル: tlayout.c プロジェクト: aosm/graphviz
/* applyAttr:
 * Attractive force = weight*(d*d)/K
 *  or        force = (d - L(e))*weight(e)
 */
static void
applyAttr (Agnode_t* p, Agnode_t* q, Agedge_t* e)
{
  double    xdelta, ydelta;
  double    force;
  double    dist;
  double    dist2;

  xdelta = ND_pos(q)[0] - ND_pos(p)[0];
  ydelta = ND_pos(q)[1] - ND_pos(p)[1];
  dist2 = xdelta*xdelta + ydelta*ydelta;
  while (dist2 == 0.0) {
    xdelta = 5 - rand()%10;
    ydelta = 5 - rand()%10;
    dist2 = xdelta*xdelta + ydelta*ydelta;
  }
  dist = sqrt (dist2);
  if (T_useNew)
   force = (ED_factor(e) * (dist - ED_dist(e)))/dist;
  else
    force = (ED_factor(e) * dist)/ED_dist(e);
  DISP(q)[0] -= xdelta * force;
  DISP(q)[1] -= ydelta * force;
  DISP(p)[0] += xdelta * force;
  DISP(p)[1] += ydelta * force;
}
コード例 #2
0
ファイル: fdpinit.c プロジェクト: ekoontz/graphviz
/* init_edge:
 */
static void init_edge(edge_t * e, attrsym_t * E_len)
{
    ED_factor(e) = late_double(e, E_weight, 1.0, 0.0);
    ED_dist(e) = late_double(e, E_len, fdp_parms.K, 0.0);

    common_init_edge(e);
}
コード例 #3
0
ファイル: stuff.c プロジェクト: Chaduke/bah.mod
static double setEdgeLen(graph_t * G, node_t * np, int lenx)
{
    edge_t *ep;
    double total_len = 0.0;
    double len;
    for (ep = agfstout(G, np); ep; ep = agnxtout(G, ep)) {
        len = doubleattr(ep, lenx, 1.0);
        if (len <= 0) {
            agerr(AGERR, "bad edge len %f in %s ignored\n", len, G->name);
            len = 1.0;
        }
        ED_dist(ep) = len;
        total_len += len;
    }
    return total_len;
}
コード例 #4
0
ファイル: circuit.c プロジェクト: DaniHaag/jsPlumb_Liviz.js
int circuit_model(graph_t * g, int nG)
{
    double **Gm;
    double **Gm_inv;
    int rv;
    long i, j;
    node_t *v;
    edge_t *e;

    Gm = new_array(nG, nG, 0.0);
    Gm_inv = new_array(nG, nG, 0.0);

    /* set non-diagonal entries */
    for (v = agfstnode(g); v; v = agnxtnode(g, v)) {
	for (e = agfstedge(g, v); e; e = agnxtedge(g, e, v)) {
	    i = AGID(agtail(e));
	    j = AGID(aghead(e));
	    if (i == j)
		continue;
	    /* conductance is 1/resistance */
	    Gm[i][j] = Gm[j][i] = -1.0 / ED_dist(e);	/* negate */
	}
    }

    rv = solveCircuit(nG, Gm, Gm_inv);

    if (rv)
	for (i = 0; i < nG; i++) {
	    for (j = 0; j < nG; j++) {
		GD_dist(g)[i][j] =
		    Gm_inv[i][i] + Gm_inv[j][j] - 2.0 * Gm_inv[i][j];
	    }
	}
    free_array(Gm);
    free_array(Gm_inv);
    return rv;
}