在计算机图形学中,我们已经看到了如何绘制一些基本图形,例如直线和圆。在这篇文章中,我们将讨论计算机图形学以及二维几何(变换)中重要操作的基础知识。
在计算机图形学中,坐标的转换包括三个主要过程:
- 翻译
- 回转
- 缩放比例
在这篇文章中,我们将只讨论翻译。
什么是翻译?
平移过程使每个点在指定方向上移动恒定的距离。可以将其描述为刚性运动。平移也可以解释为向每个点添加恒定向量,或解释为移动坐标系的原点。
假设,如果要通过量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}
每当我们执行任何对象的转换时,我们只需转换其每个点。一些基本对象及其翻译可以绘制为:
- 点平移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
- 直线平移:直线平移的想法是按照给定的平移因子(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; } 输出:
- 矩形平移:这里我们分别根据给定的平移因子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; } 输出:
参考资料:http://math.hws.edu/graphicsbook/。