多边形重心的计算方法_李玉冰

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

行排序 。 此外由 于累 加和 计算 多边 形重 心的 算法 很容 易 实
现 , 所以 本文只详细说明后两种算法的仿真实现 。
2. 1 半功率点截面图形的仿真
通过在 M a tlab中创建一 个与 草帽 矩阵 Z 所 对应 的中 间 矩阵 tem p, 并在中间矩阵 temp里对草帽矩阵 Z 进行 类似于等
2. 中国科学院 研究生院 , 北京 100039) 牗v ip_liyub ing@ sina. com牘
摘 要 :工程中的采样通常只能得到被测对象的有限个离散数据点 , 在计算由这些离散数据点所 围多边形的重心时算法很复杂 。为了推导出通用的计算公式 , 首先介绍了物理学中求平面薄片重心 的原理 。 依据该原理推导出了两种通用计算方法 , 并对这些方法的原理 、计算机实现 、计算精度进行 了详细地阐述 。最后通过 M a tlab和 VC 分别编写了相应的算法 , 用户可以通过 VC 提供的界面方便 的计算任意多边形的重心 。
1 数学计算方法介绍
1. 1 累加和 求重心
设平面上有 N 个离散数 据点 (xi, yi)(i = 1, 2, … , n), 其 多边形重心 G(x1, y 1)为 :
n
∑ xi
x1 = i=1
n
∑n yi
(2)
y 1 = i=1
n
这是求多 边形最简单 直观的方法 。可以直接利 用离散 数
据点的 x, y 坐标就能求图 形重心 。但 是缺 陷在 于没有 对离 散 数据点所围图形做任何处理和分析 , 精度不够 。
tem p牗Z >0. 206牘=0牷 %在中间矩阵 tem p中设置半功率点的值
tem p =tem p. *Z牷
犤a牞b犦=find牗temp牘牷
%模拟等高线功能牶查找矩 阵 tem p 中值为 1牗即 半功率 点牘的 坐
标牞将半功率点的 x坐标存储在向量 a中牞y坐标存储在向量 b 中
2. 2 离散数据点排序与重心 本文公式都是在多边形 A1 A2… An 的基础上推导而出 。但
n -1
x1 y1 1
∑ (x1 +xi +xi+1) xi
yi 1
i =2
x2 =
∑n-1
3
x1 xi
xi+1 yi+1 1 y1 1 yi 1
i =2
xi+1 yi+1 1
n -1
x1 y1 1
∑ (y1 +yi +yi+1) xi
yi 1
i =2
y2 =
n-1
x1
xi+1 yi+1 1 y1 1
第 25卷 2005年 12月
计算机应用 C ompu ter App lications
Vo.l 25
Dec. 2005
文章编号 :1001 - 9081(2005)12Z - 0391 - 03
多边形重心的计算方法
李玉冰1, 2 , 郝永杰 1 , 刘恩海 1 (1. 中国科学院 光电技术研究所 , 四川 成都 610209;
12 月
李玉冰等 :多边形重心的计算方法
39 3
个合适的数据结 构动 态的 保存 采样 点 的各 种不 同类 型的 属
性 。 一般工程中都是采用链表或数组存储数据 。 这两种数 据 结构虽然都能存储不同 类型的 数据 , 但数组 不支持 动态增 加
数据 , 必 须在定义数组时指 定数组 的大小 。 链表虽然 能够 动 态增加数据 , 但是查找 , 访问数据 不方便 , 每 次都必须 从链 表
但在做 具体计算时 可以清楚 地认识到 :计 算的难度 完全 取决于图形 Ψ的形状 , 即使是像多边形这样的简单图形 , 只要 边数稍微增加 , 用积分计算的运算量就会成倍的增加 。并且用 公式 (1) 的局限性还在于必须知道 图形 Ψ的 表达式 , 此 外更 要求图形 Ψ是连续光滑曲线 (至少是分段连续 )。而工程 中只 能得到一系列的离散数 据点 , 所以 用上面 的公式 去计算 离散 数据点系所围图形重心 是难以 实现的 。因 此就必 须提出 一种 新的能够求离散数据 点系所围图形重心的计算公式 。
1, 2, 3)。该三角形的面积为 :
x1 y1 1
S

1 2
x2
y2
1
x3 y3 1
△A1 A2A3 边界构成逆时针回路时取 +。 原理 :将多边 形划 分成 n 个小 区域 , 每 个小 区域 面积 为
σi, 重心为 Gi(–xi, y–i), 利用求平面薄板重心公式 (1)把积分变 成累加和 :
3 VC 实现重心算法
VC 实现重心算法的采样 值来源 于北京 航天某所 工程 中 一组红外探头的测试数据 。 在 VC ++ SD I环境下 开发多边 形 重心算法时主要用到以下 M FC 类 :
CDa taPo in t:定义采样点的各种属 性 。 包括采 样点 x, y 坐 标 、功率 值 z、 象限标志 flag 和采样点在 新坐标系中的正弦 值 the ta。
sinθ值作为排序依据 。
function 犤A牞x2牞y2犦=arrsort牗a牞b牘 %输入参数 a牞b是模拟数据 x牞y坐标 %返回参数 A 即排序后的坐标矩阵
通过 arrso r.t m 返回的排序矩阵 A, 编写 M atlab重心文 件 g ravity. m:
function 犤x牞y犦=gravity牗A牘 %函数返回参数 x牞y即多边形重心
高线的设置来模拟红外探头的离散半功率点 。
程序如下 :
犤X牞Y犦=m eshgrid牗- 4. 5牶0. 05牶4. 5牘牷
R =sqrt牗X. ^2 +Y. ^2牘+eps牷
百度文库
Z =sin牗R牘. /R牷
%创建草帽矩阵 Z
tem p =zeros牗size牗Z牘牘牷
%创建中间矩阵
tem p牗0. 205 <Z牘=1牷
图 2 算法流程 对红外探头进行 检测时 , 步进电 机步长 不同的 选取会 直 接 导致采样点个 数的变化 , 所以 在读取采样 点时必须使 用一
头开始操作 ;并且还必须手动编写取数 、删除数据等代码 。 基于以上分析本文采用了 VC ++基础类库提 供的集合 类
CP trA rray[ 5] 作为存 储 采样 值的 数 据结 构 。 CP trA rray 集 合 类 支 持 vo id 类 型 的 指 针 数组 。 CP trA rray 的 成 员 函 数 类 似 于 CO bA rray 的成员 函数 , 正 因为这 种类 似性 , 开发 人员 可以 像 使用 CO bA rray 成员函数那样去使用 CP trA rray成 员函数 。 表 1列出了本算法中用到的 几个 函数 , 通过 A dd 成员函 数可 以 实现动态添加数据的 功能 。 G e tA t成 员函数 可以通 过索引 值 方便的访问集合类里任意指定位置上的元素 。
in t G etS ize牗牘 con st牷 void* G etA t牗 int n Index牘 const in t A dd牗 void* new E lem en t牘牷
i=1 yi y i+1
∑ ∑ y3
=
n
(yi +yi+1)
i =1
n
3
xi
xi yi xi+1
xi +1 yi +1
i=1 yi y i+1
约定 xn+1 = x1, yn +1 =y1 。
2 M atlab仿真
根据实际工程经 验 , 红 外探头功 率采样 值的三 维曲线 类 似于 M atlab中的草帽图形 , 所以仿 真采用 M atlab草帽图 形代 替工程中探头 的采 样值 。 用 M atlab语 言进 行仿 真的 编程 难 点在于模拟出红外探 头的离散采样数据点和对离散数据点进
∑ S =± 1 n xi 2 i =1 yi
xi+1 , yi +1
约定 xn+1 = x1, yn+1 = y1
根 据定理 3可以得到任意 n边 形 A1A2 … An 的重心 G(x3, y3)为 [ 2] :
∑n (xi +xi+1)
xi
xi +1
i =1
x3 =
∑n
3
xi
y i yi+1 xi+1
关键词 :多边形 ;重心 ;VC ;集合类 中图分类号 :TP301. 6 文献标识码 :A
0 引言
红外地球敏感器 整机标定系统是通过计算机作为控制载 体 , 给出各红外 探头 单视 场和 复合 视场 的数 字化 检测 结果 。 其中各探头视场的光 学中心 (即采 样半功 率点所 组成的 多边 形几何重心 )是最重 要的 检测 依据 , 在 工程 中具 有重 要的 应 用价值 。 但由 于实 际工 程中 只能 获得 探头 有限 个离 散采 样 值 , 所以在求由这些离散采 样点所 组成的 多边形 重心时 难度 较大 。 为了推导出求 多边形重 心的一 般公式 , 本文 首先给 出 物理学中对平面薄片 重心求 法 :当 一封闭 曲线所 围几何 图形 Ψ是一均匀薄片时其重心坐标计算公式为 :
n
∑ x dσ
xi σi
xg = D S
=
i
=1 n
∑ σi
i =1
收稿日期 :2005 - 07 - 18;修订日期 :2005 - 08 -30 作者简介 :李玉冰 (1981 -), 女 , 四川南充人 , 硕士 研究生 , 主 要研究方 向 :检测技 术 、自动化 装置 ; 郝 永杰 (1957 - ), 男 , 辽宁 人 , 副研 究 员 , 主要研究方向 :航天测试 ; 刘恩海 (1964 - ), 男 , 四川人 , 研究员 , 主要研究方向 :光电控制.
CD lg:关联对话 框资 源 , CD lg 的 成员 函数 负责 实现 读 取 采样值和排序功能 ;成员变量 m_RS是 CRS类对象 , 负责访问 数据库 。 成员变量 m_P trA rray是 CP trA rray 类对象 , 负责保 存 采样点的各种属性 。
CRS:与 A ccess数据库联系 , 派生于 CReco rdset类 。 CM yV iew:负责显示各视场的半功率截面图形和光学中心 。
1. 2 算法一
定理 1 已知三角形 △A1 A2A3的顶点坐标 Ai(xi, yi)( i = 1, 2, 3)。它的重心坐标为 :
∑3 x1 +x2 +x3 xg = i=1
3
3
∑ y1 +y2 +y3
yg = i=1
3
定理 2 已知三角形 △A1 A2A3的顶点坐标 Ai(xi, yi)( i =
∑ 3
xi y i 1
i =2
xi+1 yi+1 1
(3)
1. 3 算法二
图 1 多边形分割
定理 3 以 Ai(xi, y i)( i = 1, 2, … , n) 为顶 点的 N 边 形
A1A2 …An 面积为 (边界 A1A2 … An 构 成逆时针 回路 时取 (+), 顺时针回路取 ( -) 号 ):
排序原理 :在所有模拟采样点 (xi, y i)(i = 1, 2, … , n) 中 依据
n
n
∑ xi
∑ yi
ox
= i=1 n
, oy
= i=1 n
为新原点建立新坐标系
x′i = xi - ox, y′i =y i - oy
i = 1, 2, … , n
通过离散采样点在新坐标系里的象限和在新坐 标系里的
39 2
计算机应用
20 05年
n
∑ y dσ
yi σi
yg = D S
= i=1 n ∑ σi
i =1
由前面所提出的 原理和数学定理可以得出求离散数据点
所围多边形的一般重心公式 :以 Ai(xi, yi)(i = 1, 2, … , n) 为 顶点的任意 N 边形 A1A2 … An, 将它划分成 N - 2个三 角形 (如 图 1)。每个三角形的重心为 Gi(–xi, y–i), 面积 为 σi。那么多边形 的重心坐标 G(x2, y2)为 [ 1] :
表 1 CPtrA rray成员函数介绍
函数名称
函数说明
函数实现
G etS ize G etA t A dd
G ets numb er of elem en ts in th is array R etu rns th e valu e at a given index
A dd s an elem en t to the end of the array牷grow s the array if necessary.
无论是在用 M a tlab仿真 模拟出 的离 散 数据 点还 是工 程实 际
采样所获得的红外探头半功率 点集 , 离散 点的 x, y 位置坐 标
都是被随机保存在数据 结构里 , 这 些离散点 集并 不能 组成 N 边形 。所 以在得到离散采样 点的 x, y 坐标 后还 必须进 行排 序
以组成多边形 。
相关文档
最新文档