谁能帮我改一下我的C语言程序。急用!

这是我做的绘制齿轮的程序,有点问题。谁改出来就可以得到我分数了。应该不是很难的。我要可以调试出来的才可以哦。
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;               

}

参考资料:可以去我的空间里找到截图!!!!!!!!!!!!!!!!!!!!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-06-03
你没有给出全部的函数,用空函数补上,调试通过

#include <stdio.h>
#include <math.h>
#include <conio.h>

void line(float a, float b, float c ,float d)
{
;
}
void detectgraph(int *a, int *b)
{
;
}
void initgraph(int *a, int *b, char c[])
{
;
}
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);
}

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();
}
相似回答