青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

天秤座的唐風

總會有一個人需要你的分享~!- 唐風 -

  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
  13 隨筆 :: 0 文章 :: 69 評論 :: 0 Trackbacks

昨天晚上動手寫了橢圓的光柵化實現,照著計算機圖形學書上的偽代碼編寫了 C++ 的代碼,結果運行結果完全出乎我的意料之外。
畫出來的橢圓居然像這個樣子:


    這實在是不像橢圓了,呵呵。雖然說在網上看到有說 Bresenham 算法有一定的失真?但也不至于成這樣啊。于是反復地 check 偽代碼與我寫的 C++ 代碼,感覺算法上我的“翻譯”應該是沒有問題的。不會是這偽碼有問題?所以是翻回前面反復地閱讀和理解這個算法的原理,對照原理的公式和偽代碼的表達,也沒有問題啊,難道公式有問題?只是硬著頭皮自己再推導一遍。還是沒發現問題所在。頭大了,一直折騰到 2 點多,實在是沒找出問題在哪,想想第二天還得上班,沒辦法只好放下。心想第二天在代碼中加入一些輸出,把計算結果都輸出來進行 check。
    第二天中午休息的時候,在網上看到一個代碼的實現,拷下來運行,雖然那份代碼也有問題,但至少有一半的橢圓弧看起來是相當正常的。另一半沒畫正確,也是因為斜率為 -1 的判斷有問題。再對照看了看我的代碼,赫然發現,算法中用于存儲決定下一點的選擇策略的變量 d,在網上的代碼用的是 int 型,而我自己則用的自定義的 INT16。難道是 INT16 太小導致的?于是我改成 INT32,一運行,正常了,雖然有些走樣,但橢圓還是比較漂亮的。原來問題出在這里。INT16 的范圍太小,而計算結果是 32 位的,截取成 16 位正負號就亂套了,唉,教訓啊。OK 后的效果圖如下:


    記下來,給自己提個醒!

    附上橢圓的生成代碼,Bresenham算法:

 

void Draw2DLine::DrawEllipse(Point const& a_Center, UINT16 a_a, UINT16 a_b)
{
    UINT16 x 
= 0, y = a_b; 
    UINT32 
const taa = a_a*a_a;
    UINT32 
const tbb = a_b*a_b;

    INT32 minYofDeltaX 
= static_cast<INT32>(tbb/sqrt(static_cast<double>(tbb + taa)));

    INT32 p 
= tbb - taa*a_b;  // 就是這個變量!

    
while( minYofDeltaX <= y)
    

        DrawPoint(a_Center.x
+x, a_Center.y+y);
        DrawPoint(a_Center.x
+x, a_Center.y-y);
        DrawPoint(a_Center.x
-x, a_Center.y+y);
        DrawPoint(a_Center.x
-x, a_Center.y-y); 
        
if( p <= 0)
        

            
++x ;
        }
 
        
else
        

            
++x; 
            
--y;
        }
        
        p 
= tbb*(x+1)*(x+1+ taa*(y*- y) - taa*tbb;
    }
 

    p 
= tbb*(x*+ x) + taa*(y*- y) - taa*tbb;
    
while(y > 0)
    

        DrawPoint(a_Center.x
+x, a_Center.y+y);
        DrawPoint(a_Center.x
+x, a_Center.y-y);
        DrawPoint(a_Center.x
-x, a_Center.y+y);
        DrawPoint(a_Center.x
-x, a_Center.y-y); 
        
if(p >= 0)
        

            
--y; 
            p 
= p - 2*taa*- taa; 
        }
 
        
else
        

            
--y; 
            
++x; 
            p 
= p - 2*taa*- taa + 2*tbb*+ 2*tbb; 
        }
 
    }
 
    DrawPoint(a_Center.x
+x, a_Center.y);
    DrawPoint(a_Center.x
-x, a_Center.y);
}
posted on 2009-06-25 21:22 唐風 閱讀(784) 評論(1)  編輯 收藏 引用 所屬分類: 語言技術

評論

# re: 數據類型錯誤導致的 bug 與 Bresenham 橢圓生成算法代碼 2009-06-25 22:31 唐風
PS:
  附上的代碼中,第一個 while 中(切線斜率大于 -1 )的判別子 p 是直接用橢圓方程來計算的,第二個 while 中(切線斜率小于 -1 )中使用的是增量計算。
  原來第一個 while 中也是使用增量法來計算的,但在斜率為 -1 的附近,橢圓的變形比較嚴重,感覺像是一段很明顯的 -1 斜率的直線。可能是計算式的精度有問題?但沒有細查。先改成上面的方式,用著先,以后再回來優化。
Mark 下。  回復  更多評論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲精品国产精品国产自| 午夜精品在线看| 亚洲美女福利视频网站| 一区二区在线免费观看| 一区二区三区在线免费播放| 黑人巨大精品欧美黑白配亚洲| 国产欧美日韩在线视频| 狠狠v欧美v日韩v亚洲ⅴ| 亚洲第一网站| 夜夜夜精品看看| 亚洲综合电影一区二区三区| 欧美影院视频| 欧美成ee人免费视频| 亚洲日韩中文字幕在线播放| 一区二区欧美精品| 久久成人资源| 欧美精品一区三区在线观看| 国产精品亚洲片夜色在线| 国内精品久久久久久 | 黄色成人av| 亚洲区欧美区| 欧美一区二粉嫩精品国产一线天| 蜜臀久久99精品久久久久久9| 亚洲精品视频一区二区三区| 久久成年人视频| 国产精品v亚洲精品v日韩精品| 在线观看亚洲精品| 亚洲欧美另类中文字幕| 蜜臀av一级做a爰片久久 | 久久综合伊人77777蜜臀| 欧美日韩综合一区| 亚洲电影免费在线| 久久福利影视| 亚洲图色在线| 欧美日本韩国| 最新日韩在线| 久久精品视频免费观看| 亚洲黄页视频免费观看| 亚洲免费在线电影| 欧美女同在线视频| 伊人久久久大香线蕉综合直播 | 蘑菇福利视频一区播放| 亚洲主播在线观看| 欧美日韩亚洲一区二区| 亚洲国产欧美在线人成| 久久久精品视频成人| 亚洲一区免费网站| 香蕉成人久久| 麻豆视频一区二区| 亚洲福利国产精品| 欧美日本一区| 欧美日韩一区二区视频在线观看 | 午夜在线不卡| 老司机精品导航| 欧美激情精品久久久久久黑人| 欧美综合国产| 亚洲免费成人av电影| 老色批av在线精品| 国产精品永久免费视频| 亚洲一区二区三区视频播放| 亚洲制服欧美中文字幕中文字幕| 亚洲第一在线综合网站| 亚洲精品在线免费观看视频| 老鸭窝91久久精品色噜噜导演| 国产精品日韩| 欧美一区二区三区在线观看视频| 亚洲国产日韩在线| 免费观看日韩av| 亚洲精品免费一二三区| 欧美成人蜜桃| 另类av导航| 99在线精品观看| 日韩视频免费大全中文字幕| 欧美日韩精品在线| 午夜在线a亚洲v天堂网2018| 一区二区成人精品| 国产精品成人在线| 亚洲欧美美女| 亚洲福利视频在线| 欧美精品一区在线| 久久av一区二区三区漫画| 国产欧美日韩激情| 久久久999国产| 久久久五月天| 亚洲精品资源| 亚洲图片在线| 国产视频一区欧美| 欧美激情按摩| 欧美日韩视频在线一区二区观看视频| 亚洲深夜福利| 欧美影院午夜播放| 亚洲全黄一级网站| 一区二区三区国产精华| 国产午夜精品久久久久久免费视| 免费在线观看日韩欧美| 亚洲国产精品一区二区www| 蜜臀av一级做a爰片久久| 久久婷婷一区| 一区二区久久| 亚洲欧美一区二区视频| 在线观看欧美日韩国产| 亚洲精品三级| 国产乱码精品一区二区三区忘忧草| 久久亚洲综合色一区二区三区| 欧美成人性生活| 欧美一级片一区| 蜜臀av性久久久久蜜臀aⅴ| 一区二区三区精品久久久| 亚洲一区自拍| 亚洲国产成人精品久久久国产成人一区| 亚洲国产清纯| 国产精品视频一区二区高潮| 免费观看一级特黄欧美大片| 欧美日韩蜜桃| 毛片精品免费在线观看| 国产精品日韩精品| 欧美国产亚洲另类动漫| 国产精品中文字幕在线观看| 欧美成人激情视频| 国产精品日韩久久久| 亚洲黄色影院| 国内成人精品2018免费看| 亚洲乱亚洲高清| 在线观看日韩www视频免费| 亚洲色图在线视频| 亚洲精品久久久一区二区三区| 欧美在线视频一区二区| 亚洲一级二级| 免费成人av资源网| 久久精品主播| 国产精品日韩欧美大师| 亚洲国产成人久久综合| 韩国自拍一区| 欧美一级大片在线免费观看| 亚洲图片欧洲图片av| 久久免费视频网站| 国产精品网曝门| 亚洲精选成人| 亚洲国产精品一区制服丝袜 | 欧美在线高清视频| 亚洲欧美日韩一区在线| 欧美日韩精品综合| 亚洲免费观看高清在线观看| 亚洲精品视频免费| 免费精品视频| 欧美激情一区二区三区全黄 | 亚洲国内精品| 亚洲精品一区二| 欧美成人官网二区| 亚洲第一二三四五区| 在线日韩中文字幕| 久久综合久久美利坚合众国| 欧美激情一二三区| 国产精品成人在线观看| 亚洲一区二区不卡免费| 亚洲欧美日韩一区| 国产精品久久二区二区| 亚洲精品综合久久中文字幕| 一区二区欧美日韩视频| 欧美日韩国产成人| 日韩视频在线一区二区三区| 夜夜嗨av色一区二区不卡| 欧美日韩国产页| 一区二区三区国产| 久久免费少妇高潮久久精品99| 亚洲第一综合天堂另类专| 日韩视频免费在线| 欧美日韩一区二区免费视频| 夜夜嗨av一区二区三区免费区| 亚洲女爱视频在线| 国产亚洲一区在线| 蜜乳av另类精品一区二区| 亚洲狼人精品一区二区三区| 亚洲一区二区三区乱码aⅴ| 国产日韩在线亚洲字幕中文| 久久视频这里只有精品| 亚洲欧洲中文日韩久久av乱码| 亚洲视频一区| 国外成人网址| 欧美—级a级欧美特级ar全黄| 一区二区三区精品国产| 久久婷婷久久一区二区三区| 在线视频成人| 国产精品日日做人人爱| 久久影院午夜片一区| 在线亚洲国产精品网站| 久久亚洲综合色| 亚洲无亚洲人成网站77777| 国产婷婷色一区二区三区在线 | 国产精品你懂的在线欣赏| 午夜伦理片一区| 欧美激情2020午夜免费观看| 欧美亚洲在线| 亚洲久久一区| 国产一区二区你懂的| 欧美新色视频| 奶水喷射视频一区| 亚洲欧美一区二区精品久久久| 欧美α欧美αv大片| 性色av一区二区怡红|