2024-05-16 23:25:37 发布
网友
我用一个由0和1组成的numpy数组来表示游戏地图中的碰撞,coords设置为1表示一堵墙。在
我需要做的是从a点到B点的视线测试。所以,给定值startX、startY、endX和{},我需要从numpy数组中以一条直线获取所有值,如果其中任何一个是墙(1),那么就没有视线。在
startX
startY
endX
有没有办法从numpy那里得到一行值?或者这可能是错误的做法?在
有什么建议吗?在
正如所说的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])
正如所说的Daniel F,这可以是一个实现。我改进、完成并修复了它的实现。在
一个简单的实现
相关问题 更多 >
编程相关推荐