Interpolate Date- Catmull 我得到以下错误:TypeError:不能将序列乘以'float'类型的非int
Interpolate Date-Linear 我收到以下错误:Unexpexted Token“v3”
我是Python的新手,并想知道我在使用这段代码时遇到了什么问题。 谢谢 下面是D和t的输入。
IN[0]
-1.075000
-0.885818
-0.688475
-0.483791
-0.301645
-0.114591
0.077063
0.273042
0.473106
0.677038
1.025973
1.306626
1.592869
1.884406
2.363634
2.597338
2.833636
3.072438
3.313663
3.557232
3.803073
4.051116
4.301297
4.807834
5.069212
5.349055
5.649760
5.971703
IN[1]
0.000000
0.055556
0.111111
0.166667
0.222222
0.277778
0.333333
0.388889
0.444444
0.500000
0.555556
0.611111
0.666667
0.722222
0.777778
0.833333
0.888889
0.944444
1
0.000000
0.027778
0.055556
0.083333
0.111111
0.138889
0.166667
0.194444
0.222222
0.250000
0.277778
0.305556
0.333333
0.361111
0.388889
0.416667
0.444444
0.472222
0.500000
0.527778
0.555556
0.583333
0.611111
0.638889
0.666667
0.694444
0.722222
0.750000
0.777778
0.805556
0.833333
0.861111
0.888889
0.916667
0.944444
0.972222
1
D=IN[0]
t=IN[1]
a=[]
def SampleLinear(v0, v1, t):
value = v0 * (1.0 - t) + v1 * t
return value
def Interpolate (values, parameter):
num = len(values) - 1
num2 = parameter * float(num)
num3 = int((float(floor(num2)))
v3 = values[num3]
v4 = values[num3]
value = SampleLinear(v3, v4, num2 - float(num3))
return value
for i in t:
a.append(Interpolate(D,i))
OUT = a
D=IN[0]
t=IN[1]
a=[]
def SampleCatmull(v00,v0,v1,v11,t):
num = -0.5 * v00 + 1.5 * v0 - 1.5 * v1 + 0.5 * v11
num2 = v00 - 2.5 * v0 + 2.0 * v1 - 0.5 * v11
num3 = -0.5 * v00 + 0.5 * v1
value = num * (t * t * t) + num2 * (t * t) + num3 * t + v0
return value
def Interpolate(values, parameter):
num = len(values) - 1
num2 = parameter * float(num)
num3 = float(floor(num2))
num6 = values[num3]
v7 = 0
v8 = 0
num7 = values[num3]
if num3 <= 0:
v7 = num6 - (num7 - num6)
else:
v7 = values[num3 - 1]
if num3 >= num - 1:
v8 = num7 - (num6 - num7)
else:
v8 = values[num3 + 2]
value = SampleCatmull(v7, num6, num7, v8, num2 - float(num3))
return value
for i in t:
a.append(Interpolate(D, i))
OUT = a
答案 0 :(得分:0)
你忘记了num3 = int((float(floor(num2)))
行的括号
应该是:num3 = int((float(floor(num2))))
当你这样做时:
num3 = float(floor(num2)) # num3 is of type float, should be int
num6 = values[num3]
您正试图通过索引(values
)访问num3
列表的元素,因此您的索引必须是整数,在您的情况下,它是&#39; sa将其更改为:{{ 1}}
答案 1 :(得分:0)
所以@arthur的上述答案是正确的,你试图将float
传递给需要整数的列表索引查询。改变那条线为我解决了问题。这是Dynamo的实际图片/代码片段。
您遇到的另一个问题是将浮点数0.00001
与列表1
中的整数混合在一起。始终如一。
聚苯乙烯。关于缩进的主题,我会说Dynamo,它的设置方式,要求你选择一种风格。它既可以是空格,也可以是标签,最好保持一致。我之前(偶然)混合它时遇到了一些麻烦。我重新格式化了你的代码,它适用于所有标签。
代码:
import clr
import sys
pyt_path = r'C:\Program Files (x86)\IronPython 2.7\Lib'
sys.path.append(pyt_path)
from math import floor
def SampleCatmull(v00,v0,v1,v11,t):
num = -0.5 * v00 + 1.5 * v0 - 1.5 * v1 + 0.5 * v11
num2 = v00 - 2.5 * v0 + 2.0 * v1 - 0.5 * v11
num3 = -0.5 * v00 + 0.5 * v1
value = num * (t * t * t) + num2 * (t * t) + num3 * t + v0
return value
def Interpolate(values, parameter):
num = len(values) - 1
num2 = parameter * float(num)
num3 = (int)(floor(num2))
num6 = values[num3] #num3 has to be an index (int)
v7 = 0
v8 = 0
num7 = values[num3]
if num3 <= 0:
v7 = num6 - (num7 - num6)
else:
v7 = values[num3 - 1]
if num3 >= num - 1:
v8 = num7 - (num6 - num7)
else:
v8 = values[num3 + 2]
value = SampleCatmull(v7, num6, num7, v8, num2 - float(num3))
return value
D=IN[0]
t=IN[1]
a=[]
for i in t:
a.append(Interpolate(D, i))
#Assign your output to the OUT variable.
OUT = a
这是另一个:
import clr
import sys
pyt_path = r'C:\Program Files (x86)\IronPython 2.7\Lib'
sys.path.append(pyt_path)
from math import floor
def SampleLinear(v0, v1, t):
value = v0 * (1.0 - t) + v1 * t
return value
def Interpolate (values, parameter):
num = len(values) - 1
num2 = parameter * float(num)
num3 = (int)(floor(num2))
v3 = values[num3]
v4 = values[num3]
value = SampleLinear(v3, v4, num2 - float(num3))
return value
D=IN[0]
t=IN[1]
a=[]
for i in t:
a.append(Interpolate(D,i))
#Assign your output to the OUT variable.
OUT = a