資源簡介
仿真3D版本.py
代碼片段和文件信息
import?time
import?copy
import?numpy?as?np
import?matplotlib.pyplot?as?plt
from?matplotlib?import?animation
from?mpl_toolkits.mplot3d?import?Axes3D
NUM?=?10
n?=?np.random.randint(310)??#?3、4、5邊形
R?=?30??#?多邊形半徑
Point_List?=?[]
‘‘‘高度錯開所需參數(shù)‘‘‘
low?SPEED0?Hight?=?0?2?200
distance?=?380?/?NUM
‘‘‘抵達(dá)邊界所需參數(shù)??#?根據(jù)無人機(jī)數(shù)量NUM得出邊界最大容量數(shù)量MAXNUM‘‘‘
MOVE_DISTANCE?=?0.3
JianCeError?=?0.1
if?((NUM?-?n)?/?n)?%?1?==?0:
????MAXNUM?=?(NUM?-?n)?/?n
else:
????MAXNUM?=?int((NUM?-?n)?/?n)?+?1
JIANJU?=?2?*?R?*?np.sin(np.pi?/?n)?/?(MAXNUM?+?1)
#?2?*?R?*?np.sin(np.pi/n)是邊界長度,?JIANJU是調(diào)整單位距離
‘‘‘均勻化參數(shù)‘‘‘
Ting_Distance?=?3
Move_Distance?=?20??#?20?*?0.01?=0.2
‘‘‘隨機(jī)生成初始分布位置??設(shè)定多邊形位置?‘‘‘
x?=?np.random.randint(1?100?NUM)
y?=?np.random.randint(1?100?NUM)
z?=?[0?for?i?in?range(NUM)]
for?i?in?range(NUM):
????Point_List.append([x[i]?y[i]?z[i]])
#?多邊形數(shù)量設(shè)定
DING_LIST?=?[]
DingX?DingY?DingZ?=?[]?[]?[]
def?PolygonInit():
????global?DING_LIST
????global?n
????global?DingX?DingY?DingZ
????for?i?in?range(1?n?+?1):
????????x?=?50?+?R?*?np.sin(i?*?2?*?np.pi?/?n)
????????y?=?50?+?R?*?np.cos(i?*?2?*?np.pi?/?n)
????????DING_LIST.append([x?y?Hight])
????DingX?DingY?DingZ?=?[]?[]?[]
????for?each?in?DING_LIST:
????????DingX.append(each[0])
????????DingY.append(each[1])
????????DingZ.append(each[2])
????DingX.append(DING_LIST[0][0])
????DingY.append(DING_LIST[0][1])
????DingZ.append(DING_LIST[0][2])
PolygonInit()??#?初始化多邊形頂點位置
‘‘‘初始化圖像‘‘‘
fig?=?plt.figure()
ax?=?plt.gca(projection=‘3d‘)
ax.set_xlim(0?100)
ax.set_xlabel(‘X‘)
ax.set_ylim(0?100)
ax.set_ylabel(‘Y‘)
ax.set_zlim(0?400)
ax.set_zlabel(‘Z‘)
sc?=?ax.scatter3D(x?y?z?color=‘r‘?alpha=0.7)
#?ax.plot(DingX?DingY?DingZ?‘b:‘)
#sc?=?ax.scatter3D(x?yz?color=‘r‘?alpha=0.7marker=‘1‘linewidth?=?8)
ax.plot(DingX?DingYDingZ?color?=?‘black‘linestyle?=?‘:‘)
D?=?2?*?R?*?np.sin(np.pi?/?n)
num?=?int(D?/?0.01)
tooth_distance?=?D?/?num
Tooth_Chain?=?[]
def?Chain_make():
????global?Tooth_Chain
????for?i?in?range(0?n):
????????Tooth_Chain.append(DING_LIST[i])
????????base_pos?=?copy.deepcopy(DING_LIST[i])
????????if?i?==?len(DING_LIST)?-?1:
????????????next?=?DING_LIST[0]
????????else:
????????????next?=?DING_LIST[i?+?1]
????????x?=?np.array([next[0]?-?DING_LIST[i][0]?next[1]?-?DING_LIST[i][1]])??#?方向向量
????????y?=?np.array([1?0])??#?x軸方向
????????Lx?=?np.sqrt(x.dot(x))??#?x.dot(x)?點乘自己,相當(dāng)于向量模平方
????????Ly?=?np.sqrt(y.dot(y))
????????cos_angle?=?x.dot(y)?/?(Lx?*?Ly)
????????angle?=?np.arccos(cos_angle)
????????if?x[0]?>=?0?and?x[1]?>=?0:
????????????for?j?in?range(1?num):
????????????????a?=?base_pos[0]?+?j?*?tooth_distance?*?abs(np.cos(angle))
????????????????b?=?base_pos[1]?+?j?*?tooth_distance?*?abs(np.sin(angle))
????????????????Tooth_Chain.append([a?b?Hight])
????????????#?print(‘1‘?len(Tooth_Chain))
????????elif?x[0]?<=?0?and?x[1]?>=?0:
????????????for?j?in?range(1?num):
????????????????a?=?base_pos[
評論
共有 條評論