admin管理员组文章数量:1596556
2024年6月3日发(作者:)
科技信息
○IT
论坛
○
SCIENCE&TECHNOLOGYINFORMATION
2009年第23期
利用
ExcelVBA
程序计算曲线坐标
张卫庭高强
(
中铁济南勘察设计咨询院有限公司山东济南
250022
)
【
摘要
】
Excel
是大家很熟悉的办公软件
,
相信大家在工作中经常使用
。
本文利用
ExcelVBA
编制程序计算铁路缓和曲线的坐标
,
并将计
算坐标转化为任意平面坐标系下的坐标
,
最后转化全站仪可识别的文件格式
,
从而实现了曲线坐标计算和现场放样的一体化
。
【
关键词
】
ExcelVBA
;
曲线要素
;
坐标转化
;
全站仪
1.
曲线坐标计算
1.1
角度转化为弧度计算曲线坐标
,
难免要把角度转化为
EXCEL
所识别的弧度来计算
,
为此首先要做的是角度转化为弧度
。
打开
Excel
,
按
Alt+F11
即进入
VBAIDE
,
在菜单上依次点击
[
插入
]->[
模块
]
,
然后
输入如下代码
PublicConstpi=3.
PublicFunctionDEG(nAsDouble)
DimAAsDouble,BAsDouble,CAsDouble,DAsDouble,EAs
Double,FAsDouble,GAsDouble,KAAsDouble
D=Abs(n)+0.001
F=Sgn(n)
A=Int(D)
B=Int((D-A)*100)
C=D-A-B/100
DEG=F*(A+B/60+C/0.36)*pi/180
EndFunction
1.2
曲线坐标计算
1.2.1
计算曲线坐标的公式加入缓和曲线后的铁路曲线示意图
(
见右图
)
坐标系的建立主要取决于
控制点的情况
。
如果控制点是为
测设曲线而布设的
,
则坐标系一
般采用
ZH
—
XY
坐标系统
①ZH~HY
段曲线点的坐标
根据缓和曲线方程计算
:
5
#
x
l
%
A
=l
A
-
A
%
40R
2
l
2
%
%
0
%
37
$
%
y=±
!
l
A
l
%
A
%
6Rl
-
A
%
0
336R
3
l
3
0
"
%
&
当曲线右偏时
y
A
坐标为正
,
左偏时
y
A
坐标为负
。
②HY~YH
段曲线点的坐标为
:
x
B
=Rsinα
B
+m
y
B
=±[R(1-cosα
B
)+p]
’
式中
α
B
=
K
B
-K
HY
R
+β
0
,
曲线右偏时
y
B
坐标为正
,
左偏时
y
B
坐标为
负
。
③YH~HZ
段曲线点在以
HZ
点为原点
,
以
HZ
点切线为
X
轴
,
交
点至
HZ
方向为正向的测量坐标系
!
(
HZ
—
X'Y'
)
下的坐标为
x
'
l
5
#
C
%
%
C
=-
l
C
-
2
"
%
%
%
$
%
y
'
!
40R
2
l
0
l
37
C
%
C
=±
%
6Rl
-
l
C
%
0
336R
3
l
3
0
"
%
&
式中
,
l
C
为
C
点到缓和曲线起点的曲线长
;
按里程增加方向
,
当曲
线右偏时
y
'
C
坐标为正
,
左偏时
y
'
C
坐标为负
。
根据坐标平移
、
旋转公式
,
将
YH~HZ
段曲线点的坐标换算到
ZH
—
XY
坐标系下
,
为
()
x
C
cossinγ
*+
x
'
CHZ
y
=
C
(
γ
-sinγcosγy
'
C
*
+
(
x
y
HZ
*
式中
,
γ
为两坐标系
X
轴间的夹角
,
其与线路转向角的关系是
:
γ=
α
Z
或
γ=-α
Y
;
x
HZ
、
y
HZ
为
HZ
点在
ZH
—
XY
下的坐标
,
且为
822
x
HZ
=T(1+cosγ)
y
HZ
=±Tsinγ
’
1.2.2
程序的实现如下图
,
新建一个窗体
,
在窗体上添加文本
、
命令等控件
,
分别存放已知曲线要素
。
在命令按钮
“
计算
”
的代码中加
入如下主要代码
:
PrivateSubCommandButton1_Click()
DimbjAsSingle,pjAsString,loAsSingle,iAsInteger
DimzjhAsInteger,gsAsInteger'
标志加号的位置
DimxsdAsInteger'
小数点位置
DimtdzxAsSingle'
将
hz
里程加直线长结果赋予该变量
DimzxzdlcAsString'
终点里程
DimzczjhAsInteger
DimdyzxAsString
DimdyzxjhAsInteger'
曲线后第一里程加号
DimwsgsAsInteger'
DimyqgsAsInteger
bj=Val():pj=:lo=Val(TextBox3.
Text)
Worksheets(1).Select
Worksheets(1).Cells(2,4)=Round(lo/2-(lo^3/(240*bj^2)),
3)
Worksheets(1).Cells(2,5)=Round(lo^2/(24*bj),3)
Worksheets(1).Cells(2,1)=Round(Worksheets(1).Cells(2,4)+(bj+
Worksheets(1).Cells(2,5))*Tan((dfmzhd(pj))/2),3)
Worksheets(1).Cells(2,2)=lo+bj*dfmzhd(pj)
Worksheets(1).Cells(2,2)=Round(Worksheets(1).Cells(2,2),3)
Worksheets(1).Cells(2,3)=Round((bj+Worksheets(1).Cells(2,5))/
(Cos(dfmzhd(pj)/2))-bj,3)
Worksheets(1).Cells(2,6)=dzdfm(90*lo/(pi*bj))
WithWorksheets(1).Cells
.HorizontalAlignment=xlCenter
.VerticalAlignment=xlBottom
.WrapText=False
.Orientation=0
EndWith
Worksheets(1).Range("a1:g10").ColumnWidth=12
'
'zhlc=ox("ZH
点里程
:
","
请输入
",,,,,,1+
2)
Worksheets(1).Cells(4,1)="
桩号
":Worksheets(1).Cells(4,2)="X
(N)
坐标
":Worksheets(1).Cells(4,3)="Y(E)
坐标
":Worksheets(1).Cells(4,
4)="
附注
"
WithWorksheets(1).Range("a4:e4").Cells
科技信息
○IT
论坛
○
SCIENCE&TECHNOLOGYINFORMATION
2009年第23期
.HorizontalAlignment=xlCenter
.VerticalAlignment=xlBottom
.WrapText=False
.Orientation=0
.=12
.=True
.=True
.ndex=3
EndWith
1.2.3
结果显示单击计算按钮
,
在
EXCEL
下显示结果如下
:
2.
坐标转化
2.1
数学公式上述生成的坐标为以
ZH
点为坐标原点
,
ZH
点到
JD
的切线为
X
轴
,
垂直该切线为
Y
轴坐标系下的各点坐标
,
如何转化
为任意坐标系下的坐标呢
?
具体如下
:
坐标转化数学公式
:
X=xcosθ+ysinθ+x
0
Y=ycosθ-xsinθ+y
0
式中
X,Y
为转化后的坐标
;
x
,
y
为原坐标
;
θ
为新坐标
X
轴相对于
旧坐标
X
轴的旋转角
;
x
0
、
y
0
为旧坐标原点在新坐标系下的坐标
。
2.2
主要实现代码
DimkAsInteger
Dimyhzb,yhqdAsInteger'HZ
以后的坐标
Fork=5To(9+2*n+yhqd+yhzd)
Worksheets(2).Cells(k,2)=Round(Worksheets(1).Cells(k,2)*Cos
(dfmzhd())+Worksheets(1).Cells(k,3)*Sin(dfmzhd
())+Val(),3)
Worksheets(2).Cells(k,3)=Round(Worksheets(1).Cells(k,3)*Cos
(dfmzhd())-Worksheets(1).Cells(k,2)*Sin(dfmzhd
())+Val(),3)
Nextk
3.
生成全站仪格式文件
将上述生成的坐标
,
如果转化为仪器可识别的文件
,
就可以直接
●
(
上接第
821
页
)
件
)
加入
Lynx
中的场景
,
并根据飞机校靶的运动特
点
,
设置其相应参数
,
生成缺省的视景仿真文件
.adf
文件
。
用
MFC
通过
调用
Vega
函数库
,
通过引入
.adf
文件并编写代码
,
采集识别外部信
号
,
对飞机校靶过程进行交互控制
,
最后生成实时应用程序
,
实现飞机
校靶仿真
,
为部队飞机校靶提供了较好的方法
。
经教学试用
,
能够很好
提高地勤人员对飞机校靶的操作熟练程度
。
科
●
【
参考文献
】
[
1
]
李云华
,
虚拟现实技术综述
[J].
重型机械科技
,2004
(
4
)
.
[
2
]
柴毅
,
史晶晶
,
冯大龙
.
基于
Vega
的航天发射场视景仿真系统实现
[J].
计算机
仿真
,2007,6(63-65).
调入全站仪现场放样
,
这样既方便又简洁
。
Leica
全站仪文件格式中
,
以
21.324
开头的表示水平角
,
以
22.324
开头的表示竖直角
,
以
81..00
开头的表示
X
坐标
,
以
82..00
开
头的表示
Y
坐标
,
其它格式可参考仪器说明书来确定
。
知道了仪器文
件的格式含义
,
就可以把坐标和高程转化为仪器可识别的格式
。
主要
代码如下
:
IfWorksheets(1).Cells(sjgs+4,4)=""Then
ine"*11"&Format(sjgs,"0000")&"+"&
补零
(Worksheets(1).Cells(sjgs+4,1))&""&"21.324+"&"
0000"&""&"22.324+"&"0000"&""
&"31..00+"&"0000"&""&"51..1.-"&"
+000"&""&"81..00"&
添加号
(Trim(Worksheets(1).
Cells(sjgs+4,3)))&""&"82..00"&
添加号
(Worksheets(1).Cells(sjgs
+4,2))&""&"83..00+"&"0000"
Else
ine"*11"&Format(sjgs,"0000")&"+"&
补零
(Worksheets(1).Cells(sjgs+4,1))&""&"21.324+"&"
0000"&""&"22.324+"&"0000"&"
"&"31..00+"&"0000"&""&"51..1.-"&"
+000"&""&"81..00"&
添加号
(Trim(Worksheets(1).
Cells(sjgs+4,3)))&""&"82..00"&
添加号
(Worksheets(1).Cells(sjgs
+4,2))&""&"83..00"&
添加号
(Worksheets(1).Cells(sjgs+4,4))&"
"&"31..00+767488..10+138533..10+
1847"
EndIf
上述仪器格式在
LeicaTC1800
及
LeicaTCR1101
都可以识别读
取数据
,
在现场放样中直接从仪器调出要放样的数据
,
省去了许多现
场计算和记录的手续
。
4.
结束语
由于
VBA
与
Excel2003
结合得非常紧密
,
因此
Excel2003
提供的
各个功能都可以直接使用
VBA
操作
。
在
Excel2003
中使用
VBA
其益
处在于
:
首先
,
它可以将大量的
、
尤其是重复的操作记录为一个
VBA
程序
,
用户则只需利用一个简单的菜单命令或工具栏按钮就可实现复
杂操作的自动化
;
其次
,
它可以通过控制
Excel2003
对象
,
在一个工作
表中灵活地控制其它工作表
、
数据表或文档
,
从轻松实现不同工作表
之间的交互
;
最后
,
利用
VBA
编辑器中提供的丰富的控件设置
,
用户
还可以创建自己的
VBA
应用程序
,
从而实现一个企业级的信息控制
系统
。
科
●
【
参考文献
】
[
1
]
Excel2000
中文版
VBA
开发实例指南
,
电子工业出版社
,
2000
年
8
月
.
[
2
]
铁道工程
,
中国铁道出版社
,
2000
年
3
月
.
[
3
]
测量学原理
,
中国林业出版社
,
2002
年
10
月
.
作者简介
:
张卫庭
(
1974.7
—),
男
,
大学本科
(
学士
),
中铁济南勘察设计咨询
院有限公司工程师
,
主要从事铁路工程专业
。
[
责任编辑
:
翟成梁
]
[
3
]
龚卓蓉
.Vega
程序设计
[M].
北京
:
国防工业出版社
,
2002,8.
[
4
]
龚卓蓉
.lynx
图形界面
[M].
北京
:
国防工业出版社
,
2008,8.
作者简介
:
王建军
(
1966
—),
男
,
汉族
,
河南人
,
硕士研究生
,
副教授
,
研究方
向是装备训练虚拟现实
。
张勤安
(
1965
—),
男
,
汉族
,
河南人
,
硕士研究生
,
高级工程师
,
研究方向是
火力控制
。
和麦成
(
1967
—),
男
,
汉族
,
河南人
,
硕士研究生
,
高级工程师
,
研究方向是
装备监造
。
[
责任编辑
:
张慧
]
823
版权声明:本文标题:利用ExcelVBA程序计算曲线坐标.kdh 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1717398338a567571.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论