60 int moveableCells = 0;
61 float yBinArea = 0, yCumArea = 0;
62 int yBinStart = 0, yBinCount = 0;
63 int xBinCount, xBinStart;
64 float xBinArea, xCumArea;
67 float curOldEdge, curNewEdge;
79 allCells[moveableCells++] = cell;
90 for(c=0; c<moveableCells; c++) {
97 if (yCumArea >= totalArea*(y+1)/numBins && yBinArea > 0) {
102 printf(
"y-bin %d count=%d area=%f\n",y,yBinCount, yBinArea);
106 xBinCount = 0, xBinStart = 0;
107 xBinArea = 0, xCumArea = 0;
112 for(c2=0; c2<yBinCount; c2++) {
113 xCell = binCells[c2];
117 curOldEdge = xCell->
m_x;
119 printf(
"%.3f ", xCell->
m_x);
122 if (xCumArea >= yBinArea*(x+1)/numBins && xBinArea > 0) {
127 if ((curNewEdge-curOldEdge)>maxMovement) curNewEdge = curOldEdge + maxMovement;
128 if ((curOldEdge-curNewEdge)>maxMovement) curNewEdge = curOldEdge - maxMovement;
131 printf(
"->\tx-bin %d count=%d area=%f (%f,%f)->(%f,%f)\n",x, xBinCount, xBinArea,
132 curOldEdge, lastOldEdge, curNewEdge, lastNewEdge);
135 stretch = (curNewEdge-lastNewEdge)/(curOldEdge-lastOldEdge);
138 for(c3=xBinStart; c3<xBinStart+xBinCount; c3++) {
139 if (curOldEdge == lastOldEdge)
140 binCells[c3]->
m_x = lastNewEdge+(c3-xBinStart)*(curNewEdge-lastNewEdge);
142 binCells[c3]->
m_x = lastNewEdge+(binCells[c3]->
m_x-lastOldEdge)*stretch;
152 lastOldEdge = curOldEdge;
153 lastNewEdge = curNewEdge;
int cellSortByX(const void *a, const void *b)
Sorts cells by either position coordinate.
int cellSortByY(const void *a, const void *b)
ConcreteCell ** g_place_concreteCells
float getCellArea(const ConcreteCell *cell)
ABC_NAMESPACE_IMPL_START int g_place_numCells