我正在尝试从图片的右上角到左下角对角线绘制平行线。我希望它看起来像这样(可爱的绘画图片)

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。或者,您可以切换y3y4(请谨慎处理其余代码)。

10-08 14:49