- 1、本文档共12页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
矩形点位自动排布算法研究
矩形点位自动排布算法研究
王朋武 darlingpeng@ 20/12, 2011
在游戏软件中的人员与机关排布、在粮库粮食温度测量时的监测杆布置以及各种与点位排布有关的软件编程中,如何根据需要快速自动地计算出各点位的坐标,是一个很重要的问题。近段时间我对此进行了一番研究,以下仅对此进行简单地阐述,希望会对有关人员有所帮助。
假设排布方式为矩形。
对排布条件做如下分类:
第一点位置可能在:
西北角
东北角
西南角
东南角
排列方式分为:
层叠形
蛇形
排列方向有:
横排
竖排
横梅花
竖梅花
说明:
层叠形是指点位排列时,每一行或列的数字排列方式都一样,具有重复性,如下图例:
蛇形是指点位排列时,整个行或列的数字连线就象蛇一样具有连续性,如下图例:
梅花形是指点位排列时,行或列的点处在其上下左右行或列中间的空隙位置,每一点四周都均匀地排列着六个点,就象梅花一样。如下图例:
由于在计算过程中的浮点数到整数变换时造成的累积误差,所以添加可调整各点间距以及整体位移的上下左右四个方向控件,进行点位调整。
程序用Delphi 7编制。
程序不算复杂,在此我列出需要的主要程序源码,并把有关界面图拷屏贴出来,方便大家参考。布点范围:500×500。
{*****************************************
作者:王朋武
时间:30/11, 2011
说明:重新排列点位
******************************************}
procedure Tfrm_poleloc.btn_arrangeClick(Sender: TObject);
var
i, j, m, n, k, x0, y0, x, y, p, q, r, w, t: Integer;
h, v: Integer;
str_name: String;
begin
if not gbx_arrange.Visible then exit;
m := 5;
if edt_row.Text then m := edt_row.Value;
if (cmb_dir.Text = ‘横梅花’) or (cmb_dir.Text = ‘竖梅花’) then
begin
i := 1;
k := 0;
while k = a_room.i_poles do
begin
if i mod 2 = 1 then
k := k + m
else
k := k + m - 1;
i := i + 1;
end;
n := i - 1;
end else
n := Math.Ceil(a_room.i_poles / m);
if cmb_dir.Text = ‘横梅花’ then
begin
t := m;
m := n;
n := t;
end;
k := m;
if n m then k := n;
q := Math.Floor((490 - 20 * k) / (k - 1)); //圆外轮廓间距
if q 0 then q := 0;
if q = 0 then
begin //不可再增减
ii_h := 0;
ii_v := 0;
end;
p := 20 + q; //圆间距
h := p + ii_h;
v := p + ii_v;
if m n then
begin
if cmb_first.Text = ‘西北角’ then
begin
x0 := Math.Floor((490 - h * n + q) / 2) + ii_ho;
y0 := 5 - Math.Floor((m-1) / 2) * ii_v - ii_ve;
end else if cmb_first.Text = ‘西南角’ then
begin
x0 := Math.Floor((490 - h * n + q) / 2) + ii_ho;
y0 := 475 + Math.Floor((m-1) / 2) * ii_v - ii_ve;
end else if cmb_first.Text = ‘东北角’ then
begin
x0 := Math.Floor((490 + h * n - q) /
您可能关注的文档
- 知识社会论文知识社会高校档案用户教育研究(学术论文).doc
- 知识竞赛策划书.doc
- 知识竞赛策划书25450.doc
- 知识竞赛试题国家安全生产监督管理局.doc
- 知识管理与知识服务.doc
- 知识管理制度.docx
- 知识管理和创新之间的关系.doc
- 知识管理在企业项目管理中的应用研究.doc
- 知识管理在资讯项目中的应用.doc
- 知识管理基础认知.doc
- 初中语文创意写作对激发学生想象力和创造力的探讨教学研究课题报告.docx
- 新高考改革背景下普通高中生物课程体系优化与教学实践教学研究课题报告.docx
- 小学美术:校园植物主题绘画创作与审美教育教学研究课题报告.docx
- 《深度学习在图像超分辨率重建中的噪声消除与图像质量提升》教学研究课题报告.docx
- 《问题解决能力培养视角下的小学数学课堂策略分析》教学研究课题报告.docx
- 高中地理课堂中文言文注释的实际操作与评估教学研究课题报告.docx
- 3 《人工鱼礁工程在海洋生态修复中的应用效果及其生态效应评估方法》教学研究课题报告.docx
- 初中合唱团梯队建设中的音乐教育特色课程实施策略研究教学研究课题报告.docx
- 小学社会实践服务学习中公民责任教育教学研究课题报告.docx
- 小学数学几何教学中动态动画工具的开发与应用教学研究课题报告.docx
文档评论(0)