更新日 Saturday, 02-Aug-2008 23:37:58 JST

任意の点(x, y)が円内に含まれているかどうか


円グラフで、個別円弧内にマウスオーバーされた時に、その円弧を表す勘定項目名と集計値を表示するようにします。
いわゆる『吹き出し』の表示ですが、
まず、マウス座標が円内にあるかどうか?

点 (x, y) が、原点中心で半径 r の円に含まれているかどうかは、原点からの距離を比較すればよい。
原点からの距離が r 以下であれば、点は円内にある。

両辺を2乗しても成り立つので
// 円グラフマウスオーバー処理 private void DisplayPopUP(MouseEventArgs e) { // popGuide はlabel10コンポーネント // マウスの現在地の取得 popGuide.Text = e.X + ", " + e.Y; popGuide.Visible = true; // マウスの x座標値 double pX = e.X; // マウスの y座標値 double pY = e.Y; // 円グラフの幅 int pie_w = 250; int pie_h = 250; // 円グラフのxy座標 int pie_x = 0; int pie_y = 40; // 中心座標 int o_x = pie_x + pie_w / 2; int o_y = pie_y + pie_h / 2; // 半径 int r = pie_w / 2; // 円内か? // 公式 (x -a)^2 + (y-b)^2 = r^2 double point_val = (e.X - o_x) * (e.X - o_x) + (e.Y - o_y) * (e.Y - o_y); double r2 = r * r; if (point_val < r2) { MessageBox.Show("円内"); } }


private void pictureBox1_MouseMove(object sender, MouseEventArgs e) { // 円グラフマウスオーバー処理 DisplayPopUP(e); }


The first written on Aug 02, 08



更新日 Saturday, 02-Aug-2008 23:37:58 JST