Python中numpy数组的“视线”

2024-05-16 23:25:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我用一个由0和1组成的numpy数组来表示游戏地图中的碰撞,coords设置为1表示一堵墙。在

我需要做的是从a点到B点的视线测试。所以,给定值startXstartYendX和{},我需要从numpy数组中以一条直线获取所有值,如果其中任何一个是墙(1),那么就没有视线。在

有没有办法从numpy那里得到一行值?或者这可能是错误的做法?在

有什么建议吗?在


Tags: numpy游戏错误地图数组coords建议直线
2条回答

正如所说的Daniel F,这可以是一个实现。我改进、完成并修复了它的实现。在

import numpy as np

a = np.ones([7, 7])
a[3, 3] = 1
a[1, :] = 2
a[4, :] = 2

b = 1 - a
b = b.astype(bool)

startX = 3
startY = 0
endX = 3
endY = 5
n = 4  # Steps per unit distance
dxy = (np.sqrt((endX - startX) ** 2 + (endY - startY) ** 2)) * n
i = np.rint(np.linspace(startX, endX, dxy)).astype(int)
j = np.rint(np.linspace(startY, endY, dxy)).astype(int)
has_collision = np.any(b[i, j])

print("Has collision", has_collision)

一个简单的实现

coll = np.random.randint(0, 2, (100,100)) # collision matrix
n = 4 # bigger for more accurate, less speed
dxy = (startX - endX + startY - endY) * n
i = np.rint(np.linspace(startX, endX, dxy))
j = np.rint(np.linspace(startY, endY, dxy))
collision = np.any(coll[i, j])

相关问题 更多 >