在python 中,我试图生成一个平滑的矢量畸变场以帮助我创建半现实的大洲,但是它一直给我带来奇怪的输出,使我对它们的发生方式感到困惑。该方法基于this great article
Jasper McChesney编写,但我编写的代码一直出错。
我认为这是错误的代码
def smooth_vector_field(locvfield, passes, size):
for p in range(0,passes):
for y in range(0,size-1):
for x in range(0,size-1):
sinx = 0
cosy = 0
div = 0
#check all orthogonal neighbours
if x != 0:
#because using the normal angles would avg to 180, break into
#x and y comps
sinx += math.sin(math.radians(locvfield[x - 1, y]))
cosy += math.cos(math.radians(locvfield[x - 1, y]))
div += 1
if x != size-1:
sinx += math.sin(math.radians(locvfield[x + 1, y]))
cosy += math.cos(math.radians(locvfield[x + 1, y]))
div += 1
if y != 0:
sinx += math.sin(math.radians(locvfield[x , y - 1]))
cosy += math.cos(math.radians(locvfield[x , y - 1]))
div += 1
if y != size-1:
sinx += math.sin(math.radians(locvfield[x, y + 1]))
cosy += math.cos(math.radians(locvfield[x, y + 1]))
div += 1
ang = math.atan2(cosy,sinx)
ang =math.degrees(ang)
ang = 90 - ang
locvfield[x,y] = locvfield[x,y] + (ang - locvfield[x,y]) * 0.5
return locvfield
现在,我知道要看的代码很多,但是我需要显示整个代码块。我项目中的其他代码只是生成随机矩阵并显示出来。
虽然它应该给我输出类似大矢量场的图片(上面提到的文章中有很多颜色并且旁边有一个长条的图片),但由于某种原因,它不允许我输入,并且输出的图片也不起作用,但我会尝试解释一下,它基本上为我提供了一个围绕180度居中的网格-也就是说,大多数颜色将变为绿色或蓝色,并在边缘或在右侧和底部,完全没有进行平滑,它们仍然是完全随机的。
谁能告诉我如何解决这个问题?
P.S。我11岁,所以请不要对我施加压力