Server IP : 162.241.126.129 / Your IP : 3.133.141.201 Web Server : Apache System : Linux 162-241-126-129.cprapid.com 4.18.0-477.27.2.el8_8.x86_64 #1 SMP Fri Sep 29 08:21:01 EDT 2023 x86_64 User : rvway5nu4 ( 1018) PHP Version : 7.4.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /usr/share/graphviz/gvpr/ |
Upload File : |
/* finds node n with root attribute * finds distance minr of closest node * the layout is then scaled out from n so that * a node is put on the smallest circle of radius x*minr * containing n */ BEG_G { node_t ctr; int cx, cy; int x, y; double delx, dely; int newx, newy; node_t n; edge_t e; int i, sc, d, mind = -1; double fact, newr, ang, minr; ctr = node($,aget($,"root")); sscanf (ctr.pos, "%d,%d", &cx, &cy); for (e = fstedge(ctr); e; e = nxtedge(e, ctr)) { if (e.head == ctr) n = e.tail; else n = e.head; sscanf (n.pos, "%d,%d", &x, &y); d = (x-cx)*(x-cx) + (y-cy)*(y-cy); if ((mind == -1) || (d < mind)) mind = d; } minr = (int)sqrt((double)mind); } N [$ != ctr] { sscanf ($.pos, "%d,%d", &x, &y); dely = y - cy; delx = x - cx; d = delx*delx + dely*dely; sc = (int)sqrt((double)(d/mind)); if (sc > 1) { fact = 2.0; for (i=1; i<sc-1;i++) fact *= 2.0; newr = minr*(2.0 - (1.0/fact)); ang = atan2 (dely, delx); newx = newr*cos(ang) + cx; newy = newr*sin(ang) + cy; $.pos = sprintf ("%d,%d", newx, newy); } }