2011-01-09 8 views
5

から冗長な頂点を削除するには、私は頂点のリストを持っている正方形のため、以下の点が含まれList<Point>、すなわち: (0,0)、 (1,0)、 (2,0)、 (3 、0)、 (4,0)、 (4,1)、 (4,2)、 (4,3)、 (4,4)、 (3,4)、 (2、 4)、 (1,4)、 (0,4)、 (0,3)、 (0,2)、 (0,1)、 (0,0)はどのように私はリスト

enter image description here

正方形を描くには、四角(0,0)、(0,4)、(4,4)、(4,0)が必要です。リストからのポイント?

これは必ずしも正方形ではありませんが、基本的には、の直線をとすれば、ポイントの数を減らしたいと考えています。たとえば、(0,0)、(0,1)、(0,2)、(0,3)、(0,4)は4点をすべて描画するのではなく直線を描きます。 (0,0)、(0,4)である。

+1

他の制約はありますか?あなたは常に正方形を形成していますか?それは常に長さ4ですか?あるいは、実際には、任意のサイズの任意の形状を持つことができるという問題がありますか? –

+0

この宿題はありますか? –

+0

正方形は常にX軸とY軸に揃えられますか? – Ani

答えて

5

一度に3つの連続する点を見てみましょう(p0p1p2)。これらの3つの点は、p2 = p0 + k(p1 - p0)k)が任意の実数である場合、同一直線上にあります(1行を構成します)。私たちは、連立方程式の面で上記の条件を表現することができます。理論的には

(x2 - x0) = k(x1 - x0) 
(y2 - y0) = k(y1 - y0) 

を、あなたがする必要があるすべては順番に3点の各セットを取ります。 x成分とy成分についてはkの値を計算する。それらが同じであれば、線は同一線上にあるので、p1を削除してください。

実際には、固定小数点または浮動小数点の制限のために、一般的なケースではこれがより難しくなります。座標が一度量子化されると、同一直線上にあるべき点は非常に同一線上にないことがあります。したがって、比較を行う際にはある程度の誤差マージンを考慮する必要があります。

+0

3つの同一線上の点によって形成される三角形の面積がゼロであると考えると、リストに重複した点がある場合は、問題が発生する可能性があります。 – James

+0

@ジェームス:残念ながら、もし共線点が量子化のために非線形になると、それらは非ゼロの面積を持つ三角形を形成します... –

0

自動的に行う方法の1つは、minX、maxX、minY、maxYの組み合わせを含む点を取ることです(最も広がった座標であり、配列の他の点がすべて矩形範囲内にあると仮定します)。

これは、あなたが念頭に置いている質問に答えることができない場合は、さらに詳細と制約を与えたいと思うかもしれません。