#region Using directives
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Windows.Forms;
#endregion
namespace polygon { partial class Form1 : Form { public Form1() { InitializeComponent(); } //定义点结构体 public struct point { public float x; public float y; }
public int ptnum;//顶点数目
public int count=0;//读取多边形顶点坐标计数器
public void button3_Click(object sender, EventArgs e) { if (textBox5.Text == "") MessageBox.Show("请输入顶点个数"); else Newpt(); }
public void Newpt() { ptnum = int.Parse(textBox5.Text); point[] pt = new point[ptnum]; }
//读取用户输入的顶点坐标 public point[] Getpt() { pt[count].x = float.Parse(textBox1.Text); pt[count].y = float.Parse(textBox2.Text); count++; return (pt); }
//读取用户输入的独立点坐标 并 判断其与多边形的位置关系 private void Judge(point[] pt) { float Px, Py; Px = float.Parse(textBox3.Text); Py = float.Parse(textBox4.Text); float[] line = new float[ptnum - 1]; float flag = 1; for (int i = 1; i < ptnum; i++) { line[i - 1] = (pt[i].y - pt[i - 1].y) * Px + (pt[i - 1].x - pt[i].x) * Py + (pt[i].x - pt[i - 1].x) * pt[i - 1].y - (pt[i].y - pt[i - 1].y) * pt[i - 1].x; flag *= line[i - 1]; if (flag < 0) { MessageBox.Show("点在多边形之外"); break; } else if (flag == 0 && i == ptnum - 1) { MessageBox.Show("点在多边形边界上"); break; } else if (flag > 0 && i == ptnum - 1) { MessageBox.Show("点在多边形之内"); break; }
} }
private void button2_Click(object sender, EventArgs e) { if (textBox3.Text != "" && textBox4.Text != "") Judge(pt); else MessageBox.Show("请输入独立点坐标"); }
private void button1_Click(object sender, EventArgs e) { if (count < ptnum) { Getpt(); count++; } else MessageBox.Show("已经输入了"+Convert.ToString(ptnum)+"个顶点坐标"); }
} } 
|