国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【計(jì)算機(jī)圖形學(xué)|直線生成算法】中點(diǎn)畫線法

這篇具有很好參考價(jià)值的文章主要介紹了【計(jì)算機(jī)圖形學(xué)|直線生成算法】中點(diǎn)畫線法。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

概述

中點(diǎn)畫線法(Midpoint Line Algorithm)是一種畫線(Line Drawing)算法,用來在計(jì)算機(jī)屏幕上繪制線條。

它的基本思想是從線段的起點(diǎn)和終點(diǎn)出發(fā),按照一定的規(guī)則向終點(diǎn)逐步逼近,并在途中以控制變量的方式得出每個(gè)像素點(diǎn)的坐標(biāo),從而繪制出所需的線條。

具體實(shí)現(xiàn)中,中點(diǎn)畫線法通過計(jì)算線段斜率的變化情況,來分為斜率小于1和大于等于1兩種情況,并采用Bresenham的對(duì)稱性原理,以中點(diǎn)的顏色來控制每個(gè)像素點(diǎn)的生長(zhǎng)方向,從而獲得較高的繪制效率和圖像質(zhì)量表現(xiàn)。

總的來說,中點(diǎn)畫線法是一種高效且易于實(shí)現(xiàn)的線段繪制算法,也是計(jì)算機(jī)圖形學(xué)領(lǐng)域最基本的算法之一。

一、基本思想

當(dāng)前像素點(diǎn)為 ( x p , y p ) (x_p,y_p) (xp?,yp?),下一個(gè)像素點(diǎn)為 P 1 P1 P1 P 2 P2 P2
設(shè) M = ( x p + 1 , y p + 0.5 ) M=(x_p+1,y_p+0.5) M=(xp?+1,yp?+0.5) P 1 P1 P1 P 2 P2 P2之中點(diǎn), Q Q Q為理想直線與 x = x p + 1 x=x_p+1 x=xp?+1垂線的交點(diǎn)。將 Q Q Q M M M y y y坐標(biāo)進(jìn)行比較。
當(dāng) M M M Q Q Q的下方,則 P 2 P2 P2應(yīng)為下一個(gè)像素點(diǎn);當(dāng) M M M Q Q Q的上方,則 P 1 P1 P1應(yīng)為下一個(gè)像素點(diǎn)。
中點(diǎn)畫線法,計(jì)算機(jī)圖形學(xué),算法

二、構(gòu)造判別式:

d = F ( M ) = F ( x p + 1 , y p + 0.5 ) = a ( x p + 1 ) + b ( y p + 0.5 ) + c d=F(M)=F(x_p+1,y_p+0.5)=a(x_p+1)+b(y_p+0.5)+c d=F(M)=F(xp?+1,yp?+0.5)=a(xp?+1)+b(yp?+0.5)+c
其中, a = y 0 ? y 1 , b = x 1 ? x 0 , c = x 0 y 1 ? x 1 y 0 a=y_0-y_1, b=x_1-x_0, c=x_0y_1-x_1y_0 a=y0??y1?,b=x1??x0?,c=x0?y1??x1?y0?.

  • 當(dāng) d < 0 d<0 d<0時(shí), M M M L ( Q L(Q L(Q點(diǎn) ) ) )下方,取右上方 P 2 ( x p + 1 , y p + 1 ) P2(x_p+1,y_p+1) P2(xp?+1,yp?+1)為下一個(gè)像素;
  • 當(dāng) d > 0 d>0 d>0時(shí), M M M L ( Q L(Q L(Q點(diǎn) ) ) )上方,取右方 P 1 ( x p + 1 , y p ) P1(x_p+1,y_p) P1(xp?+1,yp?)為下一個(gè)像素;
  • 當(dāng) d = 0 d=0 d=0時(shí),選 P 1 P1 P1 P 2 P2 P2均可,約定取 P 1 ( x p + 1 , y p ) P1(x_p+1,y_p) P1(xp?+1,yp?)為下一個(gè)像素;
  • 中點(diǎn)畫線法,計(jì)算機(jī)圖形學(xué),算法

三、遞推出增量

若當(dāng)前像素處于:

d ≥ 0 d\geq 0 d0情況,則取正右方像素 P 1 ( x p + 1 , y p ) P1(x_p+1, y_p) P1(xp?+1,yp?),要判下一個(gè)像素位置,應(yīng)計(jì)算
d 1 = F ( x p + 2 , y p + 0.5 ) = a ( x p + 2 ) + b ( y p + 0.5 ) = d + a d1=F(x_p+2, y_p+0.5)=a(x_p+2)+b(y_p+0.5)=d+a d1=F(xp?+2,yp?+0.5)=a(xp?+2)+b(yp?+0.5)=d+a
增量為 a a a。

d < 0 d<0 d<0時(shí),則取右上方像素 P 2 ( x p + 1 , y p + 1 ) P2(x_p+1, y_p+1) P2(xp?+1,yp?+1)。要判斷再下一像素,則要計(jì)算
d 2 = F ( x p + 2 , y p + 1.5 ) = a ( x p + 2 ) + b ( y p + 1.5 ) + c = d + a + b d2= F(x_p+2, y_p+1.5)=a(x_p+2)+b(y_p+1.5)+c=d+a+b d2=F(xp?+2,yp?+1.5)=a(xp?+2)+b(yp?+1.5)+c=d+a+b
增量為 a + b a+b a+b

優(yōu)化:

由于畫線從 ( x 0 , y 0 (x_0, y_0 (x0?,y0?)開始, d d d的初值為:
d 0 = F ( x 0 + 1 , y 0 + 0.5 ) = F ( x 0 , y 0 ) + a + 0.5 b = a + 0.5 b d_0=F(x_0+1, y_0+0.5)=F(x_0, y_0)+a+0.5b=a+0.5b d0?=F(x0?+1,y0?+0.5)=F(x0?,y0?)+a+0.5b=a+0.5b
可以用 2 d 2d 2d代替 d d d來避免小數(shù),提高效率。令 d 0 = 2 a + b , d 1 = 2 a , d 2 = 2 a + 2 b d_0=2a+b, d_1=2a, d_2=2a+2b d0?=2a+b,d1?=2a,d2?=2a+2b。

總結(jié):

如果 d > 0 d > 0 d>0,則中點(diǎn) ( x , y m ) (x_, y_m) (x,?ym?) L ( Q ) L(Q) L(Q)的上方,此時(shí)應(yīng)該取右邊的像素點(diǎn) P 1 ( x p + 1 , y p ) P1(x_p+1,y_p) P1(xp?+1,yp?),即 x x x加1、 y y y不變。此時(shí), d d d的值增加 d 1 d1 d1,即 d = d + d 1 d=d+d1 d=d+d1

如果 d < 0 d<0 d<0,則中點(diǎn) ( x m , y m ) (x_m, y_m) (xm?,ym?) L ( Q ) L(Q) L(Q)的下方,應(yīng)該取右上方的像素點(diǎn) P 2 ( x p + 1 , y p + 1 ) P2(x_p+1,y_p+1) P2(xp?+1,yp?+1),即 x x x y y y均加1。此時(shí), d d d的值增加 d 2 d2 d2,即 d = d + d 2 d=d+d2 d=d+d2。

四、例題分析

以P0(0,0)到P1(5,2)為例,使用中點(diǎn)畫線法,計(jì)算 d 0 d_0 d0? d 1 d_1 d1? d 2 d_2 d2?,并畫出對(duì)應(yīng)表格。

首先,根據(jù)兩點(diǎn)坐標(biāo)求出 a a a b b b、 c c c的值,有:
a = y 0 ? y 1 = ? 2 a=y_0-y_1=-2 a=y0??y1?=?2
b = x 1 ? x 0 = 5 b=x_1-x_0=5 b=x1??x0?=5
c = x 0 y 1 ? x 1 y 0 = ? 10 c=x_0y_1-x_1y_0=-10 c=x0?y1??x1?y0?=?10

接著,根據(jù)公式得到 d 0 d_0 d0?, d 1 d_1 d1? d 2 d_2 d2?的初值,有:
d 0 = 2 a + b = 1 d_0 = 2a+b = 1 d0?=2a+b=1
d 1 = 2 a = ? 4 d_1 = 2a = -4 d1?=2a=?4
d 2 = 2 a + 2 b = 6 d_2 = 2a+2b = 6 d2?=2a+2b=6

然后,根據(jù)中點(diǎn)畫線法的算法流程結(jié)合總結(jié),可以按照如下表格計(jì)算每個(gè)像素點(diǎn)的坐標(biāo) ( x i , y i ) (x_i,y_i) (xi?,yi?)以及 d i d_i di?的變化:

count x y d P
0 0 0 1 P0
1 1 0 -3
2 2 1 3
3 3 1 -1
4 4 2 5
5 5 2 1 P1

其中, P P P表示像素點(diǎn)位置, c o u n t count count表示計(jì)數(shù), d d d表示中點(diǎn)到直線距離的判別式值(經(jīng)過放大2倍),根據(jù) d > 0 d>0 d>0還是 d < 0 d < 0 d<0判斷所選的下一個(gè)像素點(diǎn)。對(duì)于 d = 0 d=0 d=0,約定選擇右下方的像素點(diǎn)。

最終,依照算法,連線的軌跡如下:

P0 (0, 0) -> (1, 1) -> (2, 1) -> (3, 2) -> (4, 2) -> P1 (5, 2)

如下圖:
中點(diǎn)畫線法,計(jì)算機(jī)圖形學(xué),算法文章來源地址http://www.zghlxwxcb.cn/news/detail-762918.html

五、偽代碼

/* mid PointLine */
void Midpoint Line (int x0,int y0,int x1, int y1,int color)
     {   int a, b, d1, d2, d, x, y;
    a=y0-y1, b=x1-x0, d=2*a+b;
    d1=2*a, d2=2* (a+b);
    x=x0, y=y0;
    drawpixel(x, y, color);
    while (x<x1)
    { if (d<0)       {x++, y++, d+=d2; }
     else       {x++, d+=d1;}
     drawpixel (x, y, color);
     }  /* while */
 } 

到了這里,關(guān)于【計(jì)算機(jī)圖形學(xué)|直線生成算法】中點(diǎn)畫線法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【計(jì)算機(jī)圖形學(xué)】圖形變換(以任意直線為對(duì)稱軸的對(duì)稱變換)

    【計(jì)算機(jī)圖形學(xué)】圖形變換(以任意直線為對(duì)稱軸的對(duì)稱變換)

    模塊3-2 圖形變換 一 實(shí)驗(yàn)?zāi)康?編寫圖形各種變換的算法 二 實(shí)驗(yàn)內(nèi)容 1 :任意直線的對(duì)稱變換。要求將變換矩陣寫在實(shí)驗(yàn)報(bào)告中,并與代碼匹配。求對(duì)任意直線Ax+By+C=0的對(duì)稱變換矩陣。 實(shí)驗(yàn)結(jié)果如下圖所示: 1:預(yù)設(shè)圖形初始化 2:鼠標(biāo)左鍵點(diǎn)擊直線起點(diǎn) 3:鼠標(biāo)右鍵點(diǎn)擊直線

    2024年02月01日
    瀏覽(55)
  • 計(jì)算機(jī)圖形學(xué)頭歌實(shí)訓(xùn)平臺(tái)答案——CG1-v2.0-直線繪制

    計(jì)算機(jī)圖形學(xué)頭歌實(shí)訓(xùn)平臺(tái)答案——CG1-v2.0-直線繪制

    1.本關(guān)任務(wù) (1)根據(jù)直線DDA算法補(bǔ)全line函數(shù),其中直線斜率0k1; (2)當(dāng)直線方程恰好經(jīng)過P(x,y)和T(x,y+1)的中點(diǎn)M時(shí),統(tǒng)一選取直線上方的T點(diǎn)為顯示的像素點(diǎn)。 2.輸入 (1)直線兩端點(diǎn)坐標(biāo):(13, 20)和(180,140); (2)直線顏色為白色。 3.輸出 程序運(yùn)行結(jié)果為一條直線,具體結(jié)果如下圖所示:

    2024年02月06日
    瀏覽(92)
  • 【計(jì)算機(jī)圖形學(xué)】二維圖形裁剪算法

    【計(jì)算機(jī)圖形學(xué)】二維圖形裁剪算法

    Cohen-Sutherland算法 Cohen-Sutherland是最早最流行的算法。 核心思想:通過 編碼測(cè)試 來減少計(jì)算交點(diǎn)的次數(shù)。(編碼算法) 1. 區(qū)域碼: 線段端點(diǎn)以區(qū)域賦值以四位二進(jìn)制碼。 編碼順序:四位從右到左分別為:左邊界、右邊界、下邊界、上邊界。 編碼值:落在相應(yīng)位置為1,否則

    2024年02月02日
    瀏覽(20)
  • 計(jì)算機(jī)圖形學(xué):二維圖形的幾何變換(算法原理及代碼實(shí)現(xiàn))

    計(jì)算機(jī)圖形學(xué):二維圖形的幾何變換(算法原理及代碼實(shí)現(xiàn))

    對(duì)于一個(gè)二維圖形作平移、旋轉(zhuǎn)、放縮變換,可以轉(zhuǎn)換為在二維坐標(biāo)系中圖形的所有點(diǎn)分別可以對(duì)應(yīng)到在x,y軸方向分別平移tx,ty(平移)、繞一點(diǎn)旋轉(zhuǎn)固定的角(旋轉(zhuǎn))、在x,y軸方向分別放縮sx,sy倍。 對(duì)于變換的原理,只需要將原圖形的點(diǎn)通過極坐標(biāo)或者相加、相乘,再

    2024年02月11日
    瀏覽(91)
  • 計(jì)算機(jī)圖形學(xué)03:改進(jìn)的中點(diǎn)BH算法

    計(jì)算機(jī)圖形學(xué)03:改進(jìn)的中點(diǎn)BH算法

    作者 :非妃是公主 專欄 :《計(jì)算機(jī)圖形學(xué)》 博客地址 :https://blog.csdn.net/myf_666 個(gè)性簽:順境不惰,逆境不餒,以心制境,萬(wàn)事可成?!鴩?guó)藩 專欄名稱 專欄地址 軟件工程 專欄——軟件工程 計(jì)算機(jī)圖形學(xué) 專欄——計(jì)算機(jī)圖形學(xué) 操作系統(tǒng) 專欄——操作系統(tǒng) 軟件測(cè)試 專

    2024年01月17日
    瀏覽(25)
  • 【W(wǎng)eiler-Atherton算法】 計(jì)算機(jī)圖形學(xué)多邊形裁剪算法

    【W(wǎng)eiler-Atherton算法】 計(jì)算機(jī)圖形學(xué)多邊形裁剪算法

    源代碼: https://github.com/ricar0/Weiler-Atherton-Alogrithm/tree/master 通常來說就是利用多邊形來裁剪多邊形的一種方法,一般情況下是利用矩形來裁剪凹凸多邊形 凸多邊形 凹多邊形 上面紅色劃線部分就是裁剪出的部分 OPENGL基礎(chǔ)語(yǔ)法 基本上就是一些畫線和畫多邊形的操作,難度較低

    2023年04月09日
    瀏覽(90)
  • 【計(jì)算機(jī)圖形學(xué)】【代碼復(fù)現(xiàn)】A-SDF中的數(shù)據(jù)集制作與數(shù)據(jù)生成

    【計(jì)算機(jī)圖形學(xué)】【代碼復(fù)現(xiàn)】A-SDF中的數(shù)據(jù)集制作與數(shù)據(jù)生成

    Follow A-SDF 的 Data Generation 部分: We follow (1) ANSCH to create URDF for shape2motion dataset (1-2) URDF2OBJ(本人認(rèn)為是1-2之間需要進(jìn)行的重要的過渡部分) (2) Manifold to create watertight meshes (3) and modified mesh_to_sdf for generating sampled points and sdf values. follow這個(gè)github: ANSCH 在 global_info.py 中,主要修改

    2024年02月08日
    瀏覽(17)
  • 計(jì)算機(jī)圖形學(xué):三次Bezier曲線的繪制(算法原理及代碼實(shí)現(xiàn))

    計(jì)算機(jī)圖形學(xué):三次Bezier曲線的繪制(算法原理及代碼實(shí)現(xiàn))

    一、實(shí)現(xiàn)方案 ? ? ? ?貝塞爾曲線原理:貝塞爾曲線是計(jì)算機(jī)圖形圖像造型的基本工具,是圖形造型運(yùn)用得最多的基本線條之一。它通過控制曲線上的四個(gè)點(diǎn)(起始點(diǎn)、終止點(diǎn)以及兩個(gè)相互分離的中間點(diǎn))來創(chuàng)造、編輯圖形。其中起重要作用的是位于曲線中央的控制線。這條

    2024年02月11日
    瀏覽(25)
  • 【計(jì)算機(jī)圖形學(xué) 】掃描線多邊形填充算法 | OpenGL+鼠標(biāo)交互

    【計(jì)算機(jī)圖形學(xué) 】掃描線多邊形填充算法 | OpenGL+鼠標(biāo)交互

    傳送門 實(shí)現(xiàn)多邊形掃描線填充算法,并和鼠標(biāo)進(jìn)行交互。 具體原理略過,會(huì)貼上完整代碼,可直接運(yùn)行。 環(huán)境: vs2019,OpenGL的庫(kù)(可以搜索如何用vs使用OpenGL的庫(kù),可以使用vs自帶的插件或者其他方法,很方便) 要點(diǎn): 1.NET和AET的創(chuàng)建,改動(dòng) 2.改變鼠標(biāo)點(diǎn)擊和鼠標(biāo)拖拽的響應(yīng)

    2023年04月08日
    瀏覽(100)
  • 【計(jì)算機(jī)圖形學(xué)】裁剪算法(Cohen-Sutherland算法 & 中值分割算法 & Liang-Barsky算法)

    【計(jì)算機(jī)圖形學(xué)】裁剪算法(Cohen-Sutherland算法 & 中值分割算法 & Liang-Barsky算法)

    一 實(shí)驗(yàn)?zāi)康?編寫直線段、多邊形裁剪算法 熟悉Cohen-Sutherland算法、中值分割算法和Liang-Barsky算法的裁剪 二 實(shí)驗(yàn)算法理論分析 Cohen-Sutherland 算法: ? ? 中值分割算法: 與CS算法一樣,首先對(duì)直線段端點(diǎn)進(jìn)行編碼,并把線段與窗口的關(guān)系一樣分為3種情況:全在、完全不在、線

    2024年02月03日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包