旋转的六边形 源代码

#include<Windows.h>
#include <gl/glut.h>
#include <gl/GLu.h>
#include <gl/GL.h>
#include <math.h>
#include <iostream>

using namespace std;

const GLint screenWidth = 640;
const GLint screenHeight = 640;
const GLint xPosition = 100;
const GLint yPosition = 150;
const GLdouble PI = 3.1415926;

static GLint rotation = 0;        //0~60
static GLint size = 10;            //10~290


void myDisplay(void);
void myInit();
void setWindow(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top);
void setViewport(GLint left, GLint right, GLint botton, GLint top);
void drawhex(GLint size, GLint rotation);
void hexSwirl();

int main(int argc, char ** argv){

    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);            
    glutInitWindowSize(screenWidth,screenHeight);
    glutInitWindowPosition(xPosition,yPosition);

    glutCreateWindow("Wirl...");

    glutDisplayFunc(myDisplay);
    myInit();

    setWindow(-320,320,-320,320);
    setViewport(0,screenWidth,0,screenHeight);

    glutMainLoop();

    return 0;
}

void setWindow(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top){
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(left,right,bottom,top);
}

void setViewport(GLint left, GLint right, GLint botton, GLint top){
    glViewport(left,botton,right-left,top-botton);
}


void hexSwirl(){
    //0~30共31层,0~60共60度。每次2度
    for( GLint x = 0; x <= 30; x ++){
        glBegin(GL_LINE_LOOP);
        drawhex(size,rotation);
        glEnd();
        //cout<<size<<"  "<<rotation<<"  "<<endl;
        size += 10;

        rotation +=2;
    }
}

void drawhex(GLint size, GLint rotation){

    //rotation 每次旋转1°,转换成n*π的形式
    for(GLint i = 0; i< 6; i++){
        //6个顶点坐标,以竖直为准。π=180°
        GLdouble angle = GLdouble(60 * i + rotation)*PI/180.0;
        glVertex2d(size*sin(angle),size*cos(angle));
        //cout<<"angle: "<<angle<<"pt.x: "<<size*sin(angle)<<"pt.y: "<<size*cos(angle)<<endl;
        //cout<<size*sin(angle)<<" "<<size*cos(angle)<<" ";
    }
    cout<<endl;

}

void myDisplay(void){
    glClear(GL_COLOR_BUFFER_BIT);
    glMatrixMode(GL_MODELVIEW);

    rotation = 0;        //0~60
    size = 10;            //10~290
    hexSwirl();
    glFlush();

}

void myInit(void){
    glClearColor(1.0,1.0,1.0,0.0);
    glColor3f(0.0f,0.0f,0.0f);
    glLineWidth(2.0);

}



解释图:


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是用 Python 和 C3.js 实现旋转六边形代码: ```python from math import pi, sin, cos # 定义旋转六边形的参数 num_sides = 6 radius = 100 angle = pi/6 # 计算旋转六边形的顶点坐标 points = [] for i in range(num_sides): x = radius * cos(i * angle) y = radius * sin(i * angle) points.append((x, y)) # 输出 C3.js 代码 print("var chart = c3.generate({") print(" data: {") print(" columns: [") for i in range(num_sides): x1, y1 = points[i] x2, y2 = points[(i+1)%num_sides] print(f" ['x{i}', {x1}, {x2}],") print(f" ['y{i}', {y1}, {y2}],") print(" ],") print(" type: 'area',") print(" groups: [[") for i in range(num_sides): print(f" 'x{i}', 'y{i}',") print(" ]],") print(" },") print(" transition: {") print(" duration: 0") print(" },") print(" axis: {") print(" x: {") print(" show: false,") print(" max: 1,") print(" min: -1") print(" },") print(" y: {") print(" show: false,") print(" max: 1,") print(" min: -1") print(" }") print(" },") print(" legend: {") print(" show: false") print(" },") print(" padding: {") print(" top: 0,") print(" right: 0,") print(" bottom: 0,") print(" left: 0,") print(" },") print("});") print("var i = 0;") print("setInterval(function() {") print(" chart.groups([[") for i in range(num_sides): print(f" 'x{(i+1)%num_sides}', 'y{(i+1)%num_sides}',") print(" ]]);") print(f" chart.transform('rotate', {i * angle * 180 / pi});") print(" i++;") print("}, 50);") ``` 这段代码会输出一个包含 C3.js 代码的字符串,可以直接将其复制到 HTML 文件中使用。这段代码会生成一个旋转六边形,并且会以每秒 20 帧的速度不停地旋转

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值