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

天秤座的唐風(fēng)

總會有一個人需要你的分享~!- 唐風(fēng) -

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

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


    這實在是不像橢圓了,呵呵。雖然說在網(wǎng)上看到有說 Bresenham 算法有一定的失真?但也不至于成這樣啊。于是反復(fù)地 check 偽代碼與我寫的 C++ 代碼,感覺算法上我的“翻譯”應(yīng)該是沒有問題的。不會是這偽碼有問題?所以是翻回前面反復(fù)地閱讀和理解這個算法的原理,對照原理的公式和偽代碼的表達(dá),也沒有問題啊,難道公式有問題?只是硬著頭皮自己再推導(dǎo)一遍。還是沒發(fā)現(xiàn)問題所在。頭大了,一直折騰到 2 點多,實在是沒找出問題在哪,想想第二天還得上班,沒辦法只好放下。心想第二天在代碼中加入一些輸出,把計算結(jié)果都輸出來進(jìn)行 check。
    第二天中午休息的時候,在網(wǎng)上看到一個代碼的實現(xiàn),拷下來運行,雖然那份代碼也有問題,但至少有一半的橢圓弧看起來是相當(dāng)正常的。另一半沒畫正確,也是因為斜率為 -1 的判斷有問題。再對照看了看我的代碼,赫然發(fā)現(xiàn),算法中用于存儲決定下一點的選擇策略的變量 d,在網(wǎng)上的代碼用的是 int 型,而我自己則用的自定義的 INT16。難道是 INT16 太小導(dǎo)致的?于是我改成 INT32,一運行,正常了,雖然有些走樣,但橢圓還是比較漂亮的。原來問題出在這里。INT16 的范圍太小,而計算結(jié)果是 32 位的,截取成 16 位正負(fù)號就亂套了,唉,教訓(xùn)啊。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 唐風(fēng) 閱讀(786) 評論(1)  編輯 收藏 引用 所屬分類: 語言技術(shù)

評論

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

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美一区二区日韩一区二区| 免费观看在线综合色| 国模私拍一区二区三区| 久久精品日产第一区二区三区| 午夜在线a亚洲v天堂网2018| 国产精品有限公司| 久久久久久网| 美女日韩在线中文字幕| 亚洲精品自在久久| 在线视频一区观看| 国产亚洲综合精品| 欧美福利视频在线| 欧美日韩视频在线一区二区| 香港久久久电影| 久久精品中文字幕一区| 亚洲人成网站在线观看播放| 亚洲精品综合精品自拍| 国产精品最新自拍| 欧美成人一区二免费视频软件| 欧美精品一区二| 午夜视频在线观看一区| 久久精品视频亚洲| 99re这里只有精品6| 亚洲午夜久久久久久久久电影网| 国产综合在线看| 亚洲激情一区二区| 欧美午夜精品久久久久久久| 久久精品在线播放| 欧美激情偷拍| 久久精品成人一区二区三区| 欧美成人免费在线| 欧美一区不卡| 欧美大片一区二区三区| 欧美一区二区精美| 欧美91福利在线观看| 性欧美暴力猛交69hd| 久久精品亚洲精品| 一本色道88久久加勒比精品 | 国产精品二区三区四区| 久久久av水蜜桃| 欧美美女bb生活片| 久久久99精品免费观看不卡| 欧美激情亚洲国产| 久久久久久婷| 欧美日韩一区二区三区四区在线观看 | 欧美国产一区视频在线观看| 欧美一区午夜视频在线观看| 欧美不卡在线| 欧美在线91| 欧美精品一区在线观看| 久久亚洲综合色一区二区三区| 欧美日韩一区二区三| 欧美电影专区| 国产欧美日韩精品专区| 亚洲精品欧美在线| 在线看一区二区| 亚洲欧美www| 一本一本a久久| 久久久久国产一区二区| 亚洲欧美日韩综合一区| 欧美激情亚洲精品| 久久久噜噜噜| 国产精品视频免费一区| 亚洲激情图片小说视频| 精久久久久久| 亚洲欧美韩国| 亚洲午夜精品久久久久久app| 久久综合狠狠| 久久乐国产精品| 国产精品黄色| 亚洲国产欧美一区二区三区同亚洲 | 国产精品视频不卡| 亚洲精品极品| 伊人伊人伊人久久| 亚洲一区二区精品在线| 99亚洲视频| 久久夜色精品一区| 久久免费视频在线| 国产日韩精品久久| 中日韩美女免费视频网址在线观看 | 久久亚洲春色中文字幕| 久久精品一区二区三区不卡牛牛 | 欧美成人午夜激情视频| 麻豆国产精品777777在线| 国产精品免费观看在线| 洋洋av久久久久久久一区| 亚洲欧洲日夜超级视频| 久久综合伊人| 免费亚洲一区| 狠狠色伊人亚洲综合网站色| 亚洲欧美日本精品| 午夜精品久久久久久久| 国产精品成av人在线视午夜片| 亚洲电影在线看| 亚洲激情网站| 久久亚洲色图| 麻豆精品国产91久久久久久| 国产在线国偷精品产拍免费yy| 亚洲欧美日韩天堂| 欧美一区观看| 国产欧美日韩高清| 午夜精品福利在线| 久久国产一区二区三区| 国产精品婷婷| 亚洲免费一在线| 欧美一区=区| 国产日韩欧美在线| 欧美一区二区三区视频在线观看| 欧美在线一区二区三区| 国产日韩成人精品| 久久成人精品| 久久久久久有精品国产| 国产无遮挡一区二区三区毛片日本| 西西裸体人体做爰大胆久久久| 久久精品观看| 激情欧美一区| 免费观看日韩av| 亚洲精品国产无天堂网2021| 一区二区三区免费看| 欧美系列亚洲系列| 亚洲一区二区三区777| 午夜日韩在线观看| 国产有码一区二区| 久久久久久穴| 亚洲第一网站| 亚洲色无码播放| 国产精品亚洲综合久久| 欧美在线免费看| 嫩草国产精品入口| 亚洲美女中出| 欧美午夜视频网站| 午夜精品理论片| 女女同性精品视频| 亚洲美女精品久久| 国产精品爱久久久久久久| 午夜精品福利在线| 欧美1区2区视频| 一区二区激情视频| 国产精品乱人伦一区二区 | 欧美国产欧美综合 | 一区二区三区在线免费播放| 久久夜色精品国产噜噜av| 亚洲日本欧美天堂| 欧美一级在线播放| 国产综合香蕉五月婷在线| 欧美成年人网站| 一区二区三区精品视频| 久久久99爱| 日韩写真在线| 国产欧美精品在线观看| 玖玖在线精品| 一区二区三区福利| 久久这里有精品15一区二区三区| 最新中文字幕一区二区三区| 国产精品a级| 久久国产免费看| 日韩网站在线观看| 久久久噜噜噜| 在线综合视频| 国内伊人久久久久久网站视频| 欧美激情一区二区三区成人 | 欧美有码在线视频| 亚洲电影免费| 欧美一区二区三区四区高清| 亚洲黄网站在线观看| 国产精品久久久久久久久| 久久久久se| 一区二区三区视频在线看| 久久人人爽人人爽爽久久| 一区二区三区不卡视频在线观看 | 你懂的亚洲视频| 亚洲综合精品一区二区| 亚洲第一区色| 久久成人18免费网站| 亚洲理论在线| 国产伦精品一区二区三区在线观看| 狼人社综合社区| 午夜精品久久久久久久99水蜜桃| 欧美激情日韩| 久久久精品动漫| 亚洲午夜在线观看| 极品少妇一区二区三区精品视频| 欧美日韩在线一区二区三区| 久久久久久久综合色一本| 亚洲夜晚福利在线观看| 欧美激情亚洲精品| 久久久久久久久综合| 亚洲无吗在线| 亚洲人成精品久久久久| 国产亚洲精品久久久| 欧美日韩在线播放一区| 免费久久精品视频| 久久国产精品99国产| 一区二区三区不卡视频在线观看| 欧美福利一区二区三区| 久久精品亚洲一区| 亚洲免费在线电影| 日韩一区二区精品葵司在线| 在线观看欧美视频| 国产一区二区三区视频在线观看|