1

たとえば、(2,3) から (42,28) までの線を引いた場合、その線上のすべての点を Point リストで取得するにはどうすればよいでしょうか? スロープを使ってみましたが、コツがつかめません。明確にするために、線がカバーするすべてのピクセルが必要です。そのため、行を「クリック可能」にすることができます。

4

2 に答える 2

3

これは数学の問題です。直線の方程式は次のとおりです。

y = mx + c

したがって、勾配 (m) と切片 (c) を計算し、x の値を代入して y の値を取得する必要があります。

しかし、「線上のすべての点」とはどういう意味ですか? x と y が実数の場合、点は無数にあります。

于 2012-10-31T17:17:29.080 に答える
1

式 (x-x1)/(x1-x2) = (y-y1)/(y1-y2) を使用できます。また、x 値が 2 から 42 の範囲の点が線上にあり、それらに関連付けられた y 値を見つける必要があることがわかっています。結果の y 値のいずれかが整数でない場合は、正しく近似する必要があります。また、連続する 2 つの y 値の差が 1 を超える場合は、欠落している y 値を最後の x 値にマップする必要があります。

これが疑似コードです(アルゴリズムの要点を捉えようとしました)

prevY = y1

for(i=x1+1;i<=x2;++i)
{

  y = computeY(i);

  if(diff(y,prevY)>1) dump_points(prevY,y,i);

  prevY = y;

  dump_point(i,y);

}

dump_points(prevY,y2,x2);

ここですべてのケースをカバーしているわけではありません (特にコーナーのケースではありません)。しかし、直線の傾きに応じて、x の 1 つの値に対して y の多くの値が存在する可能性があり、その逆も成り立つという考え方です。アルゴリズムはこれを考慮して、すべてのポイントを生成する必要があります。

于 2012-10-31T18:07:30.597 に答える