2

直角三角形があり、特定の点がその三角形の斜辺上にあるかどうかを確認したい。すべての点は、浮動小数点変数ではなく、単純な整数です。

(壊れた画像、元の場所https://tape.bplaced.net/dl/example2.png)

編集: すべての緑色の四角形は斜辺にあり、白い四角形はそうではありません。x、y、コーナーの座標、およびテストしたいポイントの座標を知っています。すべての座標は整数です (図では y が少しずれています。申し訳ありません)。

4

3 に答える 3

2

これはうまくいくかもしれません:

あなたは三角形を知っているので、仮説の関数を作成するだけです.あなたの例ではy = 5x/12. という点が得られた場合、x = 6, y = 3これらの変数を使用して、それが正しいかどうかを確認できます3 = roundup(5*6/12)。そうであれば、ポイントは三角形上にあり、そうでなければ、そうではありません。

于 2010-02-03T18:23:46.323 に答える
1

処理するケースは 2 つあります。1 つは斜辺が垂直で、もう 1 つは垂直でない場合です。

垂直の場合、問題の点に斜辺の範囲内の値があるかどうかを確認するだけです。

非垂直の場合、端点を使用して斜辺の方程式を導き出します。直線の式は y = mx + b です。ここで、m は勾配であり、dx/dy です。次に、b = y - mx です。

m と b が得られたので、候補点の x と y が式を満たすかどうかを確認します (点の y は m * x + b に等しいか?)。

ただし、実際には、正確に等しいかどうかではなく、近いかどうかを確認する必要があるため、ポイントの y が (m * x + b) の小さなデルタ内にあるかどうかを確認してください。

于 2010-02-03T18:38:51.063 に答える
0

私はこれを始めます:

points = an array;
delta=y/x
acc = 0
j = 0
for (i=0;i<x;i++){
  points.push(i, j)
  acc+=delta
  while (acc > 1){
     acc-=1
     j++
     points.push(i,j)
  }
}

そして、斜辺にすべての点があります。線を描画するためのより優れたアルゴリズムがありますが、これが出発点になる可能性があります。

于 2010-02-03T18:18:19.047 に答える