線分を形成するx1、y1とx2、y2があります。写真のように最初の線に平行な別の線x3、y3-x4、y4を取得するにはどうすればよいですか。x1とx2にnを追加するだけで平行線を得ることができますが、それは私が望んでいたことではありません。写真の線を平行にしたいと思います。
13941 次
2 に答える
54
あなたがしたいのは、直交方向に座標をオフセットすることです。ベクトルの計算がわかっている場合は、線の端点間の距離で作成されたベクトルに次の行列を掛けます。
[ 0 -1 ]
[ 1 0 ]
最初の行に点、、、、が含まれている(x1,y1)
と(x2,y2)
しx=x2-x1
ますy=y2-y1
。線の長さ
もあります(表記はご容赦ください)。L = sqrt(x*x+y*y)
次に、次の行を次のようにオフセットする必要があります
[ 0 -1 ] [x]
[ 1 0 ] [y]
=> dx = -y / L
、dy = x / L
これは新しい行の正規化されたオフセットです。
C#のような擬似コードの場合:
var x1 = ..., x2 = ..., y1 = ..., y2 = ... // The original line
var L = Math.Sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))
var offsetPixels = 10.0
// This is the second line
var x1p = x1 + offsetPixels * (y2-y1) / L
var x2p = x2 + offsetPixels * (y2-y1) / L
var y1p = y1 + offsetPixels * (x1-x2) / L
var y2p = y2 + offsetPixels * (x1-x2) / L
g.MoveTo(x1p,y1p) // I don't remember if this is the way
g.LineTo(x2p,y2p) // to draw a line in GDI+ but you get the idea
于 2010-05-13T09:30:30.377 に答える
0
x1とx2にnを加算するとともに、y1とy2にnを減算してみましたか?私はそれがうまくいくかもしれないと思います
于 2010-05-13T09:16:37.180 に答える