Changeset 4942:851c6a6db058 in orange


Ignore:
Timestamp:
07/07/08 12:26:39 (6 years ago)
Author:
miha <miha.stajdohar@…>
Branch:
default
Convert:
7e3e4e262f5064442c3f4443cf3be665091fbb27
Message:

added FR - weighted

Location:
source/orangeom
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • source/orangeom/networkoptimization.cpp

    r4933 r4942  
    280280    return 0; 
    281281} 
    282 int TNetworkOptimization::fruchtermanReingold(int steps) 
     282int TNetworkOptimization::fruchtermanReingold(int steps, bool weighted) 
    283283{  
    284284    /* 
     
    351351        // calculate attractive forces 
    352352        //cout << "attractive" << endl; 
    353         for (j = 0; j < nLinks; j++) 
    354         { 
    355             //int v = links[j][0]; 
    356             //int u = links[j][1]; 
    357             int v = links[0][j]; 
    358             int u = links[1][j]; 
    359  
    360             double difX = pos[0][v] - pos[0][u]; 
    361             double difY = pos[1][v] - pos[1][u]; 
    362  
    363             double dif = sqrt(difX * difX + difY * difY); 
    364  
    365             double dX = difX * dif / k; 
    366             double dY = difY * dif / k; 
    367  
    368             disp[v][0] = disp[v][0] - dX; 
    369             disp[v][1] = disp[v][1] - dY; 
    370  
    371             disp[u][0] = disp[u][0] + dX; 
    372             disp[u][1] = disp[u][1] + dY; 
     353        if (weighted) 
     354        { 
     355            for (j = 0; j < nLinks; j++) 
     356            { 
     357                //int v = links[j][0]; 
     358                //int u = links[j][1]; 
     359                int v = links[0][j]; 
     360                int u = links[1][j]; 
     361     
     362                double difX = pos[0][v] - pos[0][u]; 
     363                double difY = pos[1][v] - pos[1][u]; 
     364     
     365                double dif = sqrt(difX * difX + difY * difY); 
     366                 
     367                double *w = graphStructure->getEdge(v,u); 
     368                 
     369                double dX = difX * dif / k * (*w); 
     370                double dY = difY * dif / k * (*w); 
     371     
     372                disp[v][0] = disp[v][0] - dX; 
     373                disp[v][1] = disp[v][1] - dY; 
     374     
     375                disp[u][0] = disp[u][0] + dX; 
     376                disp[u][1] = disp[u][1] + dY; 
     377            } 
     378        } 
     379        else 
     380        { 
     381            for (j = 0; j < nLinks; j++) 
     382            { 
     383                //int v = links[j][0]; 
     384                //int u = links[j][1]; 
     385                int v = links[0][j]; 
     386                int u = links[1][j]; 
     387     
     388                double difX = pos[0][v] - pos[0][u]; 
     389                double difY = pos[1][v] - pos[1][u]; 
     390     
     391                double dif = sqrt(difX * difX + difY * difY); 
     392     
     393                 
     394                 
     395                double dX = difX * dif / k; 
     396                double dY = difY * dif / k; 
     397     
     398                disp[v][0] = disp[v][0] - dX; 
     399                disp[v][1] = disp[v][1] - dY; 
     400     
     401                disp[u][0] = disp[u][0] + dX; 
     402                disp[u][1] = disp[u][1] + dY; 
     403            } 
    373404        } 
    374405        //cout << "limit" << endl; 
     
    10361067} 
    10371068 
    1038 PyObject *NetworkOptimization_fruchtermanReingold(PyObject *self, PyObject *args) PYARGS(METH_VARARGS, "(steps, temperature, coolFactor, hiddenNodes) -> temperature") 
     1069PyObject *NetworkOptimization_fruchtermanReingold(PyObject *self, PyObject *args) PYARGS(METH_VARARGS, "(steps, temperature, coolFactor, hiddenNodes, weighted) -> temperature") 
    10391070{ 
    10401071  PyTRY 
     
    10431074    double coolFactor = 0; 
    10441075    PyObject* hiddenNodes; 
    1045  
    1046     if (!PyArg_ParseTuple(args, "id|dO:NetworkOptimization.fruchtermanReingold", &steps, &temperature, &coolFactor, &hiddenNodes)) 
     1076    bool weighted = false; 
     1077     
     1078    if (!PyArg_ParseTuple(args, "id|dOb:NetworkOptimization.fruchtermanReingold", &steps, &temperature, &coolFactor, &hiddenNodes, &weighted)) 
    10471079        return NULL; 
    10481080 
     
    10811113        graph->coolFactor = coolFactor; 
    10821114     
    1083     if (graph->fruchtermanReingold(steps) > 0) 
     1115    if (graph->fruchtermanReingold(steps, weighted) > 0) 
    10841116    { 
    10851117        PYERROR(PyExc_SystemError, "fruchtermanReingold failed", NULL); 
  • source/orangeom/networkoptimization.hpp

    r4681 r4942  
    6969    ~TNetworkOptimization(); 
    7070     
    71      
    72      
    7371    void random(); 
    74     int fruchtermanReingold(int steps); 
     72    int fruchtermanReingold(int steps, bool weighted); 
    7573    int radialFruchtermanReingold(int steps, int nCircles); 
    7674    int smoothFruchtermanReingold(int steps, int center); 
Note: See TracChangeset for help on using the changeset viewer.