この問題は、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
を交換してください。場合は、条件の成功に色を対応する出力:
HERE
{x1 -= dx; if (x1 < 0) { x1 += dm; x0 += sx;
}
出典
2017-10-05 02:37:51
MBo
GRBRBRBRBGまたはRGRBRBRBGBは、より一貫性がないでしょうか? Rの間の距離は常に2、Bの間は常に2、Gの間は常に「9」(または7)です。 – m69