mfp吧 关注:777贴子:4,990
  • 14回复贴,共1

能不能帮忙做个坐标正反算的程序,我学习一下。

只看楼主收藏回复



IP属地:肯尼亚来自Android客户端1楼2022-08-01 18:11回复
    什么意思,输入x,y返回y,x?


    来自Android客户端2楼2022-08-12 19:11
    回复
      输入X,Y得长度,和角度


      IP属地:肯尼亚来自Android客户端3楼2022-08-12 20:46
      回复
        function jiaoduchangdu(x,y)
        return [sqrt(x**2+y**2),atand(y/x)]
        endf


        来自Android客户端4楼2022-08-13 03:31
        收起回复
          运行界面


          来自Android客户端5楼2022-08-13 04:32
          回复
            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


            IP属地:四川6楼2022-08-16 10:24
            回复
              以上程序需要用到的度分秒转换函数及其他函数
              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+360
              endif
              until and(fwj>=0,fwj<360)
              return fwj
              endf


              IP属地:四川7楼2022-08-16 10:26
              回复
                感谢,感谢,谢谢大神,学习了,


                IP属地:肯尼亚来自Android客户端8楼2022-08-16 11:24
                回复
                  这个怎么解决


                  IP属地:肯尼亚来自Android客户端9楼2022-08-16 11:30
                  收起回复



                    IP属地:四川10楼2022-08-16 12:42
                    回复