测量程序function ni
mfp吧
全部回复
仅看楼主
level 7
xxxcccaaaddd 楼主
测量程序
function ni0()// 线元设置
print("输入线元初始数值"+"\n") //显示“输入线元初始数值”
variable fp = fopen("zdsaved.txt","w","UTF-8") // 打开文本文件准备写入。
variable zz = ["编号","线元","半径","转角","起点","终点","线元长度","起始向量","起里程","终里程"]//整合标题行字符串
fprintf(fp, "%s",zz+"\n") // 写入标题行字符串
variable dianZ,dianQ,dianH,n=1,m=1,h=1,p=1,lc1=0,lc2=0,qx=0,qy=0,zx=0,zy=0,qj,hj,linzx,linzy,fangxiang,zc1,qs,bj,bj1
//dianZ,dianQ,dianH分别存放直线、圆曲线、缓和曲线数据
//lc1,lc2分别为起终点里程,qx,qy,zx,zy分别为起点和终点坐标
//qs为起始向量角度,bj为半径,bj1为半径1
//n为直线序数,m为圆曲线序数,h为缓和曲线序数,p为整体线型序数
do //输入循环开始
variable bjj = input("输入线元"+p+"的半径R"+"\n") //获取输入“半径”
bj=real(bjj) //获取实部半径
bj1=image(bjj) //获取虚部半径
//直线线元
if and(bj==inf,bj1==0) //if1 (直线)开始
variable xianxing="Z"+n //形成线元字段
if p==1 //if2 (若第一段)开始
qx = input("输入直线"+n+"起点N坐标"+"\n") //输入起点N坐标
qy = input("输入直线"+n+"起点E坐标"+"\n") //输入起点E坐标
zx = input("输入直线"+n+"终点N坐标"+"\n") //输入终点N坐标
zy = input("输入直线"+n+"终点E坐标"+"\n") //输入终点E坐标
fangxiang=(zx+zy*i-(qx+qy*i))
else //if2 (非第一段)else
qx=zx //上一段终点N坐标为本段起点N坐标
qy=zy //上一段终点E坐标为本段起点E坐标
linzx = input("输入直线"+n+"终点N坐标"+"\n") //输入本段终点N坐标
linzy = input("输入直线"+n+"终点E坐标"+"\n") //输入本段终点E坐标
variable linshi1=(cos(angle(fangxiang))+sin(angle(fangxiang))*i)*abs(linzx+linzy*i-(qx+qy*i))
//通过上一段终点方向向量和本段输入起终点长度形成本段起终点向量
if abs(linshi1-(linzx+linzy*i-(qx+qy*i)))>0.1 //if3 (若形成的向量与本段输入的起终点向量不一致)开始
print("直线参数冲突!\n") //本段终点坐标输入错误
continue //返回循环开始,重新输入
else //if3 (若形成的向量与本段输入的起终点向量一致)else
zx=linzx //记录本段终点N坐标
zy=linzy //记录本段终点E坐标
endif //if3 结束
endif //if2 结束
variable zc = round(abs(zx+zy*i-(qx+qy*i)),3) //线元长度
lc1=lc2 //起点里程
lc2=lc2+zc //终点里程
qs = round(angle(fangxiang),6) //本段起始方向角
fangxiang=(zx+zy*i-(qx+qy*i)) //本段终点的切线向量
variable zz = [p,"Z"+n,bj,0,qx+qy*i,zx+zy*i,zc,qs,lc1,lc2]//整合字符串
print(zz+"\n")
fprintf(fp,zz+"\n") // 字符串写入文件
set_array_elem(dianZ, [n-1], zz)//直线型字符串写入dianZ
n=n+1 //直线序数+1
p=p+1 //整体线型序数+1
//圆曲线线元
elseif and(bj>0,not(bj==inf),bj1==0) //if1 (圆曲线)elseif
variable xianxing="Q"+m //形成线元字段
variable qj = input("输入曲线"+m+"转向角度:(右转为+,左转为-,角度为弧度)"+"\n")//若为圆曲线,输入转向角度
if p==1 //if4 (若第一段)开始
qx = input("输入圆曲线"+m+"起点N坐标"+"\n") //输入起点N坐标
qy = input("输入圆曲线"+m+"起点E坐标"+"\n") //输入起点E坐标
zx = input("输入圆曲线"+m+"终点N坐标"+"\n") //输入终点N坐标
zy = input("输入圆曲线"+m+"终点E坐标"+"\n") //输入终点E坐标
zc1 = abs(abs(zx+zy*i-(qx+qy*i))-abs(bj*sin(qj/2)*2))//通过起终点计算弦长和通过转角、半径计算弦长的差值
if zc1>0.01 //if5 (若差值过大)开始
print("曲线参数冲突A!\n") //参数自身矛盾
continue //返回循环开始,重新输入
endif //if5 结束
fangxiang=(zx+zy*i-(qx+qy*i))*(cos(-qj/2)+sin((-qj/2))*i)//本段起点的切线向量
else //if4 (非第一段)else
qx=zx //上一段终点N坐标为本段起点N坐标
qy=zy //上一段终点E坐标为本段起点E坐标
qs = round(angle(fangxiang),6) //本段起始方向角
zx=round(real((qx+qy*i)+(cos(qs+qj/2)+sin(qs+qj/2)*i)*abs(bj*sin(qj/2)*2)),3)//本段终点N坐标
zy=round(image((qx+qy*i)+(cos(qs+qj/2)+sin(qs+qj/2)*i)*abs(bj*sin(qj/2)*2)),3)//本段终点E坐标
endif //if4 结束
variable zc = round(abs(zx+zy*i-(qx+qy*i)),3) //计算弦长
qs = round(angle(fangxiang),6) //本段起始方向角
variable qc=round(abs(bj*qj),3) //线元长度
lc1=lc2 //起点里程
lc2=lc2+qc //终点里程
fangxiang=((zx+zy*i-(qx+qy*i))*(cos(qj/2)+sin(qj/2)*i))//本段终点的切线向量
variable zz=[p,"Q"+m,bj,round(qj,6),qx+qy*i,zx+zy*i,qc,qs,lc1,lc2]//整合字符串
print(zz+"\n")
fprintf(fp,zz+"\n") // 字符串写入文件
set_array_elem(dianQ, [m-1], zz)//圆曲线型字符串写入dianQ
m=m+1 //圆曲线序数+1
p=p+1 // 整体线型序数+1
//缓和曲线线元
elseif and(bj>0,bj1>0) //if1 (缓和曲线)elseif
variable xianxing="H"+h //形成线元字段
variable hc = input("输入缓和曲线"+h+"的长度
2016年03月15日 13点03分 1
level 7
xxxcccaaaddd 楼主
//缓和曲线线元
elseif and(bj>0,bj1>0) //if1 (缓和曲线)elseif
variable xianxing="H"+h //形成线元字段
variable hc = input("输入缓和曲线"+h+"的长度:(单位m)"+"\n")//若为缓和曲线,输入缓和曲线长度
variable hfx = input("输入缓和曲线"+h+"的转向:(右转为+1,左转为-1)"+"\n")//若为缓和曲线,输入转向
if p==1 //if7 (若第一段)开始
print("缓和曲线不能为第一段!") //显示缓和曲线不能为第一段
continue //返回循环开始,重新输入
endif //if7 结束
variable ka=1/bj
variable kb=1/bj1
variable kab=kb-ka
variable k=ka+kab
variable jb=ka*hc+hc/2*kab
qx=zx //上一段终点N坐标为本段起点N坐标
qy=zy //上一段终点E坐标为本段起点E坐标
qs = round(angle(fangxiang),6) //本段起始方向角
variable j=qs+hfx*jb
zx=round(qx+integrate("cos(qs+hfx*(ka*x+1/(2*hc)*x*x*kab))","x",0,hc),3) //本段终点N坐标
zy=round(qy+integrate("sin(qs+hfx*(ka*x+1/(2*hc)*x*x*kab))","x",0,hc),3) //本段终点E坐标
hj=hfx*jb //缓和曲线转角
lc1=lc2 //起点里程
lc2=lc2+hc //终点里程
fangxiang=fangxiang*(cos(hj)+sin(hj)*i) //本段终点的切线向量
variable zz=[p,"H"+h,bjj,round(hj,6),qx+qy*i,zx+zy*i,hc,qs,lc1,lc2]//整合字符串
print(zz+"\n")
fprintf(fp,zz+"\n") // 字符串写入文件
set_array_elem(dianH, [h-1], zz)//缓和曲线型字符串写入dianH
h=h+1 //缓和曲线序数+1
p=p+1 // 整体线型序数+1
elseif bj<0
print("输入结束!") //if1 (半径非正,跳出程序)else
p=p+1 // 整体线型序数+1
break //跳出循环
else
endif //if1 结束
until (2<1)
fclose(fp) // 保存写入的数据并关闭文件。
endf
function hudushuchu(hudu)
variable dfm=hudutodu(hudu)
print("角度为:"+dfm[0]+"°"+dfm[1]+"′"+dfm[2]+"″"+"\n")
return
endif
2016年03月16日 04点03分 4
level 7
xxxcccaaaddd 楼主
function hudutodu(hudu)
if hudu>0
variable du = floor(hudu/pi*180)
variable fen = floor((hudu/pi*180-du)*60)
variable miao = round(((hudu/pi*180-du)*60-fen)*60,0)
if miao==60
miao=0
fen=fen+1
endif
if fen==60
fen=0
du=du+1
endif
return [du,fen,miao]
else
variable du = floor(-hudu/pi*180)
variable fen = floor((-hudu/pi*180-du)*60)
variable miao = round(((-hudu/pi*180-du)*60-fen)*60,0)
if miao==60
miao=0
fen=fen+1
endif
if fen==60
fen=0
du=du+1
endif
return [-du,fen,miao]
endif
endf
2016年03月16日 04点03分 5
level 1
这个测量程序如何安装到计算器,可以做个详细流程吗?文字表达或做个屏幕录像都可以的。谢谢!
2017年08月25日 10点08分 6
参见pdf手册,部署用户自己开发的程序那一节
2017年08月25日 23点08分
level 1
想测试一下使用效果
2017年08月25日 10点08分 7
你又挖坟了[滑稽]
2017年08月25日 10点08分
因为是函数声明,所以要写在.mfp文件中[滑稽]
2017年08月25日 10点08分
level 1
编写的function可以在EXCEL里使用吗?
2017年08月25日 10点08分 8
level 7
xxxcccaaaddd 楼主
要翻译成Excel函数吧
2017年08月25日 14点08分 9
1