assert(d[v] >= 0);
sqdistances_r[v]= d[v] * d[v];
}
+
+// FOR_VERTEX(v) {
+//
}
void graph_layout_prepare() {
breadth_first_search(v1, sqdistances[v1]);
alpha= 2;
- beta= -log(10)/log(alpha);
+ beta= log(10)/log(alpha);
beta_prime= (1-beta)/2;
printf("alpha=%g beta=%g beta'=%g\n", alpha,beta,beta_prime);
}
-double graph_layout_cost(const Vertices v, const double vertex_areas[N]) {
+double graph_layout_cost(const Vertices v) {
/* For each (vi,vj) computes shortest path s_ij = |vi..vj|
* along edges, and actual distance d_ij = |vi-vj|.
*
*/
//static const double d2_epsilon= 1e-6;
- // double edge_weights[V6<<ESHIFT], vertex_distances[N],
double total_cost=0;
int v1,v2,e, nedges=0;
double totaledgelength=0, meanedgelength, meanedgelength2;
double s2= dist2 * meanedgelength2;
- /* energy = (d/s)^(1-beta) where beta is -log\_{alpha}(10)
+ /* energy = (d/s)^(1-beta) where beta is log\_{alpha}(10)
* energy = ((d/s)^2) ^ (1-beta)/2
* let beta' = (1-beta)/2
*/
- double cost= pow(d2/s2, beta_prime);
+ double cost= (vertex_mean_edge_lengths[v1]) * pow(d2/s2, beta_prime);
- //double s2= s*s + d2_epsilon;
- //double sd2= s2 / d2;
- //double cost_contrib= a1*a2 * (sd2 - 1) / (d2*d2);
- //double cost_contrib= sd2;
-
//printf("layout %03x..%03x dist^2=%d s^2=%g d^2=%g "
//" cost+=%g\n", v1,v2, dist2,
// s2,d2, cost);
total_cost += cost;
}
}
- return total_cost;
+ return total_cost/meanedgelength;
}