python对象不可订阅_TypeError:“float”对象不可订阅(Python)

我有一个项目,我想计算贝塞尔曲线,以近似三维形状的后视镜。基本上,我的想法是从一些控制点开始,这些控制点会给出第一条Bézier曲线B0的N个点,然后将这条曲线减少一个系数C(0<C<1),这样我就有了一条更小的曲线B1,它的重心与B0相同。然后,我将把两条曲线从2d移到3d,将两条曲线放置在预定的高度(B1为h,B0为0)。我已经对其进行了编码,如下所示:

f8b8107855504f442d246c9666c8f8f3.png

所以现在我想画一条曲线,把第一条曲线B0的每一个点连接到缩小的曲线B1,使整个东西看起来或多或少像一个后视镜。为此,我考虑到B0和B1上每个对应点之间的距离总是相同的,我可以使用一个双射f来连接这些点。现在这个双射曲线可以通过叠加m(m€| N*)中间曲线来近似(这些曲线不会出现在最后的绘图中),并用f获得递减系数

(旁注:我知道使用Poly3dCollection会给我一个更好的结果,但我已经试过了,它没有起作用,显然是因为副作用我无法理解)

但这一部分代码中有一个错误:B= [B0]

B += [bezier_reduit(pts, N, d*(m - phi)/m) for phi in F if (phi != 0) if (phi != d)]

B += B1

for j in range(N+1):

ax.plot([B[i][j][0] for i in range(m+1)], [B[i][j][1] for j in range(m+1)], F)

我将点表示为两个浮点的列表[x,y],因此B0和B1等Bézier曲线是浮点列表的列表,而B是Bézier曲线的列表,所以它是一个浮动列表列表的列表。F是给出每个点的z坐标的浮动列表。这段代码应该绘制两条连续曲线之间的每一条直线,这样最终它看起来或多或少像是连接B0和B1的函数f。在

但当我试图执行这个大函数时(这里只展示了它的一部分,直接指向要点),它说:

^{pr2}$

所以我在网上查了一下,我发现很明显,当一个float被误认为是一个列表时,就会发生这种情况,例如,当x[0]和x一起输入float时,因为Python无法到达float的“第一个元素”。但是我检查了我的代码很多次,我不知道我在哪里做了这样的事情,所以我真的不知道错误是从哪里来的。在

编辑:我使用print(类型(x))检查了B、B[0]、B[0][0]和B[0][0][0](这样我可以确定这些值确实存在),分别得到:

这符合我的预期,所以很不幸我仍然不知道错误来自哪里。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值