此問題類似於在nD空間(此處爲3D)中繪製直線。因此,您可以使用Bresenham/DDA類算法生成具有公平項目分佈的序列(而不是像素移位的公平分佈)。任意found example
(我沒有檢查它的正確性 - 或許師dm/2
可能產生比錯誤加倍更壞的結果):
void plotLine3d(int x0, int y0, int z0, int x1, int y1, int z1)
{
int dx = abs(x1-x0), sx = x0<x1 ? 1 : -1;
int dy = abs(y1-y0), sy = y0<y1 ? 1 : -1;
int dz = abs(z1-z0), sz = z0<z1 ? 1 : -1;
int dm = max(dx,dy,dz), i = dm; /* maximum difference */
x1 = y1 = z1 = dm/2; /* error offset */
for(;;) { /* loop */
setPixel(x0,y0,z0);
if (i-- == 0) break;
x1 -= dx; if (x1 < 0) { x1 += dm; x0 += sx; }
y1 -= dy; if (y1 < 0) { y1 += dm; y0 += sy; }
z1 -= dz; if (z1 < 0) { z1 += dm; z0 += sz; }
}
}
第一色數,y1-y0
第二等替換x1-x0
。相應顏色的成功,如果條件輸出:
{x1 -= dx; if (x1 < 0) { x1 += dm; x0 += sx;
HERE}
來源
2017-10-05 02:37:51
MBo
豈不GRBRBRBRBG或RGRBRBRBGB更加一致? R之間的距離總是2,B之間總是2,G之間總是9(或7)。 – m69