武汉大学测绘学院工测带缓和曲线的圆曲线

#coding:utf-8
__author__ = 'zy'
import math
def JIAODU(x1,y1,x2,y2):
    jd=math.atan((y2-y1)/(x2-x1))
    jd=jd/math.pi*180
    if (x2-x1)<0:
        jd=jd+180
    elif (y2-y1)>=40:
        jd=jd
    else:
        jd=jd+360
    #把角度化为弧度
    #jd=jd/180*math.pi
    return jd
    #返回了角度
#由于Python2中引用不到希腊数字,所以用a代表α,B0,PHi代替 Φ

#曲线线路坐标计算
#设置ZH点为坐标原点
#坐标方位角的计算


g=open(r'g:\zuobiao.txt')
lines=g.readlines()
g.close()

Xjd=float(lines[2])
Yjd=float(lines[3])
Xzh=float(lines[0])
Yzh=float(lines[1])
Xhz=float(lines[4])
Yhz=float(lines[5])
a=-JIAODU(Xzh,Yzh,Xjd,Yjd)+JIAODU(Xjd,Yjd,Xhz,Yhz)+180

print '请输入缓和曲线长度'
Ls=float(lines[7])
R=float(lines[6])

#a=float(raw_input('曲线偏角'))

#输入角度转化为弧度
a=a/180*math.pi
#缓和曲线参数m,P,β0

m=Ls/2-pow(Ls,3)/240/pow(R,2)
P=pow(Ls,2)/24/R
B0=Ls/2/R*180/math.pi

#综合曲线要素
Th=m+(R+P)*math.tan(a/2)
Lh=math.pi*R/180*(a-2*B0)+2*Ls
Eh=(R+P)/math.cos(a/2)-R
q=2*Th-Lh

#主点里程计算,交点里程由设计者提供
#print '交点里程'
Kjd=Th
Kzh=Kjd-Th
Khy=Kzh+Ls
Kqz=Kzh+Lh/2
Lt=(a-2*B0)*R
Kyh=Khy+Lt
Khz=Kyh+Ls
#检核
#Kjd=Kqz+q/2

#给出坐标,ZH,JD,HZ,以ZH为
x=[]
y=[]
X=[]
Y=[]

n=float(raw_input('输入桩位间隔'))

print Khz
azh=JIAODU(Xzh,Yzh,Xjd,Yjd)/180*math.pi
ahz=JIAODU(Xjd,Yjd,Xhz,Yhz)/180*math.pi

def ZHHY(i,j):
    Ki=i
    Li=Ki-Kzh
    x.append(Li-pow(Li,5)/40/pow(R,2)/pow(Ls,2))
    y.append(pow(Li,3)/6/R/Ls)
    #计算曲线线路坐标
    #Xzh+x[j]*math.cos(result[0])-y[j]*math.sin(result[0])
    #Yzh+x[j]*math.sin(result[0])+y[j]*math.cos(result[0])
    X.append(Xzh+x[j]*math.cos(azh)-y[j]*math.sin(azh))

    Y.append(Yzh+x[j]*math.sin(azh)+y[j]*math.cos(azh))
def HYYH(i,j):
    Ki=i
    Li=Ki-Kzh
    PHi=B0+(Li-Ls)/R*180/math.pi
    x.append(m+R*math.sin(PHi))
    y.append(P+R*(1-math.cos(PHi)))
    X.append(Xzh+x[j]*math.cos(azh)-y[j]*math.sin(azh))
    Y.append(Yzh+x[j]*math.sin(azh)+y[j]*math.cos(azh))

def YHHZ(i,j):
    Ki=i
    Li=Khz-Ki
    x.append(Li-pow(Li,5)/40/pow(R,2)/pow(Ls,2))
    y.append(pow(Li,3)/6/R/Ls)
    #Xhz+x[j]*math.cos(result[1])+y[j]*math.sin(result[1])
    #Yhz+x[j]*math.sin(result[1])-y[j]*math.cos(result[1])
    X.append(Xhz+x[j]*math.cos(ahz)+y[j]*math.sin(ahz))
    Y.append(Yhz+x[j]*math.sin(ahz)-y[j]*math.cos(ahz))

i=0
j=0
while i<Khz:
    i=i+n
    if i<= Khy:
        ZHHY(i,j)
    elif i<=Kyh:
        HYYH(i,j)
    else :
        YHHZ(i,j)
    j=j+1

f = open("F:/1.txt", "w+")
f.write("里程 \t X坐标 \t Y坐标\n")
for i in range(0, len(X)):
    i=0
    i=i+n
    f.write("里程"+i+"\t" + X[i] +"\t"+Y[i]+ "\n")
f.close()




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值