Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.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 使用权重在更宽的区域上分布0到1之间的点_Python - Fatal编程技术网

Python 使用权重在更宽的区域上分布0到1之间的点

Python 使用权重在更宽的区域上分布0到1之间的点,python,Python,如果你知道自己在做什么,我想这并不难,但我上一次的实现并不完美,如果你在极端情况下这样做,权重就会被打破,现在我无法理解它 基本上,所有内容都有一个介于0和1之间的值,我需要将它们指定给着色器。下面是它将如何工作的基本概念 numShaders = 20 i = 0 weight = 0.5 shader = 0 i = 0.5 weight = 0.5 shader = 10 i = 1 weight = 0.5 shader = 20 i = 1 weight = 0 shader

如果你知道自己在做什么,我想这并不难,但我上一次的实现并不完美,如果你在极端情况下这样做,权重就会被打破,现在我无法理解它

基本上,所有内容都有一个介于0和1之间的值,我需要将它们指定给着色器。下面是它将如何工作的基本概念

numShaders = 20

i = 0
weight = 0.5
shader = 0

i = 0.5
weight = 0.5
shader = 10

i = 1
weight = 0.5
shader = 20

i = 1
weight = 0
shader = 0

i = 0.5
weight = 0.75
shader = around 15

i = 1
weight = 0.75
shader = 20
权重应该是指数级的,或者理想情况下,可以选择控制其向外推的方式-例如,向外推意味着0.75权重可以产生17而不是15,但永远不会超过20,并且只有在将其设置为0或1或足够接近它时,才使用同一着色器生成所有结果

我一直在想办法,但目前运气不好,所以提前谢谢你

如果有帮助的话,这适用于0.5的权重,但不适用于其他权重,我不太确定在哪里添加power-numShaders*weight*I*2

另外,旧的实现在这里,我只是无法成功地将最初的部分转换成现在可以工作的东西,一旦我掌握了基本知识,我可能能够复制其余部分-

#colourValue = 0 to 1
#shaderAmount = number of shaders in total
#colourExponential = pushing values inwards to give solid colours at edges
#colourRatio = weight

#calculate colour to assign
colourValue = py.getAttr( cube+'.colourValue' )
colourNum = colourValue * shaderAmount - ( (colourValue * shaderAmount) - shaderAmount/2.0 ) / colourExponential

if stretchValues == True:
    #stretch out the values from 0 to max
    if colourNum + 1 == colourNumHalf:
        factor = 0
    elif colourNum + 1 < colourNumHalf:
        factor = ( -colourNumMin / float( colourNum + 1 ) ) * colourNumMin
    elif colourNum + 1 > colourNumHalf:
        factor = ( colourNumMax / float( shaderAmount - colourNum + 1 ) ) * colourNumMax
else:
    factor = 0

colourNum = int(colourNum + factor)

#fix to stop negative numbers
if colourNum < 0:
    colourNum = -colourNum

#set ratio of colours
if colourRatio > 0.5:
    colourNum = int( colourNum + ( shaderAmount - colourNum ) ** ( colourRatio * 2 - 1 ) )
elif colourRatio < 0.5:
    colourNum = int( colourNum - colourNum ** ( 1 - colourRatio * 2 ) )

colourNum = int(round(colourNum,0))

#stop invalid values
if colourNum < 0:
    colourNum = 0
elif colourNum >= shaderAmount:
    colourNum = shaderAmount - 1

py.select( shaderName + str(colourNum), noExpand = True )

#check previous shader
try:
    oldShader.append(shaderSelect.split('n')[-1])
except:
    oldShader.append(shaderAmount - 1)

shaderSelect = py.ls( selection = True )[0]

#stop big jumps in colour
if int(shaderSelect.split('n')[-1]) < int(oldShader[-1]) - 1:
    py.select( shaderName + str(int(oldShader[-1])-1), noExpand = True )
    #overrides initial calculation for extra smoothness
    for i in range(smoothOverride):
        if len(oldShader) > (i+1):
            if int(oldShader[-1]) != int(oldShader[-2-i]):
                py.select( shaderName + str(int(oldShader[-1])), noExpand = True )
    shaderSelect = py.ls( selection = True )[0]
编辑:正如埃弗特指出的,这实际上是正态分布,我将尝试编写类似于此图的代码,但以0.5作为中间点,0和1作为极值。如果我成功了,我将再次编辑该问题。

你能列出你迄今为止尝试过的任何东西吗?20/9*1*10**i-1。我用我现在做的旧版本更新了它,谢谢,但是9是从何而来的P9=10**1-10**0,指数0和1表示初始范围内的数字。实际上,在这种情况下,末尾的1是10**0。20码显然是你的最终射程。虽然这会扩大指数加权的范围,但这当然会导致非整数,而舍入或截断数字将导致双倍数。这取决于你想如何解决这个问题。指数型的,在两端伸展的,听起来并不是指数型的。也许你在想a,或者1-Normalx?