生成平滑矢量失真场时出错

时间:2018-08-07 17:18:32

标签: python-3.x vector distortion

在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岁,所以请不要对我施加压力

0 个答案:

没有答案