我正在编写一种方法,以numpy像素数组绘制一个完整的圆,而我只是不明白为什么会收到TypeError。我向高级人员表示歉意-我是一名新的Python程序员,最近从Java换班,但仍然对所有这些“定义变量数据类型不足”感到困惑。
class Image:
def drawCircle(self, centerX, centerY, radius):
sin45 = 0.70710678118
distance = radius/(2*sin45)
for i in range(radius,distance,-1.0): ####This is the error line####
j = math.sqrt(r*r - i*i)
for k in range(-j, j, 1):
self.writePixel(self.centerX - k, self.enterY + i)
self.writePixel(self.centerX - k, self.enterY - i)
self.writePixel(self.centerX + i, self.enterY + i)
self.writePixel(self.centerX - i, self.enterY - i)
'''Testing the code'''
obj = Image()
obj.drawCircle(35.0, 35.0, 35.0)
此代码可能充满其他错误,但截至目前,我陷入了“ TypeError:'float'对象无法解释为整数”的问题。另外,为了节省空间,我省略了writePixel()的定义,只是假设它可以工作。谢谢!
答案 0 :(得分:2)
更改:
for i in range(radius,distance,-1.0):
收件人:
for i in range(int(radius),int(distance),int(-1.0)):
#or
for i in range(int(radius),int(distance),-1):
请注意,这会将这些数字四舍五入,因此,如果需要十进制精度,则应考虑使用linspace
中的numpy
而不是range
。
这也只会解决TypeError
,而不是说这会解决其他问题
答案 1 :(得分:0)
范围函数中的第三个参数应该是整数而不是浮点数。我想这是造成问题的原因。请尝试使用-1而不是-1.0,还将半径和距离转换为int。
答案 2 :(得分:-1)
在您的代码中,您正在使用变量r
而不对其进行定义。
尝试使用int(math.sqrt())