这是原来写的如何判断点与有向线段关系的程序,有帮助于看懂我下面那个程序(C#2.0)

#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)+"个顶点坐标");
}

}
}

Published At
Categories with Web编程
Tagged with
comments powered by Disqus