我的Grid类出了什么问题?

时间:2017-01-29 21:18:51

标签: java processing

我正在尝试创建一个Grid类来在行和列上排列屏幕元素。方法cellXCenter()和cellYCenter()应该返回网格上给定i单元格的坐标。

当运行此代码时,应该在每个网格单元格中绘制一个椭圆,只给出最后一个元素正确的坐标。

我做错了什么?

Grid grid;

int columns = 3;
int rows = 2;



 void setup() {
   size(900,600);
   background(0);
   grid = new Grid(columns,rows);
   fill(255,0,0);
   for (int i = 0 ; i < columns * rows; i++) {
     ellipse(grid.cellXCenter(i+1),grid.cellYCenter(i+1),100,100); 
   }

 }


class Grid {
  //grid width, height, number of columns, number of rows
  int gw; 
  int gh; 
  int cols; 
  int rows;

  int cells; //total de celdas desde 1
  float cellWidth;
  float cellHeight;

  Grid(int cols_, int rows_) {
   gw = width;
   gh = height;
   cols = cols_; 
   rows = rows_; 
   cells = rows * cols;
   cellWidth = gw / cols;
   cellHeight = gh / rows;
  }

  int rowPos(int index_) {   
    //all index arguments one based
    float i = index_; 
    int position = (int)Math.ceil(i/cols);    
    return position;
  }

  int colPos(int index_) {
    int i = index_;
    int position = i - (cols * (rowPos(i) -1));
    return position;    
  }

  float cellX(int index_) {
    int i = index_;
    float xPos = gw * (colPos(i)/cols);
    return xPos;
  }

  float cellXCenter(int index_) {
    int i = index_;
    float xCenterPos = cellX(i) - cellWidth/2;
    return xCenterPos;    
  }

  float cellY(int index_) {
    int i = index_;
    float yPos = gh * (rowPos(i)/rows);
    return yPos;
  }

  float cellYCenter(int index_) {
    int i = index_;
    float yCenterPos = cellY(i) - cellHeight/2;
    return yCenterPos;
  }

}

1 个答案:

答案 0 :(得分:0)

你需要做一些调试。我首先打印出每个单元格的位置:

-150.0, -150.0
-150.0, -150.0
750.0, -150.0
-150.0, 450.0
-150.0, 450.0
750.0, 450.0

打印出来:

{{1}}

所以你可以看到除了你的一个单元格之外的所有单元格都有负坐标,这会导致它们被拉出窗口的边缘。

现在您需要继续调试以找出这些值为负值的原因。添加更多打印语句,以确切了解代码中发生了什么,并找到不符合预期的行。

如果您将其缩小到几行并不符合您的预期,那么您可以发布更具体的问题以及MCVE。祝你好运。