对称变换包括以x轴对称,y轴对称和原点o对称三种。(1)将原点平移到(300,200)处。绘制一个三角形,要求在第一象限画出三角形,然后分别求出三个对称图形。利用openGL写代码
时间: 2024-02-09 08:13:10 浏览: 200
好的,以下是利用OpenGL实现对称变换的代码。
```c++
#include <GL/glut.h>
void drawTriangle() {
glBegin(GL_TRIANGLES);
glVertex2f(100, 100);
glVertex2f(150, 150);
glVertex2f(200, 100);
glEnd();
}
void drawTranslatedTriangle() {
glBegin(GL_TRIANGLES);
glVertex2f(400, 300);
glVertex2f(450, 350);
glVertex2f(500, 300);
glEnd();
}
void drawXSymmetricTriangle() {
glBegin(GL_TRIANGLES);
glVertex2f(400, -300);
glVertex2f(450, -350);
glVertex2f(500, -300);
glEnd();
}
void drawYSymmetricTriangle() {
glBegin(GL_TRIANGLES);
glVertex2f(-400, -300);
glVertex2f(-450, -350);
glVertex2f(-500, -300);
glEnd();
}
void drawOSymmetricTriangle() {
glBegin(GL_TRIANGLES);
glVertex2f(-400, 300);
glVertex2f(-450, 350);
glVertex2f(-500, 300);
glEnd();
}
void display() {
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 1.0, 1.0);
// draw original triangle in first quadrant
drawTriangle();
// draw translated triangle
glPushMatrix();
glTranslatef(300, 200, 0);
drawTranslatedTriangle();
glPopMatrix();
// draw x-symmetric triangle
glPushMatrix();
glScalef(1, -1, 1);
drawTriangle();
glPopMatrix();
// draw y-symmetric triangle
glPushMatrix();
glScalef(-1, 1, 1);
drawTriangle();
glPopMatrix();
// draw o-symmetric triangle
glPushMatrix();
glScalef(-1, -1, 1);
drawTriangle();
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(800, 600);
glutCreateWindow("Symmetric Transformations");
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-800, 800, -600, 600, -1, 1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
```
解释一下代码:
- `drawTriangle()` 函数用于绘制原始三角形。
- `drawTranslatedTriangle()` 函数用于绘制平移后的三角形。
- `drawXSymmetricTriangle()` 函数用于绘制以x轴对称后的三角形。
- `drawYSymmetricTriangle()` 函数用于绘制以y轴对称后的三角形。
- `drawOSymmetricTriangle()` 函数用于绘制以原点对称后的三角形。
- `display()` 函数用于绘制所有的三角形,并将其显示在屏幕上。
- `main()` 函数用于初始化OpenGL和窗口,并设置绘制函数。
在 `display()` 函数中,我们首先绘制原始三角形。然后,使用 `glPushMatrix()` 函数将当前矩阵压入栈中,进行平移变换,绘制平移后的三角形。接着,利用 `glScalef()` 函数进行对称变换,分别绘制x、y、o对称后的三角形。最后,使用 `glutSwapBuffers()` 函数切换缓冲区,将绘制结果显示在屏幕上。
运行代码,即可看到所有的三角形以及它们的对称变换。
阅读全文