我正在尝试从图片的右上角到左下角对角线绘制平行线。我希望它看起来像这样(可爱的绘画图片)
def diagTopLBottomR():
pic=makePicture(pickAFile())
w=getWidth(pic)
h=getHeight(pic)
x1=0
y1=0
x2=0
y2=0
i=0
while i<11:
x1=10*i
y2=10*i
i+=1
for y in range (y1,y2):
x = (y-y1)*(x2-x1)/(y2-y1) +x1
px=getPixel(pic,x,y)
color=makeColor(0,0,0)
setColor(px, color)
x3=0
y3=h
x4=w
y4=0
j=0
while j<10:
x3=10*j
y4=10*j
j+=1
for y in range (y3,y4):
x = (y-y3)*(x4-x3)/(y4-y3) +x3
px=getPixel(pic,x,y)
color=makeColor(0,0,0)
setColor(px, color)
return(pic)
您会注意到,x3要么是最大值,导致超出范围的异常,要么y范围将从更高的值开始,即(y3> y4),并且不能反向工作,或者当我递减它时。这就像一个悖论。
第一个循环正在工作,无论我如何尝试,我都无法使第二个循环工作。这就是我最后的目的。
有任何想法吗?谢谢。
编辑
我一直在使用范围,并且在第二个循环中都没有结果,如上所示超出范围的异常。
我试过了:
x3=0
y3=h
x4=w
y4=0
j=0
while j<10:
x3=10*j
y4=10*j
j+=1
for x in range (x3,x4):
y = (x-x3)*(y4-y3)/(x4-x3) +y3
偷走了 unicorn from here。
最佳答案
在第一部分中,y1
设置为0,并且y2
在循环中从0增加,因此y1 < y2
。这很好,因为您使用
for y in range (y1,y2)
在第二部分中,
y3
设置为h
(我想在您的情况下为128),并且y4
在循环中从0开始增加,所以y3 > y4
。这不好,因为您使用for y in range (y3,y4)
您可以尝试通过向
range()
提供第三个参数来指示向后步进,该参数指示步长为-1。或者,您可以切换y3
和y4
(请谨慎处理其余代码)。