Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当我扩大网格时,如何调整障碍物的大小使其变大?_Python_Python 3.x_Matplotlib_3d - Fatal编程技术网

Python 当我扩大网格时,如何调整障碍物的大小使其变大?

Python 当我扩大网格时,如何调整障碍物的大小使其变大?,python,python-3.x,matplotlib,3d,Python,Python 3.x,Matplotlib,3d,我正在尝试为无人机实现一个3D环境,我已经随机分配了障碍物,高度随机。每次跑步时,障碍物的位置和高度都会有所不同。我的问题当我把10*10的大小给我的网格时,它会工作得很好,障碍物的大小是可以接受的,但是当我把我的网格例如50*50,障碍物会太小,图像不清晰。如何解决障碍物的大小问题?我怎样才能放大它们,但在我放大网格时不让细胞干扰 小于10*10网格大小 小于50*50网格大小 我在python中的尝试 import matplotlib.pyplot as plt import numpy

我正在尝试为无人机实现一个3D环境,我已经随机分配了障碍物,高度随机。每次跑步时,障碍物的位置和高度都会有所不同。我的问题当我把10*10的大小给我的网格时,它会工作得很好,障碍物的大小是可以接受的,但是当我把我的网格例如50*50,障碍物会太小,图像不清晰。如何解决障碍物的大小问题?我怎样才能放大它们,但在我放大网格时不让细胞干扰

小于10*10网格大小

小于50*50网格大小 我在python中的尝试

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import axes3d
import random
import matplotlib.colors as colors
import matplotlib.cm as cm

def display(elev_mp1, drone_height, risk_zone):
    fig = plt.figure()
    ax = fig.add_subplot(111,projection='3d')

    ax.plot([0],[0],[0])
    ax.plot([0],[0],[1000])

    #x = np.linspace(0,len(elev_mp1),len(elev_mp1)+1)
    #y = np.linspace(0,len(elev_mp1),len(elev_mp1)+1)
    #X,Y = np.meshgrid(x,y)
    #z = np.array([[0 for x in range(len(X[0]))]    for y in range(len(X))])

    num_bars = len(elev_mp1)*len(elev_mp1[0])
    x_pos = []
    y_pos = []

    for x in range(len(elev_mp1[0])):
        for y in range(len(elev_mp1)):
            x_pos.append(x)
            y_pos.append(y)
    z_pos = [0] * num_bars
    x_size = np.ones(num_bars)
    y_size = np.ones(num_bars)
    z_size = np.array(elev_mp1).flatten()

    color_values = []

    for x in z_size:
        if x >= drone_height:
            color_values.append([0,0,0,1])
        elif x in risk_zone:
            color_values.append([1,0,0,1])
        else:
            color_values.append([1,0,1,1])

    ax.bar3d(x_pos, y_pos, z_pos, x_size, y_size, z_size, color=color_values)

    #ax.plot_wireframe(X,Y,z)
    plt.show()

x = [[random.uniform(0,1) for i in range(10)]for j in range(10)]
elev_mp1 = np.array([[0 for i in range(len(x[0]))]for j in range(len(x))])

for i in range(len(x)):
    for j in range(len(x[0])):
        if x[i][j] <= 0.96:
            elev_mp1[i][j] = 0
        else:
            elev_mp1[i][j] = 1
drone_height = 60

risk_zone = [x for x in range(40,60)]

for x in range(len(elev_mp1)):
    for y in range(len(elev_mp1[0])):
        if elev_mp1[x][y] == 1:
            elev_mp1[x][y] = random.randint(1,100)
        else:
            elev_mp1[x][y] = 0

display(elev_mp1, drone_height, risk_zone)
导入matplotlib.pyplot作为plt
将numpy作为np导入
从mpl_toolkits.mplot3d导入axes3d
随机输入
将matplotlib.colors导入为颜色
将matplotlib.cm导入为cm
def显示(标高mp1、无人机高度、危险区):
图=plt.图()
ax=图添加_子图(111,投影='3d')
ax.绘图([0]、[0]、[0])
ax.绘图([0]、[0]、[1000])
#x=np.linspace(0,len(elev_mp1),len(elev_mp1)+1)
#y=np.linspace(0,len(elev_mp1),len(elev_mp1)+1)
#十、 Y=np.meshgrid(X,Y)
#z=np.数组([[0表示范围内的x(len(x[0]))]表示范围内的y(len(x))]))
条数=len(elev_mp1)*len(elev_mp1[0])
x_pos=[]
y_pos=[]
对于范围内的x(len(elev_mp1[0]):
对于范围内的y(len(elev_mp1)):
x_位置附加(x)
y_位置附加(y)
z_pos=[0]*条数
x_size=np.个(条数)
y_尺寸=np.个(条数)
z_size=np.array(elev_mp1).flatten()
颜色值=[]
对于z_尺寸的x:
如果x>=无人机高度:
颜色值。追加([0,0,0,1])
风险区的elif x:
颜色值。追加([1,0,0,1])
其他:
颜色值。追加([1,0,1,1])
ax.bar3d(x_位置、y_位置、z_位置、x_大小、y_大小、z_大小、颜色=颜色值)
#X.plot_线框(X,Y,z)
plt.show()
x=[[范围(10)内i的随机均匀(0,1)]范围(10)内j的随机均匀(0,1)]
elev_mp1=np.数组([[0表示范围内的i(len(x[0])])]表示范围内的j(len(x))]))
对于范围内的i(len(x)):
对于范围内的j(len(x[0]):

如果x[i][j]IIUC,则障碍物的x和y尺寸由常数
1
定义,即由
np.one(数条)
定义

我假设您通过使用
范围(10)
来设置硬编码的栅格大小,但是当您希望通过例如x和y中的系数5来缩放障碍物时,您可以简单地将该系数添加到大小数组的定义行:

a = 5    # or however you want to create/control this factor in your program

x_size = a * np.ones(num_bars)
y_size = a * np.ones(num_bars)
例如,您可能应该考虑将gridsize设置为一个可变参数,将障碍物大小设置为其中的一部分,以便在更改gridsize时,它会自动缩放


(顺便说一句:你可以留下第二个大小变量,并在这行中使用例如
size=a*np.ones(num_bar)
用于两个方向,如果你有平方障碍物…

我在这里设置了网格大小x=[[random.uniform(0,1)表示范围(10)内的I]表示范围(10)内的j)]。你的意思是什么(您可以保留第二个大小变量,并在两个方向上使用例如size=a*np.ones(num_条),如果您仍然有平方障碍物)。我该怎么做呢?确切地说,通过将
10
硬编码到此行中。在脚本开头设置一个参数
grid\u size=10
,相应地替换
10
s,并定义障碍物的大小,例如通过
x\u size=.1*grid\u size*np.one(数条)
。你可以留下第二个大小变量…我的意思是:如果你的障碍物在x方向上的大小与在y方向上的大小相同-你可以简单地为这两个方向定义一个单一的大小变量,例如
宽度=.1*网格大小*np.ones(num_bar)
。然后在你的barplot命令中为x和y kwargs:
ax.bar3d使用这个变量(x_pos,y_pos,z_pos,width,width,z_size,color=color_值)
好主意,但这不会与我在循环中的网格大小冲突?x=[[range(10)中i的随机.uniform(0,1)]范围(10)中j的随机