基于螺旋队列逻辑的螺旋运动实现
螺旋队列算法的逆向方法,控制两轴马达按螺旋轨迹运动,如下图。
1.螺旋队列算法分析
下图是螺旋队列。设1的坐标是(0,0),x方向向右为正,y方向向下为正,例如,7的坐标为(-1,-1),2的坐标为(1,0)。编程实现输入任意一点坐标(x,y),输出所对应的数字!(转自网络)
每圈最大值max=(2*c+1)(2*c+1),c为由内往外的圈数。
这些基准值与max之间的差分别是1C(上边),3C(左边),5C(下边),7C(右边)(C表示当前圈数),在上边和下边,y坐标表示(或等于)圈数(即C=y),而在左边和右边,x坐标表示(或等于)圈数(即C=x)。因此前面提到的差值又可用坐标表示成1y,3x,5y,7x。
代码实现:
private static Object spiral(int x, int y)
{
int c = max(abs(x), abs(y));// 当前坐标所在圈
int max = (c * 2 + 1) * (c * 2 + 1);// 当前圈上最大值
if (y == -c) { // 上边
return max + (x + y);
} else if (x == -c) {
// 左边
return max + (3 * x - y);
} else if (y == c) {
// 下边
return max + (-x - 5 * y);
} else {