質問があります私は線を知っています私はその傾き(m)とその上の点を知っていますA(x、y)この線上の点(実際には2つ)を点からの距離(d)で計算するにはどうすればよいですか? ??? A(x、y)を距離で通過する線上のピクセルの強度を見つけるためにこれを求めています。この場合の距離はピクセル数になります。
5 に答える
線をポイントスロープではなくパラメトリック形式に変換することをお勧めします。つまり、ラインのパラメトリック関数は、あるパラメーターtの値に対して、そのラインに沿ったポイントを返します。線を参照点として表し、その点を通る線の方向を表すベクトルを表すことができます。そうすれば、ポイントAからdユニットを前後に移動して、他のポイントを取得できます。
線の傾きはmなので、方向ベクトルは<1、m>です。xの1ピクセルごとにyのmピクセルを移動するため。その方向ベクトルを単位長に正規化して、ベクトルの大きさで除算します。
マグニチュード=(1 ^ 2 + m ^ 2)^(1/2) N = <1、m>/マグニチュード=<1 /マグニチュード、m/マグニチュード>
正規化された方向ベクトルはNです。これでほぼ完了です。行の方程式をパラメーター化された形式で記述する必要があります。
f(t)= A + t * N
これはベクトル数学を使用します。具体的には、(パラメーターtとベクトルNの)スカラーベクトル乗算と( Aとt * Nの)ベクトル加算です。関数fの結果は、線に沿った点です。あなたが探している2つのポイントはf(d)とf(-d)です。選択した言語でそれを実装します。
これまでの他のすべての回答とは対照的に、この方法を使用する利点は、この方法を簡単に拡張して、「無限」の勾配を持つ線をサポートできることです。つまり、x = 3のような垂直線です。実際には勾配は必要ありません。必要なのは、正規化された方向ベクトルだけです。縦線の場合は<0、1>です。これが、計算がより単純で特異点が少ないため、グラフィックス操作でベクトル数学がよく使用される理由です。最初は少し複雑に思えるかもしれませんが、ベクトル演算のコツをつかむと、多くのコンピュータグラフィックスタスクがはるかに簡単になります。
出発地点 -(x0, y0)
終点 -(x1, y1)
(xt, yt)
始点から終点に向かって距離 dtの点を見つける必要があります。
始点と終点の間の距離は、d = sqrt((x1 - x0)^2 + (y1 - y0)^2)
距離の比を、t = dt / d
それからポイント(xt, yt) = (((1 - t) * x0 + t * x1), ((1 - t) * y0 + t * y1))
の場合0 < t < 1
、点は線上にあります。
の場合t < 0
、点は の近くの線の外側にあり(x0, y0)
ます。
の場合t > 1
、点は の近くの線の外側にあり(x1, y1)
ます。
座標 px、py、および開始点 A の座標 ax および ay を使用して、見つけようとしている点を P と呼びましょう。勾配 m は、X の変化に対する Y の変化の比率にすぎないため、点 P が A から s の距離にある場合、その座標は px = ax + s および py = ay + m * s です。ピタゴラスを使用すると、A から P までの距離 d は d = sqrt(s * s + (m * s) * (m * s)) になります。P を A から特定の D 単位離れた位置にするには、s を s = D/sqrt(1 + m * m) として求めます。