📜  计算机图形学中对象的翻译

📅  最后修改于: 2021-05-04 11:55:25             🧑  作者: Mango

在计算机图形学中,我们已经看到了如何绘制一些基本图形,例如直线和圆。在这篇文章中,我们将讨论计算机图形学以及二维几何(变换)中重要操作的基础知识。
在计算机图形学中,坐标的转换包括三个主要过程:

  • 翻译
  • 回转
  • 缩放比例

在这篇文章中,我们将只讨论翻译

什么是翻译?

平移过程使每个点在指定方向上移动恒定的距离。可以将其描述为刚性运动。平移也可以解释为向每个点添加恒定向量,或解释为移动坐标系的原点。
假设,如果要通过量Dx和Dy将点(X,Y)平移到新位置(X’,Y’),则可以通过将Dx添加到X并将Dy添加到Y来获得新坐标,如下所示:

X' = Dx + X
Y' = Dy + Y

or P' = T + P where

P' = (X', Y'),
T = (Dx, Dy ),
P = (X, Y)

在此,P(X,Y)是原始点。 T(Dx,Dy)是平移因子,即点将平移的量。 P’(X’,Y’)是平移后点P的坐标。
例子:

Input : P[] = {5, 6}, T = {1, 1}
Output : P'[] = {6, 7}

Input : P[] = {8, 6}, T = {-1, -1}
Output : P'[] = {7, 5}

每当我们执行任何对象的转换时,我们只需转换其每个点。一些基本对象及其翻译可以绘制为:

  1. 点平移P(X,Y):在这里,我们仅根据给定的平移因子dx和dy平移给定点的x和y坐标。
    下面是C++程序翻译的要点:
    // C++ program for translation
    // of a single coordinate
    #include
    #include
      
    using namespace std;
      
    // function to translate point
    void translatePoint ( int P[], int T[])
    {
        /* init graph and putpixel are used for 
           representing coordinates through graphical 
           functions 
        */
        int gd = DETECT, gm, errorcode;
        initgraph (&gd, &gm, "c:\\tc\\bgi"); 
          
        cout<<"Original Coordinates :"<

    输出:

    Original Coordinates : 5, 8
    Translated Coordinates : 7, 9
    
  2. 直线平移:直线平移的想法是按照给定的平移因子(dx,dy)平移直线的两个端点,然后使用内置的图形函数绘制新的直线。
    以下是上述想法的C++实现:
    // cpp program for translation
    // of a single line
    #include
    #include
      
    using namespace std;
      
    // function to translate line
    void translateLine ( int P[][2], int T[])
    {
        /* init graph and line() are used for 
           representing line through graphical
           functions 
        */
        int gd = DETECT, gm, errorcode;
        initgraph (&gd, &gm, "c:\\tc\\bgi"); 
          
        // drawing original line using graphics functions
        setcolor (2);
        line(P[0][0], P[0][1], P[1][0], P[1][1]);
      
        // calculating translated coordinates
        P[0][0] = P[0][0] + T[0];
        P[0][1] = P[0][1] + T[1];
        P[1][0] = P[1][0] + T[0];
        P[1][1] = P[1][1] + T[1];
      
        // drawing translated line using graphics functions
        setcolor(3);
        line(P[0][0], P[0][1], P[1][0], P[1][1]);
        closegraph();
    }
      
    // driver program
    int main()
    {
        int P[2][2] = {5, 8, 12, 18}; // coordinates of point
        int T[] = {2, 1}; // translation factor
        translateLine (P, T);
        return 0;
    } 
    

    输出
    翻译1

  3. 矩形平移:这里我们分别根据给定的平移因子dx和dy平移给定点A(左上)和B(右下)的x和y坐标,然后绘制一个带有内置图形函数的矩形
    // C++ program for translation
    // of a rectangle
    #include
    #include
    using namespace std;
      
    // function to translate rectangle
    void translateRectangle ( int P[][2], int T[])
    {
        /* init graph and rectangle() are used for 
        representing rectangle through graphical functions */
        int gd = DETECT, gm, errorcode;
        initgraph (&gd, &gm, "c:\\tc\\bgi"); 
        setcolor (2);
        // rectangle (Xmin, Ymin, Xmax, Ymax)
        // original rectangle
        rectangle (P[0][0], P[0][1], P[1][0], P[1][1]);
      
        // calculating translated coordinates
        P[0][0] = P[0][0] + T[0];
        P[0][1] = P[0][1] + T[1];
        P[1][0] = P[1][0] + T[0];
        P[1][1] = P[1][1] + T[1];
      
        // translated rectangle (Xmin, Ymin, Xmax, Ymax)
        // setcolor(3);
        rectangle (P[0][0], P[0][1], P[1][0], P[1][1]);
        // closegraph();
    }
      
    // driver program
    int main()
    {
        // Xmin, Ymin, Xmax, Ymax as rectangle
        // coordinates of top left and bottom right points
        int P[2][2] = {5, 8, 12, 18};
        int T[] = {2, 1}; // translation factor
        translateRectangle (P, T);
        return 0;
    } 
    

    输出
    翻译2

参考资料:http://math.hws.edu/graphicsbook/。