能不能帮忙做个坐标正反算的程序,我学习一下。
mfp吧
全部回复
仅看楼主
level 5
2022年08月01日 10点08分 1
level 11
什么意思,输入x,y返回y,x?
2022年08月12日 11点08分 2
level 5
输入X,Y得长度,和角度
2022年08月12日 12点08分 3
level 11
function jiaoduchangdu(x,y)
return [sqrt(x**2+y**2),atand(y/x)]
endf
2022年08月12日 19点08分 4
@xqooZXY 运行不了
2022年08月12日 19点08分
@xqooZXY 我的怎么运行了,保存为mfps格式文件哦。
2022年08月12日 20点08分
@草木哈哈😂😂 保存为mfps格式文件再试
2022年08月12日 20点08分
level 11
运行界面
2022年08月12日 20点08分 5
level 7
function zbzs()
print("坐标正算"+"\n")
do
variable a = input("起点坐标x0=")
variable b = input("起点坐标y0=")
variable nn=1
do
print("--------------------------"+"\n")
print("起点坐标x0="+a+"\n")
print("起点坐标y0="+b+"\n")
variable c = input("起终点距离D=")
print("角度输入:1°1′1.01″输入为1.010101"+"\n")
variable d = input("起终点方位角α=")
variable e,f
e=round((a+c*cos(toraddms(d))),4)
f=round((b+c*sin(toraddms(d))),4)
print("终点坐标x"+nn+"="+e+"\n")
print("终点坐标y"+nn+"="+f+"\n")
nn=nn+1
variable aa=input("继续计算输1,结束计算输2= ")
until or(aa<1,aa>1)
variable aaa=input("重新开始计算输1,结束计算输2= ")
until or(aaa<1,aaa>1)
print("坐标正算结束"+"\n")
endf
function zbfs()
print("坐标反算"+"\n")
do
variable a = input("起点坐标x0=")
variable b = input("起点坐标y0=")
variable nn=1
do
print("--------------------------"+"\n")
print("起点坐标x0="+a+"\n")
print("起点坐标y0="+b+"\n")
variable c = input("终点坐标x"+nn+"=")
variable d = input("终点坐标y"+nn+"=")
variable e
variable f,g,h,o,p
g=c-a
h=d-b
o=pol(g,h)
print("起终点距离D="+round(o[0],4)+"\n")
print("起终点方位角α="+todmsdeg(fwjfw(o[1]))+"\n")
nn=nn+1
variable aa=input("继续计算输1,结束计算输2= ")
until or(aa<1,aa>1)
variable aaa=input("重新开始计算输1,结束计算输2= ")
until or(aaa<1,aaa>1)
print("坐标反算结束"+"\n")
endf
2022年08月16日 02点08分 6
level 7
以上程序需要用到的度分秒转换函数及其他函数
function sgn(sgn1)
variable sgn2
if sgn1<0
sgn2=-1
elseif sgn1>0
sgn2=1
elseif sgn1==0
sgn2=0
endif
return sgn2
endf
Help
@language:simplified_chinese
函数qz(x)返回x的取整的值。
@end
Endh
function qz(qz1)
variable qz2
if qz1<0
qz2=-floor(abs(-qz1))
else
qz2=floor(qz1)
endif
return qz2
endf
Help
@language:simplified_chinese
函数qw(x,n)返回x的截取n位小数的值。
@end
Endh
function qw(qw1,n)
variable qw2
if qw1<0
qw2=-floor(abs(-qw1),n)
else
qw2=floor(qw1,n)
endif
return qw2
endf
Help
@language:simplified_chinese
函数 todegdms(x)返回将度分秒的x转化成度的值。
@end
Endh
function todegdms(todegdms1) //度分秒转化为度,度分秒的输入格式为 度.分秒 如1°1′0.01″ 输入 1.010001
variable todd2,todd3,todd4,todd5
todd2=qz( todegdms1)
todd3=(qw( todegdms1,2)- todd2)*100
todd4=(qw( todegdms1,6)-qw( todegdms1,2))*10000
todd5=todd2+todd3/60+todd4/3600
return todd5
endf
Help
@language:simplified_chinese
函数 todmsdeg(x)返回将度格式x转化成度分秒格式的值,此结果为字符串无法参与运算,最后要显示度分秒结果时用此函数。
@end
Endh
function todmsdeg(x)//度转化为度分秒,度分秒不能参与运算只能作为结果显示, 度分秒的格式为 1°1′0.01″
variable x1,x2,x3,x4,x5,x6
x1=x
x2=qz(x1)
x3=(x1-x2)*60
x4=round((x3-qz(x3))*60,2)
x5=qz(x3)
if x4==60
x4=0
x5=x5+1
endif
if x5==60
x5=0
x2=x2+1
endif
return x2+"°"+x5+"′"+x4+"″"
endf
Help
@language:simplified_chinese
函数 todmsjdeg(x)返回将度格式x转化成度分秒格式的值, 此结果为数值可参与运算,在中间计算中转化时可用此函数。
@end
Endh
function todmsjdeg(x)//度转化为度分秒,度分秒可直接参与运算,度分秒的格式为 度.分秒 如1°1′0.01″ 为 1.010001
variable x1,x2,x3,x4,x5,x6
x1=x
x2=qz(x1)
x3=(x1-x2)*60
x4=round((x3-qz(x3))*60,2)
x5=qz(x3)
if x4==60
x4=0
x5=x5+1
endif
if x5==60
x5=0
x2=x2+1
endif
return x2+x5/100+x4/10000
endf
Help
@language:simplified_chinese
函数 toraddms(x)返回将度分秒的x转化成弧度的值。
@end
Endh
function toraddms(toraddms1)//度分秒直接转化为弧度,度分秒的输入格式为 度.分秒 如1°1′0.01″ 输入 1.010001
variable toraddms2
toraddms2=torad(todegdms(toraddms1))
return toraddms2
endf
Help
@language:simplified_chinese
函数 todmsrad(x)返回将弧度的x转化成度分秒格式的值。
@end
Endh
function todmsrad(todmsrad1) //弧度转化为度分秒,度分秒不能参与运算只能作为结果显示, 度分秒的格式为 1°1′0.01″
variable todmsrad2
todmsrad2=todmsdeg(todeg(todmsrad1))
return todmsrad2
endf
Help
@language:simplified_chinese
函数fwjfw(x)返回将方位角x的值调整到0度到360度范围内的值。
@end
Endh
function fwjfw(fwj)
do
if fwj>=360
fwj=fwj-360
elseif fwj<0
fwj=fwj
+3
60
endif
until and(fwj>=0,fwj<360)
return fwj
endf
2022年08月16日 02点08分 7
level 5
感谢,感谢,谢谢大神,学习了,
2022年08月16日 03点08分 8
level 5
这个怎么解决
2022年08月16日 03点08分 9
要在命令提示符里面输入 zbzs() 或者坐标zbfs() 而不是长按那个文件
2022年08月16日 03点08分
@编程000 这个设计是不是不太友好
2022年08月16日 14点08分
level 7
2022年08月16日 04点08分 10
1