点是否在多边形内
来源:互联网 发布:java office转换pdf 编辑:程序博客网 时间:2024/04/29 06:49
bool CBSArxCalculate::IsPtInPolygon(const AcGePoint3d& ptTest, const AcGePoint3dArray& ptsBorder)
{
int nCross = 0;
int nCount = ptsBorder.length();
for (int i = 0; i < nCount; i++)
{
AcGePoint3d pt1 = ptsBorder[i];
AcGePoint3d pt2 = ptsBorder[(i + 1) % nCount];
if (pt1.y == pt2.y)//平行于X轴
{
continue;
}
if (ptTest.y < min(pt1.y, pt2.y) || ptTest.y > max(pt1.y, pt2.y) )//没有交点
{
continue;
}
/*解方程
y1 = a * x1 + b;
y2 = a * x2 + b;
得出直线方程为:y = a * x + b
联合y = y0可得交点x坐标
*/
double x = (ptTest.y - pt1.y) * (pt2.x - pt1.x) / (pt2.y - pt1.y) + pt1.x;
if (x > ptTest.x)
{
nCross++;
}
}
return (nCross % 2 == 1);
}
{
int nCross = 0;
int nCount = ptsBorder.length();
for (int i = 0; i < nCount; i++)
{
AcGePoint3d pt1 = ptsBorder[i];
AcGePoint3d pt2 = ptsBorder[(i + 1) % nCount];
if (pt1.y == pt2.y)//平行于X轴
{
continue;
}
if (ptTest.y < min(pt1.y, pt2.y) || ptTest.y > max(pt1.y, pt2.y) )//没有交点
{
continue;
}
/*解方程
y1 = a * x1 + b;
y2 = a * x2 + b;
得出直线方程为:y = a * x + b
联合y = y0可得交点x坐标
*/
double x = (ptTest.y - pt1.y) * (pt2.x - pt1.x) / (pt2.y - pt1.y) + pt1.x;
if (x > ptTest.x)
{
nCross++;
}
}
return (nCross % 2 == 1);
}
0 0
- 点是否在多边形内
- 点是否在多边形内
- 判断点是否在多边形内
- 判断点是否在多边形内
- 判断一个点是否在多边形内
- 判断点是否在多边形内
- 判断点是否在多边形内
- 判断点是否在多边形内
- 判断某个点是否在多边形内
- zoj1081判断点是否在多边形内
- 判断点是否在多边形内
- 判断点是否在多边形内
- 判断点是否在多边形内
- 判断点是否在多边形内
- 判断点是否在多边形内
- 判断点是否在多边形内
- 判断点是否在多边形内
- 判断点是否在多边形内
- How to save the currently edited row without moving to another row
- Linux export命令
- Protobuf语言指南
- js生成验证码
- 2012-04-16 13:57 dedecms操作数据库类
- 点是否在多边形内
- 攻击者为何总能攻破企业安全防线?
- Over receive ASN shipped quantity 导致的 bug
- 分组统计数据
- hadoop体系结构介绍
- suse防火墙SuSEfirewall2 设置 指定地址访问制定端口
- python socket多人聊天室
- 第二节 字典
- android开发学习——注册时发送验证码