老师参与

Python DDA算法为什么出来的图不正常

澄碧钓徒 发表于2019年05月21日
<p><code class="brush:python;toolbar:false" >from matplotlib.pylab import * from matplotlib.ticker import MultipleLocator import matplotlib.patches as ptch from math import fabs x0, y0, x1, y1, width = map(int, input().split(" ")) if x0 &gt; x1: x0, x1 = x1, x0 if y0 &gt; y1: y0, y1 = y1, y0 ax = subplot(111, aspect='equal') ax.plot([x0, x1], [y0, y1], '-k') ax.axis([0, width, 0, width]) majorLocator = MultipleLocator(1) minorLocator = MultipleLocator(0.5) ax.xaxis.set_major_locator(majorLocator) ax.yaxis.set_major_locator(majorLocator) ax.grid(True) dx = x1 - x0 dy = y1 - y0 x = x0 y = y0 if fabs(dx) &gt; fabs(dy): eps1 = fabs(dx) else: eps1 = fabs(dy) xInCre = dx / eps1 yInCre = dy / eps1 for k in range(0, int(eps1) + 1): x = round(x) y = round(y) ax.add_patch(ptch.Rectangle((x - 0.5, y - 0.5), 1, 1)) x += xInCre y += yInCre show()</code></p><p>C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\axes\_base.py:3152: UserWarning: Attempting to set identical left==right results</p><p>in singular transformations; automatically expanding.</p><p>left=0, right=0</p><p>'left=%s, right=%s') % (left, right))</p><p>C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\axes\_base.py:3471: UserWarning: Attempting to set identical bottom==top results</p><p>in singular transformations; automatically expanding.</p><p>bottom=0, top=0</p><p>'bottom=%s, top=%s') % (bottom, top))</p><p><img src="https://nos.netease.com/edu-image/02a58db08bf94e1f9a786309eeb37df9.JPG" /></p><p>照葫芦画瓢把4.1PPT的C代码改成Python的,然后出来的图为什么是这样子的?如果第31行的eps1不强转成int型的话图是白底的但是会提示类型错误?<br /></p><p>Traceback (most recent call last):</p><p><br /></p><p>File "", line 30, in</p><p>for k in range(0, eps1 + 1):</p><p><br /></p><p>TypeError: 'float' object cannot be interpreted as an integer</p><p><img src="https://nos.netease.com/edu-image/82ce61f46e8e4f9d94d01f1215ec68e5.JPG" /></p>
4 回复

    1楼

  • 澄碧钓徒 发表于2019年05月21日
    0 | 0 | 举报
    <p><img src="https://nos.netease.com/edu-image/e038a05c9d3f4bc0850434f8f4a8cddf.JPG" /></p><p>换了组数据为什么图又变成这样了,这些块蓝色填充是怎么回事?</p>
    澄碧钓徒 发表于2019年05月21日
    添加评论
  • 2楼

  • 万琳HUST 发表于2019年05月24日
    1 | 2 | 举报
    <span style="caret-color: rgb(0, 0, 0); -webkit-text-size-adjust: auto; background-color: rgba(255, 255, 255, 0);" >python我不是很清楚。</span> <div><span style="caret-color: rgb(0, 0, 0); -webkit-text-size-adjust: auto; background-color: rgba(255, 255, 255, 0);" >从代码看改后肯定是报错的,因为在那个range中是逐一增加的,必须为整数才可以。</span> </div> <div><span style="caret-color: rgb(0, 0, 0); -webkit-text-size-adjust: auto; background-color: rgba(255, 255, 255, 0);" >能指出原本的程序中设置背景色的语句吗?另外告诉我输入的起止点的坐标。</span> </div>
    万琳HUST 发表于2019年05月24日
    • 澄碧钓徒 2019年05月24日
      0 | 举报
      <p>当时第一次输入的参数是0 0 2 5 5于是Spyder上就出了一堆的警告信息还有上面那个不正常的图,后来把Spyder关掉重新打开就是最下面的图,像素点背景色的默认值应该是蓝色(第13行如果plot()方法颜色参数缺省就是蓝色线),eps1类型的问题现在看来是因为fabs函数返回的是浮点型,还发现个问题不应该判断y0 &gt; y1交换两值因为斜率可能是负数</p>
      澄碧钓徒 发表于2019年05月24日
      0 | 举报
    • 万琳HUST 2019年05月24日
      1 | 举报
      是的 不交换算法会简洁一点 不然要判断各种情况
      万琳HUST 发表于2019年05月24日
      1 | 举报
    添加评论
  • 3楼

  • 万琳HUST 发表于2019年05月24日
    1 | 0 | 举报
    看到你后面的了,你画了rectangle,因此是这样的,我这么理解
    万琳HUST 发表于2019年05月24日
    添加评论
  • 4楼

  • 万琳HUST 发表于2019年05月24日
    1 | 1 | 举报
    就是这个ax.add_patch(ptch.Rectangle((x - 0.5, y - 0.5), 1, 1)) <br /> <div> <br /> </div>
    万琳HUST 发表于2019年05月24日
    • 澄碧钓徒 2019年05月24日
      0 | 举报
      <p>看了老师的解答想明白了,查了下add_patch()方法是用来描像素点,把这句注释掉出来的就只有一条直线,原来的代码没判断最大位移方向所以轨迹就不对头</p>
      澄碧钓徒 发表于2019年05月24日
      0 | 举报
    添加评论