说明:程序使用了OpenGL,因此用VS编译时,就要搭建使用OpenGL的环境。具体方法如下,

1、下载http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip并解压;

2、在vs2008中,把解压文件夹里的glut.h复制到 vs2008安装目录/VC/include/文件夹中,把glut.lib和glut32.lib复制到 vs2008安装目录/VC/lib/文件夹中,把glut.dll和glut32.dll复制到 系统盘/Windows/System32/文件夹中

原代码为

#include "stdafx.h"
#include <glut.h>
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#define pi 3.14159265
int n=0;

int R=200,CX=250,CY=250;
int *point;
void initGraph(void);
void drawCircle(int cx, int cy, int r);
void display(void);
void drawLine(int x1, int y1, int x2, int y2);
void main(int argc, char **argv){
     float w,wi;
     glutInit(&argc,argv);
     glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB) ;
     glutInitWindowSize(500,500);
     glutCreateWindow("n阶钻石图案");
     initGraph();
     printf("请输入钻石图案行数(最小值为3):");
     scanf("%u",&n);
     if(n>2){
          point=(int*)malloc(sizeof(int)*n*2);//申请存储空间
          w=2*pi/n;
          wi=w/2;
          for(int i=0;i<2*n;i+=2){
              point[i]=(int)(CX+R*cos(wi));
              point[i+1]=(int)(CY+R*sin(wi));
              wi+=w;
        }
    }
    glutDisplayFunc(display);
    glutMainLoop();
    if(point!=NULL)free(point);//释放存储空间
}
void initGraph (void){
    glClearColor(0.0,0.0,0.0,0.0);
    gluOrtho2D(0.0,500.0,0.0,500.0);//窗口坐标左下角(0,0), 右上角(500,500)
}
void display(void){
     glClear(GL_COLOR_BUFFER_BIT) ;
     glColor3f(1.0, 1.0, 0.0) ;
     drawCircle(CX,CY,R);
     for(int i=0;i<2*n-2;i+=2){
          for(int j=i+2;j<2*n;j+=2){
              drawLine(point[i],point[i+1],point[j],point[j+1]);  
          }
    }
}
// 中点圆算法
void drawCircle(int cx, int cy, int r){
     int x=0, y=r;
     int d=1-r;
     glBegin(GL_POINTS);
     glVertex2i(x,y);
     while(x<y){
         if(d<0)
             d+=2*x+3;
         else{
            d+=2*(x-y)+5;
            y--;
         }
         glVertex2i(x+cx,y+cy);
         glVertex2i(cx-x,y+cy);
         glVertex2i(x+cx,cy-y);
         glVertex2i(cx-x,cy-y);
         glVertex2i(y+cx,x+cy);
         glVertex2i(cx-y,x+cy);
         glVertex2i(y+cx,cy-x);
         glVertex2i(cx-y,cy-x);
         x++;
    }

glEnd();
    glFlush() ;
}
void drawLine(int x1, int y1, int x2, int y2) {
    glBegin(GL_LINES);
    glVertex2d(x1, y1);
    glVertex2d(x2, y2);
    glEnd();
    glFlush() ;
}

当n=9时,运行结果图

C和OpenGL结合生成钻石图形的解决方案相关推荐

  1. Android OpenGL ES 学习(二) -- 图形渲染管线和GLSL

    OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学 ...

  2. OpenGL教程 用2D图形介绍OpenGL

    OpenGL教程 用2D图形介绍OpenGL 1.设置OpenGL 要设置OpenGL,取决于您的编程平台,请阅读: 如何在C / C ++中编写OpenGL程序. 如何在Java中编写OpenGL程 ...

  3. matplotlib更改networkx生成的图形的背景图。

    我正在尝试使用matplotlib更改networkx生成的图形的背景颜色.但是似乎我的代码仅更改外部背景,而不更改图形本身的背景.示例代码: fig =plt.figure(figsize=(30, ...

  4. CUDA:使用CUDA/OpenGL互操作性对在OpenGL中生成的3D场景的图像进行后处理实例

    CUDA:使用CUDA/OpenGL互操作性对在OpenGL中生成的3D场景的图像进行后处理实例 #include <cooperative_groups.h>namespace cg = ...

  5. 计算机图纸学绘制钻石图案,ai怎么绘制钻石图形? AI画钻石标志的教程

    ai怎么绘制钻石图形? AI画钻石标志的教程,标志 钻石 AI ai怎么绘制钻石图形? AI画钻石标志的教程 易采站长站,站长之家为您整理了ai怎么绘制钻石图形? AI画钻石标志的教程的相关内容. 喜 ...

  6. 57- 打印钻石图形

    题目描述 给定一个正奇数n,请你打印一个n*n规模的钻石图形.钻石部分用'D'表示,其余部分用'*'表示.详见样例. 输入 一个正奇数n(3≤n≤30) 输出 一个钻石图形. 样例输入 7 样例输出 ...

  7. c语言程序设计编写钻石图形,C++简单输出钻石菱形图效果

    C++简单输出钻石菱形图效果 本文实例讲述了C++简单输出钻石菱形图效果的方法.分享给大家供大家参考,具体如下: /* * 作 者: 刘同宾 * 完成日期:2012 年 11 月 25 日 * 版 本 ...

  8. 设计和输出钻石图形。

    /* * Copyright (c) 2012, 烟台大学计算机学院 * All rights reserved. * 作 者: 刘同宾 * 完成日期:2012 年 11 月 25 日 * 版 本 号 ...

  9. Java打印钻石图形

    package cn.dfeng; /** * 该类能够用*打印大小的钻石图形 * @author dfeng * */ public class Drawer { /** * 打印钻石图形 * @p ...

最新文章

  1. 微生物组数据揭示中国稻谷产毒真菌分布及仓储动态变化
  2. 【风之语】至贱城市之成都
  3. 一个进程可以创建多少线程?
  4. python数据处理常用函数_pytorch中的自定义数据处理详解
  5. Windows Mobile获取通话记录 C#
  6. django1.2中将ManyToManyField呈现为checkbox
  7. 基于粒子群优化算法的BP神经网络预测模型(Matlab代码实现)
  8. OSN3500 华为SDH全新板卡备件升级扩容
  9. java horizontalbarchart_DOC-03-36 柱状图(Bar Chart)
  10. Python实现二维码扫码登录
  11. 中国互联网创业工具库Startup Tools
  12. Bundle Adjustment简述
  13. 一个屌丝程序员的青春(二一一)
  14. 常见的短信群发平台,短信群发平台分类
  15. 抖音、快手、B站的广告投放原理
  16. Universal Robot——在Gazebo中模拟UR5机器人
  17. windows7以上平台NDIS6框架的NDIS协议驱动开发
  18. 《 Python List列表全实例详解系列(三)》——列表添加元素(4种方法)
  19. 软件测试面试题之用例设计题
  20. 通过AI实现实时数据分析和态势监测,进而让机器能够处理日常决策

热门文章

  1. 一键训练 deeplabv3seg、squeezeseg、voxelnet Docker镜像安装
  2. 提问的艺术!(转载)
  3. MySQL8.0.11修改root密码
  4. 微信chooseImage,getLocalImgData调取相机拍照,获取图片base64
  5. SAP ABAP——数据类型(一)【数据类型概要及分类】
  6. [Reverse]PC微信(一)个人数据基址
  7. 英语学习思路【罗肖尼Shawney】
  8. svg 五花 元辅音 助读器
  9. 數字圖像中邊緣檢測算法綜合研究
  10. html如何既能应用于pc端也能用于手机端_如何选择一个 vue ui 框架?