SparseMatrix A = grid->A;
int n = grid->n, level = grid->level, nc = 0;
int *ia = A->ia, *ja = A->ja;
- // real *a;
int i, j, k, jj, jc, jmax, ni, nj, npicks;
int *mask;
pedge *edges = grid->edges;
assert(n == A->n);
for (i = 0; i < n; i++) matching[i] = UNMATCHED;
- // a = (real*) A->a;
for (i = 0; i < n; i++){
if (matching[i] != UNMATCHED) continue;
xx[i*4 + 2] = meet2.x;
xx[i*4 + 3] = meet2.y;
mid_edges[i] = pedge_wgt_new(2, dim, &(xx[i*4]), wgt);
- //mid_edges[i] = pedge_wgt_new(2, dim, &(xx[i*4]), 1.);
-
}
A_mid = nearest_neighbor_graph(ne, MIN(nneighbors, ne), xx, eps);
nedges_global = grid->n;
edges_global = edges;
drawScene();
- // waitie(5./R->m);
}
#endif
}
nedges_global = grid->n;
edges_global = edges;
drawScene();
- // waitie(5./R->m);
}
#endif
fprintf(stderr,"initial total ink = %f, final total ink = %f, inksaving = %f percent, total ink_calc = %f, avg ink_calc per edge = %f\n", ink0, current_ink, (ink0-current_ink)/ink0, ink_count, ink_count/(real) A->m);
return edges2;
}
-
}
len1 = dist(dim, u1, v1);
len2 = dist(dim, u2, v2);
- //dist1 = MAX(0.1, dist1/(len1+len2+dist1));
dist1 = MAX(0.1, dist1/(len1+len2+0.0001*dist1));
if (flipped){
return -1/dist1;
assert(ca > -0.001);
/* scale compatibility */
- //cs = 2/(len1/len2+len2/len1);
cs = 2/(MAX(len1,len2)/len + len/MIN(len1, len2));
assert(cs > -0.001 && cs < 1.001);
/* visibility compatibility */
- //dist1 = MAX(0.1, dist1/(len1+len2+dist1));
dist1 = cp*ca*cs;
if (flipped){
return -dist1;
int i, j, k, kk, dim, sta, sto;
real maxwgt = 0, len, len_total, len_total0;
int r, g, b;
- // real tt1[3]={0.25,0.5,0.75};
- // real tt2[4]={0.2,0.4,0.6,0.8};
real tt1[3]={0.15,0.5,0.85};
real tt2[4]={0.15,0.4,0.6,0.85};
real *tt;
tt = tt1;
}
for (kk = 1; kk <= mm; kk++){
- //t = kk/(real) (mm+1);
t = tt[kk-1];
for (k = 0; k < dim; k++) {
if (k != 0) fprintf(fp,",");
int j, ii, ii2, np;
assert(npoints >= 2);
- // pedge_print("before doubling edge = ", e);
if (npoints*2-1 > len){
len = 3*npoints;
e->x = REALLOC(e->x, dim*len*sizeof(real));
np = e->npoints = 2*(e->npoints) - 1;
e->edge_length = dist(dim, &(x[0*dim]), &(x[(np-1)*dim]));
- //pedge_print("after doubling edge = ", e);
-
return e;
}
int dim = e->dim;
int np = e->npoints;
int i, left, right, j;
- //real dist_left, dist_right;
real s;
-
/* tention force = ((np-1)*||2x-xleft-xright||)/||e||, so the force is norminal and unitless
*/
- //s = (np-1)*(np-1)/MAX(SMALL, e->edge_length);
s = (np-1)/MAX(SMALL, e->edge_length);
for (i = 1; i <= np - 2; i++){
left = i - 1;
right = i + 1;
- // dist_left = dist(dim, &(x[i*dim]), &(x[left*dim]));
- // dist_right = dist(dim, &(x[i*dim]), &(x[right*dim]));
for (j = 0; j < dim; j++) force[i*dim + j] += s*(x[left*dim + j] - x[i*dim + j]);
for (j = 0; j < dim; j++) force[i*dim + j] += s*(x[right*dim + j] - x[i*dim + j]);
}
}
-
-#if 0
-static void edge_tension_force2(real *force, pedge e){
- /* in this version each node is pulled towards its original position on the line */
- real *x = e->x;
- int dim = e->dim;
- int np = e->npoints;
- int i, j;
- //int left, right;
- //real dist_left, dist_right;
- real s;
-
-
- /* tention force = ((np-1)*||2x-xleft-xright||)/||e||, so the force is norminal and unitless
- */
- s = .1/MAX(SMALL, e->edge_length);
- for (i = 1; i <= np - 2; i++){
- //left = i - 1;
- // right = i + 1;
- // dist_left = dist(dim, &(x[i*dim]), &(x[left*dim]));
- // dist_right = dist(dim, &(x[i*dim]), &(x[right*dim]));
- for (j = 0; j < dim; j++) force[i*dim + j] += s*((i*x[0*dim + j]+(np-1-i)*x[(np-1)*dim + j])/(np-1) - x[i*dim + j]);
- }
-}
-#endif
-
static void edge_attraction_force(real similarity, pedge e1, pedge e2, real *force){
/* attrractive force from x2 applied to x1 */
real *x1 = e1->x, *x2 = e2->x;
}
e1 = edges[i];
x = e1->x;
- //edge_tension_force2(force_t, e1);
edge_tension_force(force_t, e1);
for (j = ia[i]; j < ia[i+1]; j++){
e2 = edges[ja[j]];
fnorm_a = MAX(SMALL, norm(dim*(np - 2), &(force_a[1*dim])));
edge_length = e1->edge_length;
- // fprintf(stderr,"tension force norm = %f att force norm = %f step = %f edge_length = %f\n",fnorm_t, fnorm_a, step, edge_length);
for (j = 1; j <= np - 2; j++){
for (k = 0; k < dim; k++) {
x[j*dim + k] += step*edge_length*(force_t[j*dim+k] + K*force_a[j*dim+k])/(sqrt(fnorm_t*fnorm_t + K*K*fnorm_a*fnorm_a));
}
}
-
- /*
- fprintf(stderr,"edge %d",i);
- for (j = 0; j < np; j++){
- if (j != 0) fprintf(stderr,",");
- fprintf(stderr,"{");
- for (k = 0; k < dim; k++) {
- if (k != 0) fprintf(stderr,",");
- fprintf(stderr,"%f", x[j*dim+k]);
- }
- fprintf(stderr,"}");
- }
- fprintf(stderr,"\n");
- */
}
step = step*0.9;
int i, j, jj;
int use_value_for_clustering = TRUE;
- //int use_value_for_clustering = FALSE;
-
SparseMatrix BB;
/* B may contain negative entries */
B = SparseMatrix_new(1, 1, 1, MATRIX_TYPE_REAL, FORMAT_COORD);
ia = A->ia; ja = A->ja;
- //SparseMatrix_print("A",A);
start = clock();
for (i = 0; i < ne; i++){
for (j = ia[i]; j < ia[i+1]; j++){
} else if (compatibility_method == COMPATIBILITY_FULL){
dist = edge_compatibility(edges[i], edges[jj]);
}
- /*
- fprintf(stderr,"edge %d = {",i);
- pedge_print("", edges[i]);
- fprintf(stderr,"edge %d = {",jj);
- pedge_print("", edges[jj]);
- fprintf(stderr,"compatibility=%f\n",dist);
- */
if (fabs(dist) > tol){
B = SparseMatrix_coordinate_form_add_entries(B, 1, &i, &jj, &dist);
}
}
C = SparseMatrix_from_coordinate_format(B);
- //SparseMatrix_print("C",C);
SparseMatrix_delete(B);
B = C;
if (Verbose > 1)
if (alpha == M_PI/2){
return ccord;
} else {
- // assert(dnorm >= MIN(-1.e-5, -1.e-5*bnorm));
return ccord + sqrt(MAX(0, dnorm))/tan(alpha);
}
}
-
-
-
-
-
-
-
-
/* ink:
* Compute minimal ink used the input edges are bundled.
* Assumes tails all occur on one side and heads on the other.
point_t* sources = N_NEW(numEdges, point_t);
point_t* targets = N_NEW(numEdges, point_t);
double inkUsed;
- //double eps = 1.0e-2;
double eps = 1.0e-2;
double cend = 0, cbegin = 0;
double wgt = 0;
- // fprintf(stderr,"in ink code ========\n");
ink_count += numEdges;
*ink0 = 0;
begin = addPoint (begin, scalePoint(sources[i], e->wgt));
end = addPoint (end, scalePoint(targets[i], e->wgt));
wgt += e->wgt;
- //fprintf(stderr,"source={%f,%f}, target = {%f,%f}\n",sources[i].x, sources[i].y,
- //targets[i].x, targets[i].y);
}
begin = scalePoint (begin, 1.0/wgt);
if (numEdges == 1){
*meet1 = begin;
*meet2 = end;
- //fprintf(stderr,"ink used = %f\n",*ink0);
free (sources);
free (targets);
return *ink0;
inkUsed = (bestInk (sources, numEdges, begin, mid, eps, meet1, angle_param)
+ bestInk (targets, numEdges, end, mid, eps, meet2, angle_param));
- //fprintf(stderr,"beg={%f,%f}, meet1={%f,%f}, meet2={%f,%f}, mid={%f,%f}, end={%f,%f}\n",begin.x, begin.y, meet1->x, meet1->y, meet2->x, meet2->y,
- //mid.x, mid.y, end.x, end.y);
- //fprintf(stderr,"ink used = %f\n",inkUsed);
- // fprintf(stderr,"{cb,ce}={%f, %f} end={%f,%f}, meet={%f,%f}, mid={%f,%f}\n",cbegin, cend, end.x, end.y, meet2->x, meet2->y, mid.x, mid.y);
free (sources);
free (targets);
return inkUsed;
}
-
double ink1(pedge e){
-
-
real *x, xx, yy;
real ink0 = 0;