直接的“临时”解决方案没有错。它也可以足够干净。
只需注意螺旋是由段构建的。您可以从当前片段旋转90度获得下一个片段。并且每旋转两圈,线段的长度就会增加1。
编辑 插图,这些段编号
... 11 107 7 7 7 6 108 3 3 2 6 108 4 . 1 6 108 4 5 5 5 108 9 9 9 9 9
。
// (di, dj) is a vector - direction in which we move right now int di = 1; int dj = 0; // length of current segment int segment_length = 1; // current position (i, j) and how much of current segment we passed int i = 0; int j = 0; int segment_passed = 0; for (int k = 0; k < NUMBER_OF_POINTS; ++k) { // make a step, add 'direction' vector (di, dj) to current position (i, j) i += di; j += dj; ++segment_passed; System.out.println(i + " " + j); if (segment_passed == segment_length) { // done with current segment segment_passed = 0; // 'rotate' directions int buffer = di; di = -dj; dj = buffer; // increase segment length if necessary if (dj == 0) { ++segment_length; } } }
要改变原来的方向,看的原始值
di和
dj。要将旋转切换为顺时针方向,请参见如何修改这些值。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)