| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1474 人关注过本帖
标题:矩形旋转算法
只看楼主 加入收藏
许苏娟
Rank: 1
等 级:新手上路
威 望:1
帖 子:40
专家分:9
注 册:2010-4-3
结帖率:50%
收藏
 问题点数:0 回复次数:3 
矩形旋转算法
小女子实在是菜手,稍大一点的算法就不知怎么办了,全乱套了!真希望各位高手出手相救,帮我看下这里的C++代码,哪怕再幼稚的问题,也请高手们不惜笔墨指出来。谢谢啦!
#include<GL/glut.h>
#include<math.h>
#include<stdlib.h>
#define DEG_TO_RAD 0.017453
float theta=30.0;
float x=300.0, y=200.0;
float length=200;
float width=300;
GLint nVerts=3;
class wcPt2D {
      public:
         GLfloat x, y;
   };
void init (void)
{
glClearColor (1.0, 1.0, 1.0, 0.0);
glMatrixMode (GL_PROJECTION);
gluOrtho2D (0.0, 600.0, 0.0, 400.0);
}

   void rotatePolygon (wcPt2D * verts, GLint nVerts, wcPt2D pivPt,
                         GLdouble theta)
   {
      wcPt2D * vertsRot;
      GLint k;


      for (k = 0; k < nVerts; k++) {
         vertsRot [k].x = pivPt.x + (verts [k].x - pivPt.x) * cos (theta)
                               - (verts [k].y - pivPt.y) * sin (theta);
         vertsRot [k].y = pivPt.y + (verts [k].x - pivPt.x) * sin (theta)
                               + (verts [k].y - pivPt.y) * cos (theta);

      }
      glBegin {GL_POLYGON};
         for (k = 0; k < nVerts; k++)
            glVertex2f (vertsRot [k].x, vertsRot [k].y);
      glEnd ( );
   }
void display (void)
{
glClear (GL_COLOR_BUFFER_BIT);
glColor3f (1.0, 0.0, 0.0);
glBegin (GL_POLYGON);
glVertex2f (pivPt.x,pivPt.y);
glVertex2f (vertsRot[k].x,vertsRot[k].y  );
glEnd ( );
glutSwapBuffers ( );
}
void myKeyboard(unsigned char key,int x,int y)
{
if(key == 'a' || key == 'A')
theta += 5.0;
if(key == 's' || key == 'S')
theta -= 5.0;
if(key == 'c' || key == 'C')
exit(c);
if (theta>360) theta -=360;
if (theta<0) theta +=360;
glutPostRedisplay();
}
void mySpecialKeyboard(int key, int x, int y)
{
if(key == GLUT_KEY_F1 || key == GLUT_KEY_LEFT)
theta += 5.0;
if(key == GLUT_KEY_F2 || key == GLUT_KEY_RIGHT)
theta -= 5.0;
if (theta>360) theta -=360;
if (theta<0) theta +=360;
glutPostRedisplay(); //重新调用绘制函数
}
void main (int argc, char** argv)
{
glutInit (&argc, argv);
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);
glutInitWindowPosition (50, 100);
glutInitWindowSize (600 400);
glutCreateWindow ("Draw Rectangle with Double Buffer");
glBegin(GL_POLYGON);
glVertex2f(pivPt.x,pivPt.y);
glVertex2f ( pivPt.x + length*cos(DEG_TO_RAD*theta),
pivPt.y + length*sin(DEG_TO_RAD*theta) );
glVertex2f ( pivPt.x + length*cos(DEG_TO_RAD*(theta+45.0)),
pivPt.y + length*sin(DEG_TO_RAD*(theta+45.0) );
glVertex2f ( pivPt.x + length*cos(DEG_TO_RAD*(theta+90.0)),
pivPt.y + length*sin(DEG_TO_RAD*(theta+90.0) );
glEnd();
init ( );
glutDisplayFunc (display);
glutSpecialFunc(mySpecialKeyboard); //指定空闲回调函数
glutMainLoop ( );
}
搜索更多相关主题的帖子: 算法 矩形 
2010-05-03 19:29
chenwar
Rank: 1
等 级:新手上路
帖 子:12
专家分:7
注 册:2010-5-8
收藏
得分:0 
这个基于Opengl图像库的  完全看不懂了
2010-05-14 17:02
许苏娟
Rank: 1
等 级:新手上路
威 望:1
帖 子:40
专家分:9
注 册:2010-4-3
收藏
得分:0 
已经解决了,依旧谢谢了
2010-06-18 19:34
weble
Rank: 2
等 级:论坛游民
帖 子:59
专家分:83
注 册:2009-4-12
收藏
得分:0 
楼主可以计算旋转5度的矩阵,然后在GL_MODELVIEW下每次重绘的时候调用glMultMatrix

路漫漫其修远兮,吾将上下而求索
2010-08-15 10:32
快速回复:矩形旋转算法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020017 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved