第2の座標を知ることなく、直線における点/ピクセルを得ます

ティム・スタック:

Iから延びている機能構築しようとしている特定の座標指定された角度、及びそれが黒画素に出会うまで、そのライン上の画素をループします。

角度は、例えば、180度の場合、これは容易に実現されます。この場合、検索は、各反復において座標列に1を加え、下方に延びていることになります。しかし、例えば10度の角度はより複雑です。従って私は、おそらく数学的にピクセル位置Xで次の画素を計算する必要があります

この回答予想通り、y軸上の値が変化しないのと同様の問題のは、私を助けていません。

import numpy as np
angle = 90*np.pi/180

x = np.arange(0, 10)
y = np.round(np.sin(angle)*x).astype(int)
print([(x, y) for x, y in zip(x, y)])

版画: [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9)]
私は変更にy軸を期待していないので、90度の角度を考えると、間違っています。

この他の質問への答えは私が持っていない2番目の「終了」座標を、必要とします。

最後に、私が見つかりました。この質問残念ながら有効な答えを持っていません。問題のコードは何のオフセットを返さないように思われるが、その意味、私はわからないのだ、浮かびます。私は山車を丸めるときは、オフセットが間違っています:

import numpy

def pol2cart(rotdist, cwangle):
    x = rotdist * numpy.cos(cwangle)
    y = rotdist * numpy.sin(cwangle)
    return round(x), round(y)

print(pol2cart(1, 180))

版画:(-1.0, -1.0)予想出力されている間、(1.0, 0.0)

上記の答えは、しかしまた、各繰り返しでオフセット一貫したを与えるだろう。これは三つの異なる角度(水平、垂直、45度)をもたらすであろう。これはない私は、関数に入れ、その後、別の角度で終わるだろうとして、必要に応じているもの。

EDIT: 入力の例

下の画像は、画像データの一例です。赤い点は、可能な開始位置を示しています。この点は示されていない方向を有しています。赤い点がまっすぐに指摘されている場合、その方向が180度です。

ネストされた辞書は、各画素の座標(行、列)とカラー値が含まれています。 {1: {1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 255, 8: 255,...

ここでは、画像の説明を入力します。

マークSetchell:

私はあなたがブレゼンハム使用することができると思う「ラインアルゴリズム」で説明ここにウィキペディアにします。

あなたはより長いラインを想像した場合、私はあなたが唯一の開始点となしエンドポイントを持っていると述べた知っているが、あなたは旅の角度(方向)を知っている、とあなたは、長方形の中で最も長い直線が対角線であることを知っていますあなたの開始点から始まり、右方向に向かって、斜めの、あなたはそのブレゼンハムアルゴリズムでもう一方の端のためにあなたの長方形と利用の縁を越えて生成し、エンドポイントすることができます。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=4701&siteId=1