这是我做的绘制齿轮的程序,有点问题。谁改出来就可以得到我分数了。应该不是很难的。我要可以调试出来的才可以哦。
void line(float a, float b, float c ,float d);
void featurea(float X, float Y, float D, float C1, float C2, float M, float Z,float B ,float T)
{
float X1,X2,X3,X4,X11,X12,Y1,Y3,Y5,Y7,Y9,Y11,Y13,Y15,Y17,Y19,Y21;
X1 = X - B/2 + C1;
X2 = X + B/2 - C1;
X3 = X - B/2;
X4 = X + B/2;
X11 = X - B/2 + C2;
X12 = X + B/2 - C2;
Y1 = Y +(M*Z/2)+ M;
Y3 = Y +(M*Z/2)- C1;
Y5 = Y +( M*Z/2 )- 1.25*M;
Y7 = Y + T+ D;
Y9 = Y + D + C2;
Y11 = Y + D;
Y13 = Y - D;
Y15 = Y-D-C2;
Y17 = Y - M*Z/2 + 1.25*M;
Y19 = Y-M*Z/2-M+C1;
Y21=Y-M*Z/2-M;
line (X1,Y1,X2,Y1);
line (X1,Y1,X3,Y3);
line (X2,Y1,X4,Y3);
line (X3,Y5,X4,Y5);
line (X3,Y7,X4,Y7);
line (X3,Y9,X11,Y11);
line (X4,Y9,X12,Y11);
line (X11,Y11, X12,Y11);
line (X11,Y13, X12,Y13);
line (X11,Y13, X11,Y13);
line (X12,Y11, X12,Y13);
line (X11,Y13,X3,Y15);
line (X12,Y13,X4,Y15);
line (X3,Y17, X4,Y17);
line (X3,Y19, X1,Y21);
line (X4,Y19, X2,Y21);
line (X1,Y21, X2,Y21);
line (X3,Y3, X3,Y19);
line (X4,Y3, X4,Y19);
}
#include<stdio.h>
#include<math.h>
void main()
{
int gdriver,gmode;
detectgraph(& gdriver,& gmode)
initgraph(& gdriver, & gmode,"c:\\turboc2");
}
featurea(0,0,10,2,3,2.5,18,12,2);
getch();
}
不管许多,随意添加程序,或者给个程序给我,只要且只有可以运行出画直线结果的人才行啊
截图地址:http://hi.baidu.com/yanhe0116/album/%B3%CC%D0%F2
重新给你找了个程序
#include <MATH.H>
#include <STDLIB.H>
#include <GL glut.h>
#define M_PI 3.14159265
static GLfloat view_rotx = 20.0, view_roty = 30.0, view_rotz = 0.0;
// 绘制齿轮的函数
// 输入:inner_radius --- 齿轮孔的内径
// outer_radius --- 齿轮的最大外径
// width --- 齿轮的宽度
// teeth --- 齿轮中齿的个数
// tooth_depth --- 齿的深度
static void gear(GLfloat inner_radius, GLfloat outer_radius, GLfloat width,
GLint teeth, GLfloat tooth_depth)
{
GLint i;
GLfloat r0, r1, r2;
GLfloat angle, da;
GLfloat u, v, len;
r0 = inner_radius;
r1 = outer_radius - tooth_depth / 2.0;
r2 = outer_radius + tooth_depth / 2.0;
da = 2.0 * M_PI / teeth/4 ;
glNormal3f(0.0, 0.0, 1.0);//正面
glBegin(GL_QUAD_STRIP);
for (i = 0; i <= teeth; i++)
{
angle = i * 2.0 * M_PI / teeth;
glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5);
glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5);
glVertex3f(r0 * cos(angle+da), r0 * sin(angle+da), width * 0.5);
glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), width * 0.5);
}
glEnd();
glBegin(GL_QUADS);
da = 2.0 * M_PI / teeth / 4.0;
for (i = 0; i < teeth; i++)
{
angle = i * 2.0 * M_PI / teeth;
glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5);
glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), width * 0.5);
glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), width * 0.5);
glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), width * 0.5);
}
glEnd();
glBegin(GL_QUAD_STRIP);
for (i = 0; i < teeth; i++)
{
angle = i * 2.0 * M_PI / teeth;
glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5);
glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5);
u = r2 * cos(angle + da) - r1 * cos(angle);
v = r2 * sin(angle + da) - r1 * sin(angle);
len = sqrt(u * u + v * v);//已知两条线段,求这两条线段的叉积
u /= len;
v /= len;
glNormal3f(v, -u, 0.0);//计算法向量
glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), width * 0.5);
glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), -width * 0.5);
glNormal3f(cos(angle), sin(angle), 0.0);
glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), width * 0.5);
glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), -width * 0.5);
u = r1 * cos(angle + 3 * da) - r2 * cos(angle + 2 * da);
v = r1 * sin(angle + 3 * da) - r2 * sin(angle + 2 * da);
glNormal3f(v, -u, 0.0);
glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), width * 0.5);
glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), -width * 0.5);
glNormal3f(cos(angle), sin(angle), 0.0);
}
glVertex3f(r1 * cos(0), r1 * sin(0), width * 0.5);
glVertex3f(r1 * cos(0), r1 * sin(0), -width * 0.5);
glEnd();
glBegin(GL_QUAD_STRIP);
for (i = 0; i <= teeth; i++)
{
angle = i * 2.0 * M_PI / teeth;
glNormal3f(-cos(angle), -sin(angle), 0.0);
glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5);
glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5);
}
glEnd();
}
static void cricle(GLfloat radius, GLfloat hight,GLint teeth)
{
GLint i;
GLfloat r;
GLfloat angle, da;
GLfloat u, v, len;
r = radius;
da = 2.0 * M_PI / teeth ;
glNormal3f(3.0, -3.0, 1.0);//正面
glBegin(GL_TRIANGLE_FAN);
for (i = 0; i <= teeth; i++)
{
angle = i * 2.0 * M_PI / teeth;
glVertex3f(3.0, -3.0, 1.0);
glVertex3f(3.0+r * cos(angle),-3.0+ r * sin(angle), 1.0);
glVertex3f(3.0+r * cos(angle+da),-3.0+ r* sin(angle+da), 1.0);
}
glEnd();
glBegin(GL_TRIANGLE_FAN);
for (i = 0; i <= teeth; i++)
{
angle = i * 2.0 * M_PI / teeth;
glVertex3f(3.0, -3.0, 1.0+hight);
glVertex3f(3.0+r * cos(angle),-3.0+ r * sin(angle), 1.0+hight);
glVertex3f(3.0+r * cos(angle+da),-3.0+ r* sin(angle+da), 1.0+hight);
}
glEnd();
glBegin(GL_QUAD_STRIP);
for (i = 0; i < teeth; i++)
{
angle = i * 2.0 * M_PI / teeth;
glVertex3f(3.0+r * cos(angle),-3.0+ r * sin(angle), 1.0);
glVertex3f(3.0+r * cos(angle+da),-3.0+ r* sin(angle+da), 1.0);
u = r * cos(angle + da) - r * cos(angle);
v = r * sin(angle + da) - r* sin(angle);
len = sqrt(u * u + v * v);//已知两条线段,求这两条线段的叉积
u /= len;
v /= len;
glNormal3f(v, -u, 0.0);//计算法向量
glVertex3f(3.0+r * cos(angle),-3.0+ r * sin(angle), 1.0+hight);
glVertex3f(3.0+r * cos(angle+da),-3.0+ r* sin(angle+da), 1.0+hight);
}
glEnd();
/* glBegin(GL_QUADS);
da = 2.0 * M_PI / teeth / 4.0;
for (i = 0; i < teeth; i++)
{
angle = i * 2.0 * M_PI / teeth;
glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5);
glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), width * 0.5);
glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), width * 0.5);
glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), width * 0.5);
}
glEnd();
glBegin(GL_QUAD_STRIP);
for (i = 0; i < teeth; i++)
{
angle = i * 2.0 * M_PI / teeth;
glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5);
glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5);
u = r2 * cos(angle + da) - r1 * cos(angle);
v = r2 * sin(angle + da) - r1 * sin(angle);
len = sqrt(u * u + v * v);//已知两条线段,求这两条线段的叉积
u /= len;
v /= len;
glNormal3f(v, -u, 0.0);//计算法向量
glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), width * 0.5);
glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), -width * 0.5);
glNormal3f(cos(angle), sin(angle), 0.0);
glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), width * 0.5);
glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), -width * 0.5);
u = r1 * cos(angle + 3 * da) - r2 * cos(angle + 2 * da);
v = r1 * sin(angle + 3 * da) - r2 * sin(angle + 2 * da);
glNormal3f(v, -u, 0.0);
glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), width * 0.5);
glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), -width * 0.5);
glNormal3f(cos(angle), sin(angle), 0.0);
}
glVertex3f(r1 * cos(0), r1 * sin(0), width * 0.5);
glVertex3f(r1 * cos(0), r1 * sin(0), -width * 0.5);
glEnd();
glBegin(GL_QUAD_STRIP);
for (i = 0; i <= teeth; i++)
{
angle = i * 2.0 * M_PI / teeth;
glNormal3f(-cos(angle), -sin(angle), 0.0);
glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5);
glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5);
}
glEnd();*/
}
static void draw(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glRotatef(view_rotx, 1.0, 0.0, 0.0);
glRotatef(view_roty, 0.0, 1.0, 0.0);
glRotatef(view_rotz, 0.0, 0.0, 1.0);
gear(1.0, 3.0, 1.0, 30, 0.7);
cricle(2.0,2.0,30);
glutSwapBuffers();
}
static void reshape(int width, int height)
{
GLfloat h = (GLfloat) height / (GLfloat) width;
glViewport(0, 0, (GLint) width, (GLint) height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective // 设置透视图
(9.0f, // 透视角设置为 45 度
h, // 窗口的宽与高比
0.1f, // 视野透视深度:近点1.0f
3000.0f // 视野透视深度:始点0.1f远点1000.0f
);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.0, 0.0, -100.0);
}
static void init(void)
{
static GLfloat pos[4] = {5.0, 5.0, 10.0, 0.0};
static GLfloat red[4] = {0.9, 0.0, 0.0, 1.0};
static GLfloat green[4] = {0.0, 0.8, 0.2, 1.0};
static GLfloat blue[4] = {0.2, 0.2, 1.0, 1.0};
glLightfv(GL_LIGHT0, GL_POSITION, pos);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST);
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, blue);
glEnable(GL_NORMALIZE);
}
main( )
{
glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
glutInitWindowPosition (100, 100);
glutInitWindowSize (600, 600);
glutCreateWindow("Gears");
init();
glutDisplayFunc(draw);
glutReshapeFunc(reshape);
glutMainLoop();
return 0;
}
参考资料:可以去我的空间里找到截图!!!!!!!!!!!!!!!!!!!!