• <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>
            隨筆 - 87  文章 - 279  trackbacks - 0
            <2007年2月>
            28293031123
            45678910
            11121314151617
            18192021222324
            25262728123
            45678910

            潛心看書研究!

            常用鏈接

            留言簿(19)

            隨筆分類(81)

            文章分類(89)

            相冊

            ACM OJ

            My friends

            搜索

            •  

            積分與排名

            • 積分 - 217761
            • 排名 - 117

            最新評論

            閱讀排行榜

            評論排行榜

            昨晚去圖書館看了《計算機圖形學(xué)——OpenGL實現(xiàn)》關(guān)于Bresenham算法的另一種推導(dǎo)方式。
            Bresenham最精妙之處在于通過方程變換,然后得到迭代方程,從而消除了浮點運算。

            下面簡單寫寫自己對中點法推導(dǎo)的理解:

            記:W = bx - ax, H = by - ay
                     所以 (ax, ay)和(bx, by)的理想直線為:
                     -W*(y-ay) + H*(x-ax) = 0

            記:函數(shù) f(x, y) = -2*W*(y-ay) + 2*H*(x-ax);
                     f(x,y)有如下性質(zhì):
                     f(x, y) < 0, 那么(x, y)在直線上方
                     f(x, y) > 0, 那么(x, y)在直線下方

            現(xiàn)考慮 點L(Px+1, Py), 點U(Px+1, Py+1), 則LU中點M(Px+1, Py+1/2) 有:
                     如果f(Mx, My) < 0, 則M在理想直線上方, 所以選擇L
                     如果f(Mx, My) > 0, 則M在理想直線下方, 所以選擇U
            則:
                     f(Mx,My) = -2*w*(Py+1/2-ay) + 2*H*(Px+1-ax)
            當 x從Px+1移動到Px+2時, 考慮f變化M'和M'':
                     M':在前一步?jīng)]有增加y, M' = (Px+2, Py+1/2)
                     M'':在前一步增加了y, M' = (Px+2, Py+3/2)
            對于 M':
                     f(M'x, M'y) = -2*w*(Py+1/2-ay) + 2*H*(Px+2-ax) = f(Mx, My) + 2 * H
            對于 M'':
                     f(M''x, M''y) = -2*w*(Py+3/2-ay) + 2*H*(Px+2-ax) = f(Mx, My) - 2 * (W-H)
            所以
                     對于下一個“測試量”都有一個常數(shù)增量:前一次沒有增加y,增量為2*H,如果增加了y,則增量為-2*(W-H)

            對于初始條件:x = ax, y = ay
                     M = (ax+1, ay+1/2);
                     f(Mx, My) = -2*W*(ay+1/2-ay) + 2*H(ax+1-ax) = 2*H-W

            Code:
            #include <stdlib.h>
            #include 
            <math.h>
            #include 
            <GL/glut.h>

            void myInit() {
                glClearColor(
            1.01.01.00.0);
                glColor3f(
            0.00.00.0);
                
            //glPointSize(2.0);
                glMatrixMode(GL_PROJECTION);
                glLoadIdentity();
                gluOrtho2D(
            0.0640.00.0480.0);
            }


            void setPixel(int x, int y) {
                glBegin(GL_POINTS);
                glVertex2i(x, y);
                glEnd();

            }


            void lineBres(int xs, int ys, int xe, int ye) {
                
            int W = xe - xs, H = ye - ys, f = 2 * H - W, tH = 2 * H, tHW = 2 * (H - W);
                
            int x, y;
                
            if (xs > xe) {
                    x 
            = xe;
                    y 
            = ye;
                    xe 
            = xs;
                }
             else {
                    x 
            = xs;
                    y 
            = ys;            
                }

                
            while (x <= xe) {
                    setPixel(x, y);
                    x
            ++;
                    
            if (f<0{
                        f 
            += tH;
                    }
             else {
                        y
            ++;
                        f 
            += tHW;
                    }

                }

            }


            void myDisplay() {
                glClear(GL_COLOR_BUFFER_BIT);
                lineBres(
            2010300180);
                glFlush();
            }


            int main(int argc, char **argv) {
                glutInit(
            &argc, argv);
                glutInitDisplayMode(GLUT_SINGLE
            |GLUT_RGB);
                glutInitWindowSize(
            640480);
                glutInitWindowPosition (
            100150);
                glutCreateWindow(
            "Bresenham畫線");
                glutDisplayFunc(myDisplay);
                myInit();
                glutMainLoop();
                
            return 0;
            }

                     
            posted on 2007-10-11 11:57 閱讀(1144) 評論(0)  編輯 收藏 引用 所屬分類: 計算機圖形學(xué)
            国产精品福利一区二区久久| 日本欧美国产精品第一页久久| 久久精品日日躁夜夜躁欧美| 亚洲中文字幕无码久久2020| 亚洲va中文字幕无码久久| 国内精品伊人久久久影院| 无码精品久久久久久人妻中字| 久久香蕉一级毛片| 精品国产乱码久久久久久人妻 | 久久久久这里只有精品 | AV无码久久久久不卡蜜桃| 精品熟女少妇av免费久久| 亚洲午夜无码AV毛片久久| 久久99久久99精品免视看动漫| 青青热久久国产久精品 | 26uuu久久五月天| 亚洲中文字幕无码久久2017| 久久精品国产精品亚洲| 国产午夜福利精品久久2021| 一极黄色视频久久网站| 久久夜色精品国产亚洲| 亚洲中文久久精品无码ww16| 久久无码一区二区三区少妇 | 性做久久久久久久| 亚洲人成网站999久久久综合| 99久久夜色精品国产网站| 久久人妻少妇嫩草AV无码专区| 久久精品国产一区二区三区不卡| 国产99久久久国产精免费| 噜噜噜色噜噜噜久久| 国产精品永久久久久久久久久| 亚洲国产精品久久久天堂| 四虎影视久久久免费| 色综合久久精品中文字幕首页| 国产产无码乱码精品久久鸭| 久久午夜无码鲁丝片秋霞| 久久天天躁狠狠躁夜夜2020老熟妇| 国产Av激情久久无码天堂| 日日躁夜夜躁狠狠久久AV| 久久精品国产亚洲AV蜜臀色欲| 日韩精品无码久久一区二区三|