资源简介
这是一个水平/垂直交叉点数判别法判断点是否在凹(凸)多边形内部(适用于任意多边形包括凹凸边形)
注意到如果从P作水平向左的射线的话,如果P在多边形内部,那么这条射线与多边形的交点必为奇数,如果P在多边形外部,则交点个数必为偶数(0也在内)。所以,我们可以顺序考虑多边形的每条边,求出交点的总个数。还有一些特殊情况要考虑,具体见代码。程序运行后,首先输入多边形顶点个数,然后输入顶点坐标xy值,回车确定后。yes表示点在多边形内部。反之,在外部。
代码片段和文件信息
//offset为多边形坐标上限
//on_edge表示点在多边形边上时的返回值
#include
#include
#include
#include
#include
#include
using namespace std;
const int offset=1000;
const double eps=1e-8;
struct Point
{
double xy;
}p[105];
double cross(Point piPoint pjPoint pk) //改为
{ // (pipj)X(pipk)
//输入:三个点的横、纵坐标
//输出:点k在线段ij的哪一侧
return (pj.x-pi.x)*(pk.y-pi.y)-(pj.y-pi.y)*(pk.x-pi.x);
}
int InPolygon(const Point *arrconst int &lenconst Point &pint on_edge=1)
{
//输入:凹或凸多边形区域端点的坐标arr[i]
//输入:多边形端点个数
//输入:需要判定的点P
//输出:返回值为1:点在多边形内;返回值为0:点在多边形外
Point q;
int i=0counter;
while(i {
q.x=rand()+offset;//随机取一个足够远的点q
q.y=rand()+offset;//以p为起点q为终点做射线L
f
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1831 2013-10-22 12:16 水平垂直交叉点数判别法(适用于任意多边形包括凹凸边形)\22.cpp
文件 3353 2013-10-22 11:33 水平垂直交叉点数判别法(适用于任意多边形包括凹凸边形)\22.dsp
文件 512 2013-10-22 11:35 水平垂直交叉点数判别法(适用于任意多边形包括凹凸边形)\22.dsw
文件 41984 2013-11-12 21:20 水平垂直交叉点数判别法(适用于任意多边形包括凹凸边形)\22.ncb
文件 54784 2013-11-12 21:20 水平垂直交叉点数判别法(适用于任意多边形包括凹凸边形)\22.opt
文件 1120 2013-11-12 21:17 水平垂直交叉点数判别法(适用于任意多边形包括凹凸边形)\22.plg
文件 278608 2013-11-12 21:17 水平垂直交叉点数判别法(适用于任意多边形包括凹凸边形)\Debug\22.exe
文件 387820 2013-11-12 21:17 水平垂直交叉点数判别法(适用于任意多边形包括凹凸边形)\Debug\22.ilk
文件 15401 2013-11-12 21:17 水平垂直交叉点数判别法(适用于任意多边形包括凹凸边形)\Debug\22.obj
文件 2013816 2013-11-12 21:17 水平垂直交叉点数判别法(适用于任意多边形包括凹凸边形)\Debug\22.pch
文件 590848 2013-11-12 21:17 水平垂直交叉点数判别法(适用于任意多边形包括凹凸边形)\Debug\22.pdb
文件 74752 2013-11-12 21:17 水平垂直交叉点数判别法(适用于任意多边形包括凹凸边形)\Debug\vc60.idb
文件 102400 2013-11-12 21:17 水平垂直交叉点数判别法(适用于任意多边形包括凹凸边形)\Debug\vc60.pdb
目录 0 2013-11-12 21:21 水平垂直交叉点数判别法(适用于任意多边形包括凹凸边形)\Debug
目录 0 2013-11-12 21:21 水平垂直交叉点数判别法(适用于任意多边形包括凹凸边形)
----------- --------- ---------- ----- ----
3567229 15
- 上一篇:mfc 网络聊天室
- 下一篇:商场货物管理系统c语言大作业武大
相关资源
- 基于飞思卡尔XEP100的LED点灯程序
- 单片机控制八个发光二极管流水点亮
- STC15开发手持点巡检考勤机
- LED点亮CAN通信程序
- 调用库函数点亮一个led灯(嵌入式k
- c++实现P2PDemo(点对点聊天)
- C++实战源码-工具栏按钮的热点效果
- C++实战源码-获取路径点信息
- C++实战源码-利用消息断点进行程序调
- C++实战源码-利用条件断点进行程序调
- C++实战源码-利用简单断点进行程序调
- C++实战源码-利用数据断点进行程序调
- C++实战源码-20点游戏
- C++实战源码-热点效果的图像切换
- c++求解矩阵中的马鞍点
- 点云PCL三维重建
- 点云数据(圆柱面)
- IO输出-点亮1个LED灯方法1
- C++ MFC调用Javascrip函数
- vc++的餐厅前后台点餐软件
- 多点寻找最小外接圆
- c++ 浮点数二进制格式
- c语言24点游戏源码.zip
- c++ 二十四点小游戏源码
- c++ 21点游戏源码
- 点亮led(gpio点亮led灯.c )
- 电力系统33节点粒子群算法。(一般用
- opencv harris角点检测
- ios点餐系统应用
- ios点菜系统
评论
共有 条评论