ラインを非常に細いポリゴンに変換しようとしていますが、ラインの傾き/角度を考慮する方法がわかりません。
x1,y1 と x2,y2 の線分があるとします。これらの値が 0,0 と 100,0 (完全に平坦な直線) の場合、両方の y ポイントに 0.00001 を追加して 2 つの新しいポイントを作成するだけで、非常に細いポリゴンを作成できます。
線の傾きを考慮して、任意の方向に向かう線で同じことを達成するにはどうすればよいですか?
ありがとう。
ラインを非常に細いポリゴンに変換しようとしていますが、ラインの傾き/角度を考慮する方法がわかりません。
x1,y1 と x2,y2 の線分があるとします。これらの値が 0,0 と 100,0 (完全に平坦な直線) の場合、両方の y ポイントに 0.00001 を追加して 2 つの新しいポイントを作成するだけで、非常に細いポリゴンを作成できます。
線の傾きを考慮して、任意の方向に向かう線で同じことを達成するにはどうすればよいですか?
ありがとう。
クロス積を z 軸 (つまり3 次元) で使用して、線に直角な線の方向を決定できます。
(dx,dy,0) cross (0,0,1)
条件がキャンセルされることが判明し、得られるものは次のとおりです (免責事項: サインが間違った方向にある可能性があります):
(-dy,dx,0)
次に、その方向(線と同じ長さ)を正規化し、線幅の半分を掛ける場合です。次に、計算したばかりの方向に線の端をオフセットします (正と負の両方のバージョン)。
正しい順序 (時計回りまたは反時計回り) でポイントを生成できるように、線の方向がどの象限にあるかに基づいて利き手を計算する必要があります。
垂直線を見つけて、この方向に 2 つの点を取得すると、常に同じ厚さになります。
ベクトル (x, y) の 2 つの垂線は (-y, x) と (y, -x) なので、次のようになります。
ベクトルは (x2 - x1, y2 - y1) であるため、これに垂直なベクトルは次のいずれかになります。
(y1 - y2, x2 - x1) または (y2 - y1, x1 - x2)
1 つを選択し、それを各ポイントに追加して、対応するポイントを取得します。最初の 1 つを選択した場合、追加の 2 つのポイントは次のようになります。
(x1 + d(y1 - y2), y1 + d(x2 - x1)) and (x2 + d(y1 - y2), y2 + d(x2 - x1))
d は線の太さです。
デルタ = 0.001 と仮定します。
次に、探しているポリゴンは次のとおりです。
(x1, y1)
(x1 + 0.001 * (y2 - y1), y1 - 0.001 * (x2 - x1))
(x2 + 0.001 * (y2 - y1), y2 - 0.001 * (x2 - x1))
(x2, y2)