2

如果您正在查看 0、1、2、3 甚至 N 维的像素数组,则可以通过使用如下指示函数轻松判断某个像素是否落在其中的正方形或矩形网格线上所以(我将使用命令式伪代码来明确我在说什么,但我真的只对更一般类型的网格的指标函数中的约束和条件感兴趣):

/* define the array of pixels in however many dimensions you want */

//define the dimensions of the array
int x-dimension-length = <some positive integer>;
int y-dimension-length = <some positive integer>;
int z-dimension-length = <some positive integer>;
[...] //you could keep gong for even higher dimensions


/* define CONSTRAINTS (for the square or rectangular case) */

//define the height and width of the grid boxes within the grid (contstraints on a square/rectangular grid)
int horizontalSpacingBetweenGridlines = <non-negative integer>;
int verticalSpacingBetweenGridlines = <non-negative integer>;


/* end definition of CONSTRAINTS */


/* define the arrays to draw the grids on */
// -- assumes that the arrays here are intialised to contain all zeros:    

//0-dimensional (degenerate) example:
int point = 0;

//1d example:
int [] OneDimensionalArray = int[x-dimension-length];

//(2d example)
int [] TwoDimensionalArray = int[x-dimension-length][y-dimension-length];

//(3d example)
int [] ThreeDimensionalArray = int[x-dimension-length][y-dimension-length][z-dimension-length];


/* Indicator functions */

/* zero-dimensional (degenerate) case */

//if a point falls on a gridline, degenerate example 
boolean doesAPointFallOnAGridLine0D() {     
 if (point % horizontalSpacingBetweenGridlines == 0) {
   return true;
 }

/* one-dimensional case */

//decide if a point in the 1D array at index <x-coordinateFrom1DArray> falls on a gridline 
boolean doesAPointFallOnAGridLine1D(int x-coordinateFrom1DArray) {
if (x-coordinate % horizontalSpacingBetweenGridlines == 0) {
    return true;
 }
}

/* two-dimensional case */

//decide if a point in the 2D array at index <x-coordinateFrom2DArray>,<y-coordinateFrom2DArray> falls on a gridline 
boolean doesAPointFallOnAGridLine2D(int x-coordinateFrom2DArray, int y-coordinateFrom2DArray) {
 if((x-coordinateFrom2DArray % horizontalSpacingBetweenGridlines == 0) && (y-coordinateFrom2DArray % verticalSpacingBetweenGridlines == 0)) {
    return true;
 }
}

/* [and so on for higher-and-higher-dimensional spaces...] */

我的问题是,一般来说,对于不同类型的非正方形和非矩形网格(例如,三角形、六边形、八边形等),指标函数和约束是什么样的,是否有规范的参考工作可以讨论关于构建那种指示函数以及它对不同网格形状所需的约束?

Knuth似乎在这一点上。

这是一个非常普遍的数学问题,因此它可能有一个名称/规范的解决方案。

顺便说一句,我对 n 维中的六边形网格最感兴趣,但我不想编写一个只适用于那些使用线性代数而不是适当的布尔指标函数的笨拙的一次性实现,我宁愿想知道如何以正确的方式解决这些问题。

4

0 回答 0