直角三角形があり、特定の点がその三角形の斜辺上にあるかどうかを確認したい。すべての点は、浮動小数点変数ではなく、単純な整数です。
(壊れた画像、元の場所https://tape.bplaced.net/dl/example2.png
)
編集: すべての緑色の四角形は斜辺にあり、白い四角形はそうではありません。x、y、コーナーの座標、およびテストしたいポイントの座標を知っています。すべての座標は整数です (図では y が少しずれています。申し訳ありません)。
直角三角形があり、特定の点がその三角形の斜辺上にあるかどうかを確認したい。すべての点は、浮動小数点変数ではなく、単純な整数です。
(壊れた画像、元の場所https://tape.bplaced.net/dl/example2.png
)
編集: すべての緑色の四角形は斜辺にあり、白い四角形はそうではありません。x、y、コーナーの座標、およびテストしたいポイントの座標を知っています。すべての座標は整数です (図では y が少しずれています。申し訳ありません)。
これはうまくいくかもしれません:
あなたは三角形を知っているので、仮説の関数を作成するだけです.あなたの例ではy = 5x/12
. という点が得られた場合、x = 6, y = 3
これらの変数を使用して、それが正しいかどうかを確認できます3 = roundup(5*6/12)
。そうであれば、ポイントは三角形上にあり、そうでなければ、そうではありません。
処理するケースは 2 つあります。1 つは斜辺が垂直で、もう 1 つは垂直でない場合です。
垂直の場合、問題の点に斜辺の範囲内の値があるかどうかを確認するだけです。
非垂直の場合、端点を使用して斜辺の方程式を導き出します。直線の式は y = mx + b です。ここで、m は勾配であり、dx/dy です。次に、b = y - mx です。
m と b が得られたので、候補点の x と y が式を満たすかどうかを確認します (点の y は m * x + b に等しいか?)。
ただし、実際には、正確に等しいかどうかではなく、近いかどうかを確認する必要があるため、ポイントの y が (m * x + b) の小さなデルタ内にあるかどうかを確認してください。
私はこれを始めます:
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)
}
}
そして、斜辺にすべての点があります。線を描画するためのより優れたアルゴリズムがありますが、これが出発点になる可能性があります。