77777777777777

1111111111111
from math import radians as rad import numpy as np import plotly.graph_objects as go listz = [] listX = [] # 用来存储所有绘图x坐标的数组 listY = [] listZ = [] listzz = [] # 用来存储层之间z坐标的数组 listzzz = [] # 用于提前算出下一层的φ值 listqbx = [] listqby = [] listqbz = [] a = 30 # 椭球赤道半径长半轴,11111111111111 b = 30 # 椭球赤道半径短半轴,222222222222222 c = 10 # 椭球极半径,33333333333333333 l = 0.5 # 层间距,44444444444444 zfs = 360 # 每一层划分的精细程度,同层内步距,555555555555555 nn = 20 # 层之间划分的份数,66666666666666666 jjfx = -1 # 控制进给运动方向(设为1逆时针或者-1顺时针),77777777777777 n = c / l # 走的层数 k = 0 # 辅助将层之间的z值加入 z = 0 # 初始高度 zz = 0 D = 0 # 用于累加弧长的寄存器 f = 270 # 用于分散下压点,选择起始加工点0,90,180,270,888888888888888888 s = 0 # 用于分散下压点 u3 = 90 # 层之间运算角度寄存器3的角度φ,形参 ii = 1 def tongceng(u): t = f global jj jj = 0 while t <= 360 + f: x = a * np.cos(rad(jjfx * t)) * 1 / np.cos(u) # u相当于控制不同层椭球轨迹的φ, y = b * np.sin(rad(jjfx * t)) * 1 / np.cos(u) # 此处给xy赋的值就是椭球参数方程 t += 360 / zfs listx.append(x) listy.append(y) jj += 1 listX.append(listx) listY.append(listy) def cengzhijian(f, uu, cu3, ss): # 层之间的z控制还是使用等角度φ du = (uu - cu3) / nn # nn层之间划分的份数 for j in range(nn - 1): f += (ss / nn) sx = a * np.cos(jjfx * rad(f)) * 1 / np.cos((cu3 + (j + 1) * du)) sy = b * np.sin(jjfx * rad(f)) * 1 / np.cos((cu3 + (j + 1) * du)) listX.append(sx) listY.append(sy) z = c * (np.tan((cu3 + (j + 1) * du)) - np.pi / 3) # 加减的东西是用来控制双曲线延伸段的,即同样的角度区间,但是双曲线取的是哪个弯曲程度的区段 listzz.append(z) def arrflatten(listt): count = 1 new_listX = [] for lis in listt: if isinstance(lis, list): # print("第{}个长度为360的数组".format(count)) count += 1 for j in lis: new_listX.append(j) else: new_listX.append(lis) return new_listX def xiaya(a0, b0, c0): # 最前面的螺旋下刀轨迹 for tt in range(-1080, 90, 10): # 91与后面的c0=0.09有关,后面需要注意 x0 = a0 + np.cos(rad(tt)) # a0的值与a有关,后期需要修改 y0 = b0 + np.sin(rad(tt)) - 1 # -0.5的值与a有关,后期需要修改 z0 = c0 - 0.001 * tt + 0.09 listqbx.append(x0) listqby.append(y0) listqbz.append(z0) for i in np.arange(n - 1): z -= l u = np.arctan(z / c + np.pi / 3) # 加减的东西是用来控制双曲线延伸段的,即同样的角度区间,但是双曲线取的是哪个弯曲程度的区段 listzzz.append(u) u0 = listzzz[0] # if jjfx == 1: # if f == 0: # a0 = a * np.cos(u0-np.pi/2) # b0 = b * np.sin(rad(f)) # c0 = c * np.cos(u0) # xiaya(a0, b0, c0) # if f == 90: # a0 = a * np.cos(rad(f)) # b0 = b * np.sin(u0) # c0 = c * np.cos(u0) # xiaya(a0, b0, c0) # if f == 180: # a0 = a * np.cos(u0+np.pi/2) # b0 = b * np.sin(rad(f)) # c0 = c * np.cos(u0) # xiaya(a0, b0, c0) # if f == 270: # a0 = a * np.cos(rad(f)) # b0 = b * np.sin(u0+np.pi) # c0 = c * np.cos(u0) # xiaya(a0, b0, c0) # if jjfx == -1: # if f == 0: # a0 = a * np.cos(u0-np.pi/2) # b0 = b * np.sin(rad(f)) # c0 = c * np.cos(u0) # xiaya(a0, b0, c0) # if f == 90: # a0 = a * np.cos(rad(f)) # b0 = b * np.sin(u0 + np.pi) # c0 = c * np.cos(u0) # xiaya(a0, b0, c0) # if f == 180: # a0 = a * np.cos(u0+np.pi/2) # b0 = b * np.sin(rad(f)) # c0 = c * np.cos(u0) # xiaya(a0, b0, c0) # if f == 270: # a0 = a * np.cos(rad(f)) # b0 = b * np.sin(u0) # c0 = c * np.cos(u0) # xiaya(a0, b0, c0) for i in np.arange(n - 1): zz -= l listz.append(zz) U = np.arctan(zz / c + np.pi / 3) # 加减的东西是用来控制双曲线延伸段的,即同样的角度区间,但是双曲线取的是哪个弯曲程度的区段 listx = [] listy = [] tongceng(U) # 形成一层的轨迹 if (ii < len(listzzz)): u3 = listzzz[ii - 1] u = listzzz[ii] ii += 1 cengzhijian(f, u, u3, s) # 形成层之间的轨迹 f += s for i in listz: listZ.append(list(np.repeat(i, jj))) if (k < len(listzz)): for j in range(k, nn - 1 + k): # nn层之间划分的份数 listZ.append(listzz[j]) k += (nn - 1) listX = arrflatten(listX) # 二维数组拉伸成一维 listY = arrflatten(listY) listZ = arrflatten(listZ) # print(listqbx) # print(listqby) # print(listqbz) # # print(listX) # # print(listY) # print(listZ) listqbx.extend(listX) listqby.extend(listY) listqbz.extend(listZ) # with open("dengxiayashendujizhong.txt", 'a') as f: #用来输出数据文件 # for i in range(len(listqbx)): # f.write('X' + str(np.around(listqbx[i], 3)) + ' ' + 'Y' + str(np.around(listqby[i], 3)) + ' ' + 'Z' + str(np.around(listqbz[i], 3)) + '\n') # for i in range(len(listqbz)): # z坐标加高度13 # listqbz[i] += 13 fig = go.Figure(data=[ go.Scatter3d( x=listqbx, y=listqby, z=listqbz, mode='lines', # # line=dict( # 对标记的设置 # # color="#eae170", # 颜色设置 # # ) ) ]) # 'lines', 'markers', 'text' 3种情况的组合 fig.update_layout( scene=dict ( xaxis_title=dict(font=dict(size=10)), # 坐标轴的标题名称及字体大小 yaxis_title=dict(font=dict(size=10)), zaxis_title=dict(font=dict(size=10)), aspectratio=dict(x=a, y=b, z=c * 0.5), # 改变画布空间比例为1:1:1 xaxis=dict(tickfont=dict(size=10), backgroundcolor="rgb(255, 255, 255)"), # 坐标轴刻度数字的字体大小 yaxis=dict(tickfont=dict(size=10), backgroundcolor="rgb(255, 255, 255)"), zaxis=dict(tickfont=dict(size=10), backgroundcolor="rgb(255, 255, 255)"), ) ) fig.update_traces(line=dict(color='black')) # 线条颜色改成黑色 fig.show() # ,marker=dict(size=1.0) # 控制点的大小,加在mode后 可以参考一下这个画图的方法
06-19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

flybirding10011

谢谢支持啊999

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值