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

类别:.NET开发 点击:0 评论: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)+"个顶点坐标");
        }

    }
}

本文地址:http://com.8s8s.com/it/it42115.htm