| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 10516 人关注过本帖
标题:用C语言输出一个圆的图案,请教高手!!!
只看楼主 加入收藏
ting3259298
Rank: 2
等 级:论坛游民
帖 子:15
专家分:17
注 册:2010-10-22
收藏
得分:0 
不错啊
2010-11-26 21:18
shenhua2050
Rank: 2
等 级:论坛游民
帖 子:39
专家分:14
注 册:2010-11-23
收藏
得分:0 
回复 10楼 huliangmao
谢谢   运行了一下   呵呵   不是圆  
2010-11-26 21:23
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
画一个圆很简单的, 调个三角函数,围一圈像素就可以了,
当然,为了速度更快,可以先把三角函数值计算好,也可以先把圆上点的坐标计算好,代入一下,调个图形函数就行了,
更高级的, 像ioriliao大侠可能会用c 直接操纵显存,我们只能是望洋兴叹了。

我就是真命天子,顺我者生,逆我者死!
2010-11-26 21:36
shenhua2050
Rank: 2
等 级:论坛游民
帖 子:39
专家分:14
注 册:2010-11-23
收藏
得分:0 
回复 13楼 BlueGuy
输出的圆  是由很多点组成的吗?  那程序中怎么确定点的数目和坐标?呵呵 麻烦指导一下 谢谢
2010-11-26 21:47
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:20 
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

#include <GL/glut.h>

#define WINDOW_WIDTH 500
#define WINDOW_HEIGHT 500
#define WINDOW_X 200
#define WINDOW_Y 200

#define FRAMES_PER_SECOND 10
#define KEY_EXIT 27

#define STAR_LEN 80

#define STAR_X 0
#define STAR_Y 1
#define STAR_V 2

#define PI 3.1415927
#define SIDE 10

#define drawSquare(x,y,side)  glBegin(GL_QUADS);\
    glVertex2f(x-side/2, y-side/2); glVertex2f(x+side/2, y-side/2);\
    glVertex2f(x+side/2, y+side/2); glVertex2f(x-side/2, y+side/2);\
glEnd();

int star[STAR_LEN][3];

int timer = 0;
int speed = 10;

void handleKeyEvent(unsigned char key, int x, int y);
void handleMouseEvent(int button, int state, int x, int y);
void handleReshape(int width, int height);

void run(int null);
void repaint(void);
void update(void);

void initScene(void);
void doScene(void);
void drawScene(void);
void exitScene(void);

void sleepMilliSeconds(long milliSeconds);

int main(int argc, char ** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutInitWindowSize(WINDOW_WIDTH, WINDOW_HEIGHT);
    glutInitWindowPosition(WINDOW_X, WINDOW_Y);
    glutCreateWindow("demo");
   
    glutKeyboardFunc(handleKeyEvent);
    glutMouseFunc(handleMouseEvent);
    glutReshapeFunc(handleReshape);

    initScene();

    glutDisplayFunc(repaint);
    glutTimerFunc(FRAMES_PER_SECOND, run, 0);

    glutMainLoop();

    return 0;   
}

void run(int null)
{   
    clock_t startTime, endTime;
   
    startTime = clock();

    update();
    repaint();

    endTime = clock();
    if (endTime - startTime < FRAMES_PER_SECOND)
    {
        sleepMilliSeconds(FRAMES_PER_SECOND - (endTime - startTime));
    }
   
    glutPostRedisplay();
    glutTimerFunc(FRAMES_PER_SECOND, run, 0);        
}

void update(void)
{
    doScene();
}

void repaint(void)
{
    drawScene();

    glutSwapBuffers();
}

void initScene(void)
{
    int i;

    srand(time(0));

    for (i = 0; i < STAR_LEN; i++)
    {
        star[i][STAR_X] = rand() % WINDOW_WIDTH;
        star[i][STAR_Y] = rand() % WINDOW_HEIGHT;
        star[i][STAR_V] =  rand()%100 + 200;
    }

    glMatrixMode (GL_PROJECTION);
    glLoadIdentity ();
    gluOrtho2D(0, (GLdouble)WINDOW_WIDTH, 0, (GLdouble)WINDOW_HEIGHT);
    glClearColor(0.0, 0.0, 0.0, 0.0);
    glShadeModel(GL_FLAT);
    glEnable(GL_COLOR_MATERIAL);

}

void doScene(void)
{
    int i;

    timer++;

    if (timer == 200)
    {
        timer = 1;
    }

    if (timer % 20 == 0)
    {
        for (i = 0; i < STAR_LEN; i++)
        {
            star[i][STAR_X] = rand() % WINDOW_WIDTH;
            star[i][STAR_Y] = rand() % WINDOW_HEIGHT;
            star[i][STAR_V] = rand()%100 + 100;
        }
    }
   
    for (i = 0; i < STAR_LEN; i++)
    {
        star[i][STAR_V] -= speed;
    }

}

void drawScene(void)
{
    unsigned char r, g, b;
    int i, angle;

    glClear (GL_COLOR_BUFFER_BIT);
   
    r = rand()%200 + 55;
    g = rand()%200 + 55;
    b = rand()%200 + 55;

    glColor3ub(r, g, b);

    for (i = 0; i < STAR_LEN; i++)
    {
        drawSquare(star[i][STAR_X], star[i][STAR_Y]+star[i][STAR_V], 2);
    }

    for (i = 0; i <= timer; i++)
    {
        angle = 2*PI*(72*i-timer*20)/360;
        drawSquare((WINDOW_WIDTH>>1) + timer*cos(angle), (WINDOW_HEIGHT>>1) + timer*sin(angle), SIDE);
    }
}

void exitScene(void)
{
    exit(0);
}

void handleKeyEvent(unsigned char key, int x, int y)
{
    switch (key)
    {
    case KEY_EXIT:
        exitScene();
        break;

    default:
        break;
   }
}

void handleMouseEvent(int button, int state, int x, int y)
{
        switch (button)
        {
        case GLUT_LEFT_BUTTON:
            if (state == GLUT_DOWN)
                glutIdleFunc(repaint);
            break;

        case GLUT_RIGHT_BUTTON:
            if (state == GLUT_DOWN)
                glutIdleFunc(NULL);
            break;

        default:
            break;
        }
}

void handleReshape(int width, int height)
{
   
}

void sleepMilliSeconds(long milliSeconds)
{
    clock_t start, end;
   
    start = clock();
    end  = start + milliSeconds;
   
    while (start < end)
    {
        start = clock();
    }
}


我就是真命天子,顺我者生,逆我者死!
2010-11-26 21:49
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
angle = 2*PI*(72*i-timer*20)/360;
drawSquare((WINDOW_WIDTH>>1) + timer*cos(angle), (WINDOW_HEIGHT>>1) + timer*sin(angle), SIDE);

我就是真命天子,顺我者生,逆我者死!
2010-11-26 21:49
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
楼主要求的啊, 我本不想重新帖一遍的,

我就是真命天子,顺我者生,逆我者死!
2010-11-26 21:50
zzgzzg00
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:388
专家分:627
注 册:2010-8-2
收藏
得分:0 
#include<graphics.h>
main()
{
int graphdriver=DETECT;
int graphmode,x,y;
initgraph(&graphdriver,&graphmode,"");
for(x=0;x<=250;x++)
 for(y=0;y<=250;y++)
 {
  if((x-100)*(x-100)+(y-50)*(y-50)==400)
  putpixel(x,y,2);
 }
}
呵呵  蓝色男孩厉害  学习了  虽然根本没看懂  呵呵

[ 本帖最后由 zzgzzg00 于 2010-11-26 21:57 编辑 ]

粗心是大敌
2010-11-26 21:55
vandychan
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
注 册:2010-8-20
收藏
得分:0 
像ioriliao大侠可能会用c 直接操纵显存?????

到底是“出来混迟早要还”还是“杀人放火金腰带”?
2010-11-26 22:09
灵敏天平
Rank: 1
来 自:珠海
等 级:新手上路
帖 子:9
专家分:6
注 册:2010-11-24
收藏
得分:0 
跑不出
2010-11-27 10:47
快速回复:用C语言输出一个圆的图案,请教高手!!!
数据加载中...
 
   



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

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