「雜談」圖形學複習資料

圖形學複習

名詞解釋

  1. C2連接:兩條相鄰曲線段在相交點處,有相同的一階導和二階導。
  2. C1連接:兩條相鄰曲線段在相交點處,有相同的一階導。
  3. 捕捉技術 :利用外部設備捕捉計算機能夠理解的數據。
  4. 消隱:在繪製圖形時,消除被遮擋的不可見的線或者面。
  5. 引力場技術:物體延伸到空間中對另一物體的產生的吸引效應的技術。
  6. 滅點:立體空間各邊延伸至同一相同點。
  7. 實體:同時具有幾何要素和視覺要素的對象。
  8. 型值點:位於最終得到的自由直線上的點。
  9. 控制點:沒有位於最終得到的自由直線上的點。
  10. 反走樣:減少或消除圖形因鋸齒而失真的技術。
  11. 法向量插值法:保留雙向性插值,並對頂點採用法向量插值,其中頂點的法向矢量由該點相鄰的多邊形面片的法向矢量值取平均值取得。
  12. 連通:同一像素在上、下、左、右四個方向上連通。
  13. 投影分爲平行投影和透視投影。平行投影:由一組平行光照射產生的圖形;透視投影:從某一投射中心,把物體投射到單一投影面。
  14. 簡單光照模型:由反射光決定的簡單模型 反射光=漫反射光+環境光+鏡面反射光
  15. 多邊形裁剪:將超出的定義裁剪面的多邊形的視圖窗口刪除,如果線,點在多邊形外部,則全部刪除;如果只有部分在內部,則部分刪除。
  16. 深度緩存算法:依次比較兩個像素的深度值,將最小深度值存入深度緩存數組,最小深度值對應的顏色值存入幀緩存數組。
  17. 分形:研究不規則幾何的圖形形狀,也稱爲大自然幾何學,通過各種變換算法來研究不規則圖形,具有零散,破碎的圖形。
  18. 正則形體:空間中點符合正則集的形體稱爲正則形體,正則集符合正則運算規則,結果包含內部點集和報批邊界。
  19. L算法:L-算法系統的本質是一個重寫系統,通過對植物對象生長過程的經驗式概括和抽象,初始狀態與描述規則,進行有限次迭代,生成字符發展序列以表現植物的拓撲結構,並對產生的字符串進行幾何解釋,就能生成非常複雜的分形圖形。
  20. 扭矢:曲面四個頂點的混合偏導數。
  21. 圖形和圖像:通常把參數法描述的圖形叫做圖形(Graphics)。把點陣法描述的圖形叫做圖象(Image)。
  22. 圖形的要素(圖素):幾何要素和非幾何要素。
  23. 光點:一般是指電子束打在顯示器的熒光屏上,顯示器能夠顯示的最小發光點。
  24. 象素:指圖形顯示在屏幕的時候,按當前的圖形顯示分辨率所能提供的最小元素點。
  25. 掃描轉換:象素信息從應用程序轉換並放入幀緩衝區的過程
  26. CRT:陰極射線管。
  27. DPU:分散處理單元。
  28. 存儲分辨率:指幀緩衝區的大小。
  29. 顯示分辨率:計算機顯示器所能夠提供的顯示模式分辨率,水平和垂直方向上像素點的乘積。
  30. 屏幕分辨率:通常用水平方向上的光點數與垂直方向上的光點數的乘積來表示。
  31. 顏色位面法:幀緩存被分成若干獨立的存儲區域,每一個區域稱爲一個位面),每個位面控制一種顏色或者灰度,每一個圖形象素點在每個位面中佔一位,通過幾個位面中的同一位組合成一個象素。
  32. 組合象素法:一個圖形象素點的全部信息被編碼成一個數據字節,按照一定方式存儲到幀緩存中,編碼字節的長度與點的屬性(如顏色、灰度等)有關。
  33. 圖形交互技術:是人和計算機進行圖形數據雙向通訊的技術。
  34. 用戶接口:用戶接口是人與計算機交互作用的界面,基本交互任務包括:定位、選擇、文字輸入、數值輸入。
  35. LCD:液晶顯示器件。

簡答題

  • 圖像和圖形的區別:圖形是無中生有,由計算機軟件繪製出來的,它是面向對象的,同時具有幾何屬性和視覺屬性。而圖像是由計算機外部設備捕捉得到的,並面向計算機內傳輸的信息。

  • 字符的兩種表示方式:點陣字符和矢量字符。

  • 實體的表示方法:邊界表示、分解表示、構造實體幾何表示、掃描表示和元球表示。

  • 光柵掃描:逐行掃描和隔行掃描。

  • 圖素:幾何元素和非幾何元素。

  • 圖形輸入控制方法:請求,取樣,事件,組合。

  • 客觀存在的三維形體具有這樣一些性質:(1)剛性(2)維數的一致性(3)佔據有限的空間(4)邊界的確定性(5)封閉性

  • 圖形與圖像的區別與關係:圖形是無中生有,是通過過計算機軟件繪製出來的點線面的集合,而圖像是外部設備捕捉計算機可以識別的數據。

  • 簡述圖形是如何從圖形數據呈現到屏幕上的原理、方法和過程。

    顯示緩衝區是與屏幕像素一一對應的二維矩陣,每一個存儲單元對應着屏幕上的像素,其位置可由二維座標來表示。當電子束掃描到屏幕上的像素時,顯示器中的顯示處理器會從緩衝區中取出像素值,找到顏色的地址,得到彩色表和基色分量。

  • 用戶接口:是人與計算機交互作用的界面。

  • 基本交互任務包括:定位、選擇、文字輸入、數值輸入。

    ①實現定位的交互技術有:一是把屏幕上的光標移到要確定的點,再按一下鍵,再就是用鍵盤鍵入那個點的座標。

    ②選擇適合可變集的選擇技術有指名和拾取,適合固定集的選擇技術有指名技術、功能鍵、菜單技術、模式識別。

    ③文字輸入。

    ④數值輸入a、由鍵盤輸入數值b、調節電位器的阻值產生相應的數值c、手寫數的識別或語音識別d、用上下翻轉數字的計數。


畫直線和圓

DDA算法

​ 先求dx=x1x0,dy=y1y0dx=x_1-x_0,dy=y_1-y_0 ;

​ 再求e=(dx>dy)?dx:dye = (|dx|>|dy|)?|dx|:|dy| ;

​ 令$ dx = e/dx,dy = e/dy$ ;

​ 後續點的產生:x=x+dx,y=y+dyx = x+dx,y = y+dy .

void DDALine(int x0,int y0,int x1,int y1){
  	double dx = x1-x0;
  	double dy = y1-y0;
    double e = fabs(dx)>fabs(dy)?fabs(dx):fabs(dy);
    dx /= e;
    dy /= e;
    double x = x0;
  	double y = y0;
    for(int i=0;i<e;i++){
        printf("x=%d,y=%d\n",(int)(x+0.5),(int)(y+0.5));
        x += dx;
        y += dy;
    }
}
中點畫線算法

​ 先求a=y0y1,b=x1x0a=y0-y_1,b=x_1-x_0 ;

​ 再求d=2a+bd = 2a+b ;

​ 令$ \Delta_{1} = 2a,\Delta_{2} = 2(a+b)$ ;

​ b後續點的產生:如果d>0d>0,x=x+1,y=yx=x+1,y=y,並且更新d=d+Δ1d=d+\Delta_{1},否則,x=x+1,y=yx=x+1,y=y,並且更新d=d+Δ2d=d+\Delta_{2} .

void MidpointLine(int x0,int y0,int x1,int y1){
  int x0=0,x1=5,y0=0,y1=2;
    int a,b,delta1,delta2,d,x,y;
    a = y0-y1;
    b = x1-x0;
    d = 2*a + b;
    delta1 = 2*a;
    delta2 = 2*(a+b);
    x = x0;
    y = y0;
    printf("x=%d,y=%d\n",x,y);
    while(x<x1){
      	x++;
        if(d<0){
            y++;
            d+=delta2;
        }else {
            d+=delta1;
        }
        printf("x=%d,y=%d\n",x,y);
    }
}
Bresenham直線算法

​ 先求dx,dy;

​ 再求p=2dydxp=2dy-dx ;

​ 後續的點:如果p>=0,y=y+1y=y+1,且讓p=p+2(dydx)p=p+2(dy-dx),否則,p=p+2dyp=p+2dy .

void BresenhamLine(int x0,int y0,int x1,int y1){
    int p,x,y,dx,dy;
    x=x0;
    y=y0;
    dx = x1-x0;
    dy = y1-y0;
    p = 2*dy-dx;
    while(x<=x1){
        printf("x=%d,y=%d\n",x,y);
        if(p>=0){
            y++;
            p+=2*(dy-dx);
        }else{
            p+=2*dy;
        }
        x++;
    }
}
中點畫圓法

​ 初始d=1.25Rd=1.25-R .

​ 每次判斷d<0d<0 ,取x=x+1,y=y1x=x+1,y=y-1d=d+2x+3d = d+2x+3 ;否則取x=x+1x=x+1 ,d=d+2(xy)+5d=d+2(x-y)+5 .

​ 如果是整數版本的,初值d=1Rd = 1-R

​ 遞增版本:初值Δx=3,Δy=2RR\Delta_{x} = 3,\Delta_{y}=2-R-Rd=d+Δx+Δyd=d+\Delta_{x}+\Delta_{y},Δx=Δx+2,Δy=Δy+2\Delta_{x}=\Delta_{x}+2,\Delta_{y}=\Delta_{y}+2

void MidpointCircle(int R){
    int x=0,y=R;
    double d=1.25-R;
    printf("x=%d,y=%d",x,y);
    while(x<y){
        if(d<0){
            d += 2*x+3;
        }else {
            d += 2*(x-y) + 5;
            y--;
        }
        x++;
    }
    printf("x=%d,y=%d",x,y)
}

/**
 * 遞增版本
 **/
void MidpointCircle(int R){
    int x=0,y=R,d=1-R;
    int deltax=3,deltay=2-R-R;
    printf("x=%d,y=%d",x,y);
    while(x<y){
        if(d<0){
            d += deltax;
            deltax+=2;
        }else {
            d += deltax+deltay;
            deltax+=2;
            deltay+=2;
        }
        y--;
        x++;
    }
    printf("x=%d,y=%d",x,y)
}
bresenham畫圓算法

判別式p1=32Rp1=3-2R ,如果pi<0p_i<0選H點,pi+1=pi+4x+6p_{i+1}=p_i +4x+6 .否則選D點,pi+1=pi+4(xiyi)+10p_{i+1}=p_i+4(x_i-y_i)+10

void bresenham(int R){
    int x,y,p;
    x=0;
    y=R;
    p=3-2*R;
    for(;x<=y;x++){
        if(p>=0){
            p+=4*(x-y)+10;
            y--;
        }else {
            p+=4*x+6;
        }
    }
}

圖形填充算法

多邊形的掃描轉換算法
void Polygonfill(Edge ET, COLORREF color){
    1.y=ET中登記項對應的y座標的最小值;
    2.AET初始化爲空表;
    3.while(ET表非空或AET表非空){
        3.1 將ET表登記項y對應的各“吊桶”合併到AET表中,將AET中各“吊桶”按x座標遞增排序;
        3.2 在掃描線y上,按照AET提供的x座標對,用color值實施填充;
        3.3 將AET中有y=y_max的各項清除出表;
        3.4 對AET中留下的各項,分別將x替換爲x+1/m,這是求出AET中各邊與下一條掃描線交點的x座標;
        3.5 由於前一步可能破壞了AET中各項x座標的遞增次序,故按x座標重新排序;
        3.6 y++,去處理下一條掃描線;
    }
}

ET表和AET表的數據結構是一個鏈表;

y_max x_min 斜率 指針

###圖形變換

二維圖形變換

二維齊次變換矩陣
{adgbehcfi} \begin{Bmatrix} a & d & g \\ b & e & h\\ c & f & i \end{Bmatrix}

  1. 平移變換

    T(TX,Ty)T(T_X,T_y)
    {100010TxTy1} \begin{Bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0\\ T_x & T_y & 1 \end{Bmatrix}

  2. 比例變換

    S(Sx,Sy)S(S_x,S_y)
    {Sx000Sy0001} \begin{Bmatrix} S_x & 0 & 0 \\ 0 & S_y & 0\\ 0 & 0 & 1 \end{Bmatrix}

  3. 旋轉變換

    R(θ)R(\theta)
    {cos(θ)sin(θ)0sin(θ)cos(θ)0001} \begin{Bmatrix} cos(\theta) & sin(\theta) & 0 \\ -sin(\theta) & cos(\theta) & 0\\ 0 & 0 & 1 \end{Bmatrix}

  4. 對稱變換

    繞x軸對稱變換

{100010001} \begin{Bmatrix} 1 & 0 & 0 \\ 0 & -1 & 0\\ 0 & 0 & 1 \end{Bmatrix}

 繞y軸對稱變換

{100010001} \begin{Bmatrix} -1 & 0 & 0 \\ 0 & 1 & 0\\ 0 & 0 & 1 \end{Bmatrix}

三維圖形變換

三維齊次變換矩陣
{a11a12a13a14a21a22a23a24a31a32a33a34a41a42a43a44} \begin{Bmatrix} a_{11} & a_{12} & a_{13} & a_{14} \\ a_{21} & a_{22} & a_{23} & a_{24} \\ a_{31} & a_{32} & a_{33} & a_{34} \\ a_{41} & a_{42} & a_{43} & a_{44} \\ \end{Bmatrix}

  1. 平移變換

    T(TX,Ty)T(T_X,T_y)
    {100001000010TxTyTz1} \begin{Bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 &0& 1 & 0 \\ T_x & T_y & T_z & 1 \\ \end{Bmatrix}

  2. 比例變換

    S(Sx,Sy)S(S_x,S_y)
    {Sx0000Sy0000Sz00001} \begin{Bmatrix} S_x & 0 & 0 & 0 \\ 0 & S_y & 0 & 0 \\ 0 &0& S_z & 0 \\ 0 & 0 & 0 & 1 \\ \end{Bmatrix}

  3. 旋轉變換

    Rz(θ)R_z(\theta)
    {cos(θ)sin(θ)00sin(θ)cos(θ)0000100001} \begin{Bmatrix} cos(\theta) & sin(\theta) & 0 & 0 \\ -sin(\theta) & cos(\theta) & 0 & 0 \\ 0 &0& 1 & 0 \\ 0 & 0 & 0 & 1 \\ \end{Bmatrix}

  4. 旋轉變換

    Rx(θ)R_x(\theta)
    {10000cos(θ)sin(θ)00sin(θ)cos(θ)00001} \begin{Bmatrix} 1 & 0 & 0 & 0 \\ 0 & cos(\theta) & sin(\theta) & 0 \\ 0 & -sin(\theta) & cos(\theta) & 0 \\ 0 & 0 & 0 & 1 \\ \end{Bmatrix}

  5. 旋轉變換

    Ry(θ)R_y(\theta)
    {cos(θ)0sin(θ)00100sin(θ)0cos(θ)00001} \begin{Bmatrix} cos(\theta) & 0 & -sin(\theta) & 0 \\ 0 & 1 & 0 & 0 \\ sin(\theta) & 0 & cos(\theta) & 0 \\ 0 & 0 & 0 & 1 \\ \end{Bmatrix}

綜合變換:
  1. 指定點比例變換

    平移給定點到原點

    是用縮放變換矩陣進行相對於原點的縮放

    平移給定點到原始位置。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章