admin管理员组

文章数量:1530885

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

本文标签: 曲线坐标计算转化