2017-12-02 9 views
-2

私は2つの指定された点の間にあるすべての配列要素を通過するコードを作成しようとしていましたが、私は立ち往生しています。 だが、それはそのような配列だとしましょう:JAVA - 2つの点の間の配列要素を返します

int[][] new_array = new int[100][100]; 

そして、どのように私はのは、これがどのような私です

new_array[17][2]; 

new_array[5][90]; 

を言わせて間を一直線にあるすべての要素を得るのですか実現したい:

enter image description here

+0

私がしたいことをイメージしました https://i.imgur.com/B27PFo3.png –

+0

お手伝いをしてください - サンプルデータと得たい結果をご提供くださいそれ。 – Mureinik

+1

斜面が要素と正確に一致しない場合(つまり、補間、丸めなど)にはどうしたらよいかは不明です。たとえば、[0] [0]から[1] [2]に行くことは必ずしも明確ではありません。しかし、[Bresenham Line Algorithm](https://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm)を最初に検討し、必要に応じて変更することもできます([Wu's algorithm](https:とにかく補間/アンチエイリアスを計画している場合は/en.wikipedia.org/wiki/Xiaolin_Wu%27s_line_algorithm) – hexafraction

答えて

0

あなたの配列はデカルト座標系のfirst quadrantだとしましょう。最初の列が軸Yにあり、最後の行が軸Xにあります。

この仮定を前提とすると、配列の2つの点の間の直線を表す関数を見つけることができます。

あなたは機能を解決する必要があります。

y = ax + b 

それは標準linear functionです。あなたはあなたの方程式(値はab)を見つけることを解決する2つのポイントがあります。

あなたが式を知っているときは、配列内の点をそれぞれx値で評価する必要があります。これを行うと、行の下/上/上にあるすべてのy値が見つかります。

0

@Marcin Pietraszekの回答機能は、このようにして得ることができる次の:(a、b)は、二つの点を考えると

及び(C、D)の両方の点を通る直線を

によって与えられます。
a + K * (x - a) = c AND b + K (y - b) = d 

Kはスカラー番号です。

そして、これはに解決:だから、この条件を満たしている任意の時点(x, y)が直線上になります

y=((d - b) * x - (d - b) * a + (c - a) * b)/(c - a)

マトリックスを通過して、1つずつチェックして、どのポイントが条件を満たすかを確認する必要があります。

セグメント内のポイントのみを必要とする場合は、さらに境界を確認する必要があります。

関連する問題