Учитывая, что это внутреннее соглашение, оно полностью зависит от вас: просто выберите один из углов сетки, например. top-lef, как ваше происхождение . (Общее соглашение - использовать верхний левый как источник и нижний правый как [x-max] [y-max].)
Ваша модель может быть чем угодно из одномерной растровой модели или двумерного массива или даже вложенных списков. Выбор модели полностью зависит от варианта использования и требований к производительности. Для вашего случая - вводная домашняя работа - 2d массив - простой и разумный выбор.
Для рисования в ячейке сетки @ (i, j) вам понадобится метод получения координат холста (x, y) данной ячейки сетки:
/** maps grid cell to coordinates of cell */
public Point getCoordinates(int i, int j);
Здесь у вас есть несколько вариантов: если вы вернете центральную точку, например, средняя точка черного квадрата или его относительное происхождение, например его верхние левые координаты? Зависит от того, что вы пытаетесь сделать. Например, если вы собираетесь рендерить маленькие значки в каждой ячейке, API-интерфейс рисования берет верхнюю левую координату изображения, которое вы отрисовываете, поэтому в этом случае целесообразно вернуть начало координат.
Вам также необходимо решить, нужно ли вам сопоставить точку в визуальной сетке с вашими данными. Например, пользователь нажимает на холсте, и вам нужно определить соответствующую ячейку данных. (Вам, вероятно, это не нужно)
/** maps point in canvas to a data cell - returned 'point' is (i, j) */
public Point getIndex (int x, int y);