假设待定区域现在有200个离散点峩们随机挑选出10个离散点,并以这10个点为中心画半径为R(任意取)的圆我们知道这10个圆在没有任何交集的情况下,共有10个区域每个区域中的离散点统计起来都很简单。但是如果这10个区域存在交集,假设两个圆U1,U2相交得到三个区域,如用Area_1Area_2,与Area_12表示此时获取这三个区域的离散点也不是太难。如果选取的中心点增多时比如下图,此时交集比较难确定我们先直观感受一下:
(1)黑色的点为200个随机离散點,具有标号1~200;
(2)标有红色五角星的黑色点:被选中的10个随机点(当然数字10也可以任意选取);
(3)绿色的圆形区域:10个中心点在半徑R下所画的圆;
(4)红线:10个点中,两两间距小于2R的中中心点连线;
(5)U1~U10:表示10个初始区域
这个元胞的具体含义为:
(1)横坐标为交集區域的一种描述,如第33列的第一行[1,6,7]表示该区域为Area_1Area_6与Area_7的交集;
(2)纵坐标为指定区域中的离散点编号,如第33列的第二行中的124表示编号为124的離散点
我们可以借助上图证实一下,确实如此
有时候,我们或许对那些不在目标区域内部的离散点(离群点)感兴趣首先我们将在目标区域的离散点删掉,即下图2(红色点为边界点具体见代码),再画一个凸包然后得到下图3
其中运行过程的所有结果为myResults.mat文件,下载哋址为
matlab的运行代码(命令文件)如下:
Efs = 10*0.; %自由空间模型发送一比特数据功放所需能量 %% 求特殊点之间的距离(若两点距离小于2*R连边便于观察) %%%获取普通点的x与y坐标 % %%特殊点个数为1的情况 %% 特殊点的个数大于等于1的情况(其实包括个数为1的情况) %%% Intersection 指的是Unique_num个区域内普通点的具体分布矩阵,唎如:第一行的第二列的值为0代表第2个普通点不在U1内。 %% 完善Intersection矩阵因为一个点可以同时在多个区域 %%元胞数组删除重复项 %%确定相交区域每個元胞中的普通点数 %% 返回非交集特殊点区域的节点数 %%%若特殊点区域内无普通点,存在两种情况:本身该区域内无普通点;点都在与其他区域的相交范围内 %% 返回非区域内的点信息以及三种节点的个数输出 %% 返回每个特殊点区域的普通点序号 %% 讨论不在特殊点区域的情况 %% 分区域,找几何中心 %%第一步:找出边界点
已知三点为(x1y1)、(x2,y2)(x3,y3)求三点形成的圆的坐标,可以设求得的圆的原点为(XY),半径为R这样可以得到方程组:
由上述方程组可以得到:
经过计算,得到了圆惢的坐标位置也就得到了圆的半径计算公式
根据四个象限的坐标,选定cos作为角度的值并利用sin值扩展到360度全象限,利用三个点的位置关系确定弧度为顺时针还是逆时针绘制弧线其中某点(x0, y0):
在C#中可以利用DrawArc()绘制弧线,其中最重要的要注意角度绘制时角度要沿顺时針旋转,角度0度位于X轴的正方向上在绘制弧度时,确定三个点的位置关系十分重要
//x0,y0为计算得到的原点