0

WPFとC#の形状としての2本の線、2本のパス、または2本のポイントリストの場合、交差点を検出し、交差点を丸い形で描画して、これらの2本の線が接続されていないことを目に見えるようにする方法を知っている人はいますか? MS Visioのような)?いくつかのコードが役立ちますが、これを行うという原則が必要です。ありがとう。

4

2 に答える 2

1

この関連する質問から、基本的に、線分は点とベクトルの組み合わせであると見なすことができます。1つを「原点」として選択し、もう1つのポイントのXとYからそのXとYを減算して「デルタ」を生成することにより、このフォームに2つのポイントを取得できます。他の線分についても同じようにします。

ここで、これら2つのベクトルが交差する場合、各ベクトルに1つずつ適用できる、2つのスカラーがあり、対応するベクトルと同一直線上にあり、原点とYの間のXとYのデルタを表す短いベクトルを生成します。交差点。これらのスカラーは、2つのベクトルの外積の関数によって見つけることができます。正確な計算については、関連する質問を参照してください。最後に、2つの線分が交差するためには、交差するベクトルが元の定義された長さの範囲内で交差する必要があります。つまり、交差点までのベクトルの長さを表す両方のスカラーはである必要があります0 < s < 1

于 2012-09-10T20:28:20.623 に答える
1

同次座標を使用して、必要なものを簡単に取得する方法があります。点を表すには、aをP1使用しVector3z座標を 1 に等しくします。

P1 = [x1, y1, 1]
P2 = [x2, y2, 1]

2 点を結ぶ線はL12 = CROSS(P1,P2) = [a, b, c]CROSS、 はベクトルの外積であり、線の方程式は ですa*x+b*y+c=0

2行ある場合

L12 = [a,b,c]
L34 = [e,f,g]

これらの 2 つの線の交点はQ = CROSS(L12,L34) = [qx,qy,qw]座標

x = qx/qw
y = qy/qw

例:ポイントをに接続し、L12ポイント(1,1)をに接続する 2 本の線。2 つの直線の交点を見つけます。(2,8)L34(4,-2)(9,3)

L12 = CROSS( [1,1,1], [2,8,1] ) = [-7, 1, 6]     //eq: -7*x+y+6=0
L34 = CROSS( [4,-2,1], [9,3,1] ) = [-5, 5, 30]   //eq: -5*x+5*y+30=0
Q = CROSS([-7,1,6], [-5,5,30]) = [0, 180, -30]
x = 0/(-30) = 0
y = 180/(-30) = -6

GeoGebra のスクリーンショット: GeoGebra4

于 2012-09-10T20:47:39.753 に答える