Квадратная спиральная координата

Я хочу найти, если точка (x,y), где x, y целые числа удовлетворяют спиральному квадрату. (0,0) (0,1) (1,1) (1,2) (0,2) (-1,2) (-2,2) (-2,1) (-2,0) и скоро.....

Как мне это сделать? Я хочу логику для функции Java или C++.

3 ответа

Вот некоторая логика псевдокода:

Start with x=0, y=0, dist=0, direction=1
Loop
  x += (++dist * direction)
  WritePoint(x,y)
  y += (++dist * direction)
  WritePoint(x,y)
  direction *= -1
LoopEnd

Возьми это оттуда.

Сделайте эту операцию:

(operator)(operation)(amount)

где оператор чередуется как x,y,x,y,...(используйте для этого оператор%), операция чередуется как +,+,-,-,+,+,-,-,+,+...(снова используйте оператор% для этого) и количество изменений как 1,2,3,...

Это мой ответ. Чтобы решить эту проблему, я нашел индексы, в которых вам нужно изменить направление (до ~ i=36), нарисовав его, а затем нашел формулу, как в IQ-тесте на распознавание образов.

        const size = 100;
  let x = 500;  // 500 is center x
  let y = 500;  // 500 is center y
  let d = 'right';
  let n = 1;

  for (let i = 0; i < 10; i++) {
    // change the direction
    if (i === Math.pow(n, 2) - n) {
      d = 'right';
    } else if (i === Math.pow(n, 2)) {
      d = 'down';
    } else if (i === Math.pow(n, 2) + n) {
      d = 'left';
    } else if (i === Math.pow(n, 2) + (n * 2 + 1)) {
      d = 'up';
      n += 2;
    }

    // get the current x and y.
    if (d === 'right') {
      x += size;
    } else if (d === 'left') {
      x -= size;
    } else if (d === 'down') {
      y += size;
    } else {
      y -= size;
    }
  }
Другие вопросы по тегам