2016-11-09 7 views
-1

私は現在、Visual Studio 2015を使用してWindowsフォームアプリケーションをプログラミングしています。プログラムは開始時に24個の円を「スポーン」させ、ユーザーがクリックすると1個ずつ消えます異なるサークル。問題は、ユーザーがクリックしたときにカーソルが楕円上にあるかどうかをチェックする方法がわからないことです。カーソルが楕円の上にあるかどうかを確認する方法

ありがとうございます!

+1

'List 'や 'List 'などの楕円座標を保存し、 'GraphicsPath.IsVisible'メソッドを使用してヒットテストを実行する必要があります。 'Ellipse'クラスを作成し、そのクラスで描画とヒットテストをカプセル化することもできます。この例を見てみましょう:[それを描いた後、サークルをコントロールとして扱うにはどうすればいいですか?](http://stackoverflow.com/questions/38345828/how-can-i-treat-the-circle-as-a -control-after-drawing-it) –

+0

円は楕円ですが、楕円は必ずしも円である必要はありません。あなたは円や楕円を作成していますか? –

+0

@SamAxe "FillEllipse"コマンドでサークルを作成していて、高さと幅に同じ値を与えています。 –

答えて

1

センターポイントと半径を保存する場合 distance between the clicked point and all the centersを確認できます。距離が半径より小さい場合は、円の範囲内でクリックが発生します。

重複する円を追跡し、「上」のものだけを削除する必要がある場合は、ポイントと半径のデータとともにzコンポーネントを保存する必要があります。

public class Circle { 
    public int X {get; set;} 
    public int Y {get; set;} 
    public int Z {get; set;} 

    public int Radius {get; set;} 
} 

データをList<Circle>に保存します。その後、簡単にCircleクラスをpublic bool Contains(int x, int y) { ... }のようなメソッドで拡張すると、上記のアルゴリズムをLINQクエリとして簡単に書くことができます。

+0

リンクされたポストの最後に 'Cricle'クラスを見てください。本当に便利です。 –

関連する問題