在一个二维坐标系中判断一个点是否在多边形内,多边形任意
设点为P,多边形为P0 P1 P2 …… Pn 用传统的做射线方法求解,做平行于Y轴的射线L,求多边形穿过射线L的次数count.
1.取多边形中第一个不在射线L上的点Pm,以Pm作为测试边的开始点Pstart
2.取Pstart的下一个点为测试边为结束点Pend,count赋值0
3.判断结束点Pend是否与p点重合,重合执行8
4.判断结束点Pend是否在射线上,在则从Pend开始顺序查找第一个不再射线上的点Ptemp,验证Pstart,Ptemp是否在同侧,是则count+1
5.判断结束点与开始点是否在同侧,不在则求测试边与射线的交点,如果交点与p点重合则执行8,否则如果交点在射线上则count+1
6.判断Pend是否被测试过,未被测试过则Pstart= Pend,执行2否则执行7
7.判断count奇偶,奇数执行8,偶数执行9
8.点在多边形内,判断结束
9.点不在多边形内,判断结束
C#代码:
using System;
using System.Collections.Generic;
using System.Text;
namespace Rign
{
///
/// 点集
///
public class CPoint
{
// x坐标
public double x;