房間內人群疏散的python簡單模擬

2021-09-26 07:29:06 字數 2343 閱讀 3829

在11乘11的元胞空間 隨機生成5個人,然後人物尋找房門疏散出去.

import numpy as np

import matplotlib.pyplot as plt

people_number =

5# 人物生數成設定5

world_size =

11# 房間長寬11個元胞

class

people

: world = np.zeros(

(world_size, world_size)

)# 這裡是定義的靜態變數 同一類的 例項物件 共享這乙個

door = np.array((0

,3))

.reshape((1

,2))

# 可注意到這裡的變數名前不用寫 self.

def__init__

(self)

: self.position =

none

# # 在這裡初始化例項物件屬性

defgenerate

(self, x, y)

: people.world[x, y]=1

self.position = np.array(

(x, y)

).reshape((1

,2))

defmove

(self):if

(self.position == self.door)

.all()

:return

1else

: move_matrix = np.array([[

-1,-

1],[

-1,0

],[-

1,1]

,[0,

-1],

[0,0

],[0

,1],

[1,-

1],[

1,0]

,[1,

1]])

distance = np.zeros(9)

# distance 初始化

for i in

range(9

):distance[i]

= np.

sum(np.

abs(self.position + move_matrix[i,:]

- self.door)

)# 路徑選擇(最近臨胞)

choose = distance.argmin(

)# 房間更新

people.world[self.position[0,

0], self.position[0,

1]]=

0 self.position += move_matrix[choose,:]

people.world[self.position[0,

0], self.position[0,

1]]=

1return

0if __name__ ==

'__main__'

: a =

for i in

range

(people_number):)

) a[i]

.generate(np.random.randint(

0, world_size)

, np.random.randint(

0, world_size)

)# 隨機產生人物時可能重疊

fig = plt.figure(

) plt.imshow(people.world)

plt.xticks(()

) plt.yticks(()

) plt.ion(

) plt.show(

)# print(people.world, '\n') # 類名.屬性名 直接訪問

# a[0].world = *** # 這樣會建立乙個同名的 例項物件的屬性

flags = np.zeros((1

, people_number)

)while np.

sum(flags)

< people_number:

for i in

range

(people_number)

: flags[

0, i]

= a[i]

.move(

) plt.imshow(people.world)

plt.pause(

0.5)

Revit API 查詢房間內構件

需求 算量時裝飾等類的構件需統計房間資訊,水電等類的構件統計所在系統。主要方法 得到房間solid,然後通過solid過濾出與其相交的構件。從而判斷構件所在房間,跨房間的構件通過窗體顯示出來,由使用者判斷所在房間。首先,api中有個內建引數為builtinparameter.elem room na...

Revit API建立乙個拷貝房間內物件布局命令

本課程演示建立乙個拷貝房間內物件布局命令,完整演示步驟和 這個命令把選中房間內的物件複製到其它選中的乙個或多個房間中,而且保持與源房間一致的相對位置。通過本講座使聽眾知道建立乙個二次開發程式很簡單,建立乙個實用的命令也很快。複製房間 transactionattribute autodesk.rev...