任意多边形几何中心

```public Point Center
{
get
{
Point ptCenter = new Point();
int i, j;
double ai, atmp = 0, xtmp = 0, ytmp = 0;
if (m_LogicPoints.Count == 1)
return m_LogicPoints[0];
if ((m_LogicPoints.Count == 2) || (m_LogicPoints.Count == 3 && m_LogicPoints[0] == m_LogicPoints[2]))
return new Point() { X = (m_LogicPoints[1].X + m_LogicPoints[0].X) / 2, Y = (m_LogicPoints[1].Y + m_LogicPoints[0].Y) / 2 };

int n = m_LogicPoints.Count;
for (i = n - 1, j = 0; j < n; i = j, j++)
{
ai = m_LogicPoints[i].X * m_LogicPoints[j].Y - m_LogicPoints[j].X * m_LogicPoints[i].Y;
atmp += ai;
xtmp += (m_LogicPoints[j].X + m_LogicPoints[i].X) * ai;
ytmp += (m_LogicPoints[j].Y + m_LogicPoints[i].Y) * ai;
}

if (atmp != 0)
{
ptCenter.X = Convert.ToInt32(xtmp / (3 * atmp));
ptCenter.Y = Convert.ToInt32(ytmp / (3 * atmp));
}
return ptCenter;
}
}```

线段相交

```public bool isColide(Line line)//判断是否相交,直线p1p2与线段p3p4
{
//判处端点
if (this.V0 == line.V0 || this.V0 == line.V1 || this.V1 == line.V0 || this.V1 == line.V1)
return false;

double deviation = 0.1;//允许误差
//排斥试验，判断p1p2在q1q2为对角线的矩形区之外
if (Math.Max(line.V0.X, line.V1.X) < Math.Min(this.V0.X, this.V1.X)- deviation)
{//P1P2中最大的X比Q1Q2中的最小X还要小，说明P1P2在Q1Q2的最左点的左侧，不可能相交。
return false;
}

if (Math.Min(line.V0.X, line.V1.X) > Math.Max(this.V0.X, this.V1.X)+ deviation)
{//P1P2中最小的X比Q1Q2中的最大X还要大，说明P1P2在Q1Q2的最右点的右侧，不可能相交。
return false;
}

if (Math.Max(line.V0.Y, line.V1.Y) < Math.Min(this.V0.Y, this.V1.Y)- deviation)
{//P1P2中最大的Y比Q1Q2中的最小Y还要小，说明P1P2在Q1Q2的最低点的下方，不可能相交。
return false;
}

if (Math.Min(line.V0.Y, line.V1.Y) > Math.Max(this.V0.Y, this.V1.Y)+ deviation)
{//P1P2中最小的Y比Q1Q2中的最大Y还要大，说明P1P2在Q1Q2的最高点的上方，不可能相交。
return false;
}

//跨立试验
var crossP1P2Q1 = Cross(line.V0, line.V1, this.V0);
var crossP1Q2P2 = Cross(line.V0, this.V1, line.V1);
var crossQ1Q2P1 = Cross(this.V0, this.V1, line.V0);
var crossQ1P2Q2 = Cross(this.V0, line.V1, this.V1);

return (crossP1P2Q1 * crossP1Q2P2 >= 0 || Math.Abs(crossP1P2Q1 * crossP1Q2P2) < 0.01) && (crossQ1Q2P1 * crossQ1P2Q2 >= 0 || Math.Abs(crossQ1Q2P1 * crossQ1P2Q2) < 0.01);
}```

0 条评论

• WDK设备驱动开发

https://msdn.itellyou.cn/ 安装完成后，开始菜单中找到Windows Device Kits目录，查看帮助文档和编译demo

• MarkDown轻量级标记语言

####1.标题 #一级标题 ##二级标题 ###三级标题 … ######六级标题 ####2.引用 >这个是引用 >是不是和电子邮件中的 ...

• 借助云开发搭建专属技术博客小程序丨实战

一直对小程序开发很感兴趣，之前就准备做一款属于自己的小程序，无奈还需要购买云服务器和部署后台，有点麻烦，自从知道有了云开发这个免去服务器搭建和运维的一站式后端云...

• 【云计算奇妙学习之旅】第二期：云计算

在上一期的分享中，我们了解到云计算是什么，以及它的发展历程和前景，那本期我们继续分享云计算它是怎样部署呢，它有哪些服务模式，以及华为的云计算又包含什么呢？

• EasyUI 创建 CRUD 应用

数据收集并妥善管理数据是网络应用共同的必要。CRUD 允许我们生成页面列表，并编辑数据库记录。本教程将向你演示如何使用 jQuery EasyUI 框架实现一个...

• 2020年商业领域的十大编程语言

硬件和软件的结合是技术进步的主要原因。顶级编程语言是我们今天看到的现代和新兴技术的核心部分。当今的开发人员要处理的编程语言比以往任何时候都多。

• K8S 生态周报| 终端下的 K8S 资源树查看器

「K8S 生态周报」内容主要包含我所接触到的 K8S 生态相关的每周值得推荐的一些信息。欢迎订阅知乎专栏「k8s 生态」。

• CRM PRDCT_OBJECT, BDOC和customer product id修改

This wiki page discusses the second BDOC PRDCT_OBJECT which is generated after c...