2011-07-12 11 views
3

一般に、行または列で配列をトラバースしますが、ここでは角度でトラバースします。 私は何を意味するのかを説明しようとします 角度が45度で、列ではなく(0,0)、次に(0,1)(1,0) (2)、(1,1)、(2,0)など。(私は新しいユーザーであり、許可されていないので、画像をアップロードできませんでした。 しかし、ユーザーが20度のような角度を入力すると、どうやって配列を検索するかを決めることができます。角度で2D配列を移動する

これに類似したアルゴリズムがあるかどうかを知りたいだけですか?プログラミング言語は問題ではないと思います。アルゴリズムチートソートのほうが問題だと思います。 アイデアを歓迎します。 私が探しているものを明確に説明することができない場合は、お気軽にお問い合わせください。

ありがとうございます。

答えて

6

簡単。角度を取ってください(45としましょう)。これはあなたのケースではベクトルv=(1, 1)に相当します。 (これはユニタリベクトル(sqrt(2)/2, sqrt(2)/2)に正規化することができますが、これは必要ありません)

配列のすべての点について、座標は(x, y)です。これらの座標のスカラー積をベクトルで単に実行します。 f(x, y) = scalarProduct((x, y), v)

f(x, y)の値を並べ替えると、あなたが探している "横断"があります!


実際の例です。 ((1,1)

(0,0)=

(0,1)0(1,1)= 1

:スカラー積は あなたのマトリックスは3×3 です。 0,2)(1,1)= 2

(1,0)(1,1)= 1

(1,1)(1,1)= 2

(1,2)。(1,1)= 3

(2,0)(1,1)=

(2,1)、2(1,1)=

(2,2)、3(1,1)= 4

これらのスカラー製品を昇順で注文すると、注文(0,0)、(1,0)、(1,0)、(2,0)、(1,1)、(0、 2)、(2,1)...


そして、あなたは、角度20でそれをしたい場合は、v=(cos(20), sin(20))

v=(1, 1)のすべての出現箇所を置き換えます

ここに幾何学的解釈の図があります。スカラ積は、ベクトルv(赤色)と青色線との交点に対応する。

Illustration

+0

画像をアップロードできますか?あなたのソリューションはモルソンカーブのように見えますか? – Bytemain

+0

モートン曲線ではありませんが、私たちはOPの問題について意見を異にすると思います。 – Fezvez

+0

あなたのイメージをありがとうございますが、私はソートされたポイントのExcelで2次元図を考えました。しかし、興味深いですね。 – Bytemain

0

たとえば、モルソン曲線やz曲線などの空間充填曲線を探したいとします。配列を4つのタイルに細分する場合は、ヒルベルト曲線または無限大曲線を探したい場合があります。

+0

感謝@Jitmaro。私はそれを見ていきます。 –

1

毎に開始点(各行の左端の点)について、所定の角度の終点を決定するために三角法を使用します。 tan(角度)は(配列の高さの差/幅)として定義されるため、高さの差はtan(angle)*(配列のwitdh)です。あなたは高さの差を一度計算しなければなりません。 y +高さの差が配列の高さより大きい場合は、高さを減算するだけです(またはモジュロ演算子を使用します)。

今、あなたは出発点と終了点を持っていることを、あなたはの間でポイントを決定するためにブレゼンハムのアルゴリズムを使用することができます。http://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm

+0

おかげで私はそれthroug行くだろう.. –

関連する問題