2017-10-02 14 views
0

私のプログラムでは、Graphicsオブジェクトによってパネル上に描画されたチェスの四角形を取得しました(それぞれのSquareオブジェクトは境界を定義するRectangleオブジェクトを持ちます)。私は最近、いくつかの四角形に線を引いて強調する方法を追加しました。問題は次のとおりです。これらの行を "消去"できるようにする必要があります。行を消去する唯一の方法であると思われます。行によって影響を受ける四角形を再描画しています。Lineが矩形を通過するかどうかを判断する方法

PointA(x、y)から始まり、PointB(x、y)で停止すると仮定して、パネル上の四角形を再描画する方法を決定するにはどうすればよいですか?各ラインを一連のポイントに分解し、どのSquare.Rectangleにポイントが含まれているかを確認するのが最善でしょうか?もしそうなら、どうしたらいいですか?

+0

の非常に効果的なアルゴリズムを検討? –

+1

[直線が四角形と交差するかどうかを知る方法](https://stackoverflow.com/questions/5514366/how-to-know-if-a-line-intersects-a- rectangle) –

+0

Not c#but https://www.openprocessing.org/sketch/454672 – PrincePolka

答えて

0

各行を繰り返し処理する必要があるので、それらのレコードを保持し、線が四角形の上、右、左、下の境界と交差するかどうかを判断すると思います。一度描画されると線で何もする必要はありません。結局のところ、線オブジェクトは線が矩形と交差するかどうかを推測するために必要なすべての情報を含んでいます。私がやっていることをお勧めします(あなたがまだいない場合)、オブジェクトをコレクションに格納して、それらを繰り返し処理できるようにします。

0

チェスボードのセルが結合されているため、すべてのセルを確認する必要はありません。線をたどって細胞に触れるだけです。このプロセスは、ラインラスタライズとは少し異なります。

ライン開始点を含む最初のセルを計算してから、隣接セルをラインごとに1つずつ交差させる必要があります。たとえば、行方向が右上の場合は、右端や上端などを確認します。

あなたは効果(大グリッド)を認識している場合、あなたはすでにどこかに保存された四角形の座標を持っているんAmanatides and Woo

関連する問題