【问题标题】:Drawing Diagonal Lines Across a Picture在图片上绘制对角线
【发布时间】:2013-08-06 12:10:17
【问题描述】:

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

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

偷了独角兽from here。

【问题讨论】:

  • 您是否收到错误消息?还是只是不显示

标签: python coordinates draw jython jes


【解决方案1】:

我通过创建px=getPixel(pic,x,y-1) 并使用减少 y 范围的建议答案解决了这个问题。

def diagTopLBottomR():
  pic=makePicture(pickAFile())
  w=getWidth(pic)
  h=getHeight(pic)
  x1=0
  y1=0
  x2=0
  y2=0
  i=0
  while i<10:
    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,-1):#change here
      x = abs((y-y3)*(x4-x3)/(y4-y3) +x3)
      px=getPixel(pic,x,y-1)#change here
      color=makeColor(0,0,0)
      setColor(px, color)

  return(pic)

【讨论】:

    【解决方案2】:

    在第二个循环中,y3 大于(或等于)y4。所以,试试range (y4,y3)。

    【讨论】:

      【解决方案3】:

      在第一部分中,y1 设置为 0,y2 在循环中从 0 增加,因此 y1 &lt; y2。这很好,因为您使用

      for y in range (y1,y2)
      

      在第二部分中,y3 设置为 h(我猜你的情况是 128),y4 在循环中从 0 增加,所以 y3 &gt; y4。这不好,因为你使用

      for y in range (y3,y4)
      

      您可以通过给range() 指定步长为-1 的第三个参数来尝试后退。或者您可以切换 y3 和 y4(注意这对您的其余代码的影响)。

      【讨论】:

      • 所有的 x 和 y 都有可能出现错误。例如在x = (y-y3)*(x4-x3)/(y4-y3) +x3 行中,y4-y3 将为负数。尝试通过并找到类似的东西。
      【解决方案4】:

      range() 假定第一个参数小于第二个参数,并按升序排列。你有:

      for y in range (y3,y4):
      

      其中y3=h 和y4=0(在第一遍)。由于 y3 > y4,这个循环什么也不做。 您可以使用:

      for y in range(y4,y3):
      

      或

      for y in range(y3,y4,-1):
      

      【讨论】:

        猜你喜欢
        • 2013-03-13
        • 2021-02-10
        • 1970-01-01
        • 2022-01-15
        • 2021-12-11
        • 1970-01-01
        • 1970-01-01
        • 2015-10-02
        • 1970-01-01
        相关资源
        最近更新 更多