アルゴリズムの準備ができているかどうかを尋ねたかったので、これを行うことができました。mxn要素を持つ行列m(col)xn(row)があります。この要素に中心から始まり、らせん状に回転する位置を指定したいと思います。たとえば、行列3x3の場合、次のように定義された9つの要素があります。
5 6 7
4 9 8
3 2 1
または、unaマトリックス4 x 3の場合、12個の要素があり、定義されています。
8 9 10 1
7 12 11 2
6 5 4 3
または、行列5x2 iには、そのように定義された10個の要素があります。
3 4
7 8
10 9
6 5
2 1
など。基本的には、mxn要素の整数の配列を定義し、値を手動でロードすることを解決しましたが、一般的には、アルゴリズムから自動的に作成された行列のようになります。何かを見つけるのを手伝ってくれる人に感謝します。どうもありがとう。
アップデート
このコードは、私が持っていたいことについて正確に行いますが、デルファイにはありません。0からではなく、1から開始する必要があるのは私だけです。私にとって重要なのは、それがすべてのmatricsmxnに対して有効であるということです。誰が私がそれをデルファイに翻訳するのを手伝ってくれますか?
(defun spiral (rows columns)
(do ((N (* rows columns))
(spiral (make-array (list rows columns) :initial-element nil))
(dx 1) (dy 0) (x 0) (y 0)
(i 0 (1+ i)))
((= i N) spiral)
(setf (aref spiral y x) i)
(let ((nx (+ x dx)) (ny (+ y dy)))
(cond
((and (< -1 nx columns)
(< -1 ny rows)
(null (aref spiral ny nx)))
(setf x nx
y ny))
(t (psetf dx (- dy)
dy dx)
(setf x (+ x dx)
y (+ y dy)))))))
> (pprint (spiral 6 6))
#2A ((0 1 2 3 4 5)
(19 20 21 22 23 6)
(18 31 32 33 24 7)
(17 30 35 34 25 8)
(16 29 28 27 26 9)
(15 14 13 12 11 10))
> (pprint (spiral 5 3))
#2A ((0 1 2)
(11 12 3)
(10 13 4)
(9 14 5)
(8 7 6))
どうもありがとうございました。