最好把算法讲得明白点,谢谢!!!

解决方案 »

  1.   

    直接调用画多边型的函数.ploygon()好象是这个.参数自己查一下.
      

  2.   

    是啊,那是五边形啊!!!我想画的是五角星,要是用Polygon()需要10个点的坐标,我就是坐标不会算才问的啊,帮帮忙好么?谢谢了
      

  3.   

    void CTestView::Drawpentacle(CDC *pDC, CPoint ptCenter,int nRadius)
    {
    double pi = 3.1415926535;
    CPoint point[5];
    for(int i=0;i<5;i++)
    {
    point[i].x =(long)(ptCenter.x -nRadius*sin((i*72+36)*2*pi/360));
    point[i].y =(long)(ptCenter.y +nRadius*cos((i*72+36)*2*pi/360));
    }
    for(i=0;i<5;i++)
    {
    pDC->MoveTo(point[i]);
    pDC->LineTo(point[(i+2)%5]);
    }

    }
      

  4.   

    可以通过opengl来画好处就是可以采用多种方式来显示这个图形这个是我们图形学的大作业具体过程你看看有关opengl的书需要有opengl库的支持
    // PentagonStar.cpp
    // OpenGL sdudy
    // Demonstrates OpenGL GL_TRIANGLES with outline's display
    //        
    // Program by wangqingsheng.  03/24/6
    #include <windows.h>
    #include <gl/gl.h>
    #include <gl/glu.h>
    #include "glut.h"
    // Define a constant for the value of PI
    #define GL_PI 3.1415f// Rotation amounts
    static GLfloat xRot = 0.0f;
    static GLfloat yRot = 0.0f;// Flags for effects
    #define MODE_SOLID 0
    #define MODE_LINE  1
    #define MODE_POINT 2int iMode = MODE_SOLID;
    GLboolean bEdgeFlag = TRUE;///////////////////////////////////////////////////////////////////////////////
    // Reset flags as appropriate in response to menu selections
    void ProcessMenu(int value)
    {
    switch(value)
    {
    case 1:
    iMode = MODE_SOLID;
    break; case 2:
    iMode = MODE_LINE;
    break; case 3:
    iMode = MODE_POINT;
    break; case 4:
    bEdgeFlag = TRUE;
    break; case 5:
    default:
    bEdgeFlag = FALSE;
    break;
    } glutPostRedisplay();
    }
    // Called to draw scene
    void RenderScene(void)
    {
    //另外一组数据
    /// double  radx[5] = {5.8779,-5.8779,-9.5106,-0.0000,9.5106};
    // double  rady[5] = {8.0902,8.0902,-3.0902,-10.0000,-3.0902};
    // double  Radx[5] = {38.0423,0.0000,-38.0423,-23.5114,23.5114};
    // double  Rady[5] = {12.3607,40.0000,12.3607,-32.3607,-32.3607}; //内部五边形的数据
    double  radx[5] = {7.0534,-7.0534,-11.4127,-0.0000,11.4127};
    double  rady[5] = {9.7082,9.7082,-3.7082,-12.0000,-3.7082};
    //外部五边形的数据
    double  Radx[5] = {38.0423,0.0000,-38.0423,-23.5114,23.5114};
    double  Rady[5] = {12.3607,40.0000,12.3607,-32.3607,-32.3607};
    // Clear the window
    glClear(GL_COLOR_BUFFER_BIT);
    // Draw back side as a polygon only, if flag is set
    if(iMode == MODE_LINE)
    glPolygonMode(GL_FRONT_AND_BACK,GL_LINE); if(iMode == MODE_POINT)
    glPolygonMode(GL_FRONT_AND_BACK,GL_POINT); if(iMode == MODE_SOLID)
    glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
    // Save matrix state and do the rotation
    glPushMatrix();
    glRotatef(xRot, 1.0f, 0.0f, 0.0f);
    glRotatef(yRot, 0.0f, 1.0f, 0.0f);
    // Begin the triangles
    glBegin(GL_TRIANGLES); //按照逆时针的顺序画出直线
    glEdgeFlag(bEdgeFlag);
    glVertex2f(radx[1],rady[1]);
    glEdgeFlag(TRUE);
    glVertex2f(radx[0],rady[0]);
    glVertex2f(Radx[1],Rady[1]); glVertex2f(radx[1],rady[1]);
    glVertex2f(Radx[2],Rady[2]);
    glEdgeFlag(bEdgeFlag);
    glVertex2f(radx[2],rady[2]); glEdgeFlag(TRUE);
    glVertex2f(radx[2],rady[2]);
    glVertex2f(Radx[3],Rady[3]);
    glEdgeFlag(bEdgeFlag);
    glVertex2f(radx[3],rady[3]);
    glEdgeFlag(TRUE); glVertex2f(radx[3],rady[3]);
    glVertex2f(Radx[4],Rady[4]);
    glEdgeFlag(bEdgeFlag);
    glVertex2f(radx[4],rady[4]);
    glEdgeFlag(TRUE); glVertex2f(radx[4],rady[4]);
    glVertex2f(Radx[0],Rady[0]);
    glEdgeFlag(bEdgeFlag);
    glVertex2f(radx[0],rady[0]);
    glEdgeFlag(TRUE); // Center square as two triangles //画出内部的五边形,都设置为FLASE
    glEdgeFlag(bEdgeFlag);
    glVertex2f(radx[0],rady[0]);
    glVertex2f(radx[1],rady[1]);
    glVertex2f(radx[2],rady[2]);

    glVertex2f(radx[3],rady[3]);
    glVertex2f(radx[4],rady[4]);
    glVertex2f(radx[0],rady[0]);
    glVertex2f(radx[3],rady[3]);
    glEdgeFlag(bEdgeFlag);
    glVertex2f(radx[0],rady[0]);
    glVertex2f(radx[2],rady[2]);
    glEdgeFlag(TRUE);
    glEnd(); // Restore transformations
    glPopMatrix(); // Flush drawing commands
    glutSwapBuffers();
    }// This function does any needed initialization on the rendering
    // context. 
    void SetupRC()
    {
    //设置背景色为蓝色
    glClearColor(0.1f, 0.5f, 1.0f, 1.0f ); // Set drawing color to green
    glColor3f(0.0f, 1.0f, 0.0f);
    }void SpecialKeys(int key, int x, int y)
    {
    if(key == GLUT_KEY_UP)
    xRot-= 5.0f; if(key == GLUT_KEY_DOWN)
    xRot += 5.0f; if(key == GLUT_KEY_LEFT)
    yRot -= 5.0f; if(key == GLUT_KEY_RIGHT)
    yRot += 5.0f; if(key > 356.0f)
    xRot = 0.0f; if(key < -1.0f)
    xRot = 355.0f; if(key > 356.0f)
    yRot = 0.0f; if(key < -1.0f)
    yRot = 355.0f; // Refresh the Window
    glutPostRedisplay();
    }
    void ChangeSize(int w, int h)
    {
    GLfloat nRange = 100.0f; // Prevent a divide by zero
    if(h == 0)
    h = 1; // Set Viewport to window dimensions
        glViewport(0, 0, w, h); // Reset projection matrix stack
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity(); // Establish clipping volume (left, right, bottom, top, near, far)
        if (w <= h) 
    glOrtho (-nRange, nRange, -nRange*h/w, nRange*h/w, -nRange, nRange);
        else 
    glOrtho (-nRange*w/h, nRange*w/h, -nRange, nRange, -nRange, nRange); // Reset Model view matrix stack
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    }int main(int argc, char* argv[])
    {
    int nModeMenu;
    int nEdgeMenu;
    int nMainMenu; glutInit(&argc, argv);
    //设置窗口显示模式
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
    //设置窗口大小
    glutInitWindowSize(1024,768);
    //设置窗口显示标题
    glutCreateWindow("五角星的显示");

    // Create the Menu
    nModeMenu = glutCreateMenu(ProcessMenu);
    glutAddMenuEntry("Solid",1);
    glutAddMenuEntry("Outline",2);
    glutAddMenuEntry("Points",3); nEdgeMenu = glutCreateMenu(ProcessMenu);
    glutAddMenuEntry("On",4);
    glutAddMenuEntry("Off",5); nMainMenu = glutCreateMenu(ProcessMenu);
    glutAddSubMenu("Mode", nModeMenu);
    glutAddSubMenu("Edges", nEdgeMenu);
    glutAttachMenu(GLUT_RIGHT_BUTTON);

    glutReshapeFunc(ChangeSize);
    glutSpecialFunc(SpecialKeys);
    glutDisplayFunc(RenderScene);
    SetupRC();
    glutMainLoop(); return 0;
    }