Yve*_*omb 6 python jython draw coordinates jes
我试图从图片的右上角到左下角对角绘制平行线.我希望它看起来像这样(可爱的油漆pic)

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)
Run Code Online (Sandbox Code Playgroud)
您会注意到 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
Run Code Online (Sandbox Code Playgroud)
从这里偷走独角兽.
在第一部分中,y1设置为0并y2在循环中从0开始增加,因此y1 < y2.这很好,因为你使用
for y in range (y1,y2)
Run Code Online (Sandbox Code Playgroud)
在第二部分中,y3设置为h(在我的情况下为128),并且y4在循环中从0开始增加,所以y3 > y4.这不好,因为你使用
for y in range (y3,y4)
Run Code Online (Sandbox Code Playgroud)
您可以通过提供range()指示步长为-1的第三个参数来尝试向后退步.或者你可以切换y3并y4(小心这对你的其余代码做了什么).
range()假设第一个参数小于第二个参数,它按升序排列.你有:
for y in range (y3,y4):
Run Code Online (Sandbox Code Playgroud)
在哪里y3=h和y4=0(在第一关).由于y3> y4,这个循环什么都不做.你可以使用:
for y in range(y4,y3):
Run Code Online (Sandbox Code Playgroud)
要么
for y in range(y3,y4,-1):
Run Code Online (Sandbox Code Playgroud)