承接上文,这里继续对上面在centos7虚拟机成功运行的solarsystem进行成员函数和回调函数的实现。

#include<cmath>
void Star::drawStar() {glEnable(GL_LINE_SMOOTH);//启用抗锯齿のLINE_SMOOTHglEnable(GL_BLEND);//启用混合int n = 1440;// 保存 OpenGL 当前的矩阵环境glPushMatrix();{// 公转// 如果是行星,且距离不为0,那么 且向原点平移一个半径// 这部分用于处理卫星if (parentStar != 0 && parentStar->distance > 0) {//将绘制的图形沿 z 轴旋转 alphaglRotatef(parentStar->relution_angle, 0, 0, 1);// x 轴方向上平移 distance , y,z 方向不变glTranslatef(parentStar->distance, 0.0, 0.0);}// 绘制运行轨道glBegin(GL_LINES);for(int i=0; i<n; ++i)glVertex2f(distance * cos(2 * PI * i / n),distance * sin(2 * PI * i / n));glEnd();// 绕 z 轴旋转 alphaglRotatef(revolution_angle, 0, 0, 1);// x 轴方向平移 distance, y,z 方向不变glTranslatef(distance, 0.0, 0.0);// 自转glRotatef(rotation_angle, 0, 0, 1);// 绘制行星颜色glColor3f(rgbaColor[0], rgbaColor[1], rgbaColor[2]);glutSolidSphere(radius, 40, 32);}// 恢复绘制前的矩阵环境glPopMatrix();}
void Star::update(long timeSpan) {revolution_angle += timeSpan * revolutionSp;  // 更新角度rotation_angle += rotationSp;     // 更新自转角度
}

glEnable(),激活openGL中的功能;
glPushMatrix() 和 glPopMatrix()
将当前矩阵保存到堆栈栈顶(保存当前矩阵)。前者在我们进行了一些移动旋转的操作后,对变换后的角度和位置进行保存,后者是在进行操作后使用,会恢复到上一次保存的位置和角度,适当理解为栈的入栈出栈;

glBegin() 和 glEnd() :绘制时使用,glBegin()指定图形类型。其中常用参数有:GL_POINTS 表示绘制点、 GL_LINES 表示绘制依次画出的点及他们之间的连线、GL_TRIANGLES 则是在每绘制的三个点中完成一个三角形、GL_POLYGON 则是绘制一个从第一个点到第 n 个点的多边形,上面就是画一个边很多的多边形来模拟圆的效果。

glRotatef(revolution_angle, 0, 0, 1)
当前图形绕(0,0,1)旋转revolution_angle度

glTranslatef(distance, 0.0, 0.0)
当前图形沿(0.0,0.0)方向平移distance距离

glutSolidSphere(radius, 40, 32)
以radius为半径,40经线条数,32纬线条数绘制球体
上面是天体基本属性的描绘,然后是行星和恒星的描绘
行星是不发光的,所以这里需要对它们的光照效果进行设计

void Planet::drawPlanet() {GLfloat mat_ambient[]  = {0.0f, 0.0f, 0.5f, 1.0f};GLfloat mat_diffuse[]  = {0.0f, 0.0f, 0.5f, 1.0f};GLfloat mat_specular[] = {0.0f, 0.0f, 1.0f, 1.0f};GLfloat mat_emission[] = {rgbaColor[0], rgbaColor[1], rgbaColor[2], rgbaColor[3]};GLfloat mat_shininess  = 90.0f;glMaterialfv(GL_FRONT, GL_AMBIENT,   mat_ambient);glMaterialfv(GL_FRONT, GL_DIFFUSE,   mat_diffuse);glMaterialfv(GL_FRONT, GL_SPECULAR,  mat_specular);glMaterialfv(GL_FRONT, GL_EMISSION,  mat_emission);glMaterialf (GL_FRONT, GL_SHININESS, mat_shininess);
}

上面用到的主要是glMaterialf和glMaterialfv两个函数,下面是函数原型:

void glMaterialf(GLenum face, GLenum pname, TYPE param);
void glMaterialfv(GLenum face, GLenum pname, TYPE *param);

前者用于设计镜面指数,镜面指数的值的大小直接体现在物体的表面粗糙程度上,值越小材质越粗糙,受到点光源照射,就会产生很大的亮点;值越大,就越接近镜面,亮点越小。这里只需要设置一个值即可;
后者用来设置需要设置一个数组。

进行了行星的设置就该轮到发光发热的恒星了,恒星是一个天体系统里面的主要光源,所以这里是使用创造光源的函数 glLightfv对它进行绘制:

void Fixed_star::drawsun() {GLfloat sun_position[] = {0.0f, 0.0f, 0.0f, 1.0f};GLfloat sun_ambient[]  = {0.0f, 0.0f, 0.0f, 1.0f};GLfloat sun_diffuse[]  = {1.0f, 1.0f, 1.0f, 1.0f};GLfloat sun_specular[] = {1.0f, 1.0f, 1.0f, 1.0f};glLightfv(GL_LIGHT0, GL_POSITION, sun_position); // 指定零号光源的位置glLightfv(GL_LIGHT0, GL_AMBIENT,  sun_ambient);  // 表示各种光线照射到该材质上,经过很多次反射后追踪遗留在环境中的光线强度glLightfv(GL_LIGHT0, GL_DIFFUSE,  sun_diffuse);  // 漫反射后的光照强度glLightfv(GL_LIGHT0, GL_SPECULAR, sun_specular); // 镜面反射后的光照强度}
void glLightfv (GLenum light, GLenum pname, const GLfloat *params)

第一个参数是你设置的类型,第几号光源;
第二个参数是你设置光源的参数类型:
GL_POSITION,光源位置
GL_AMBIENT,光照强度
GL_DIFFUSE,漫反射后光照强度
GL_SPECULAR,镜面反射后光照强度
第三个参数就是你对应的数值大小,即根据你前面定好了的光照源类型,进行数据大小设定。

进入正题,给我们的太阳系进行方法实现

//
//
// solarsystem
//
#include "solarsystem.h"
// 公转半径
#define SUN_RADIUS 48.74
#define MER_RADIUS  7.32
#define VEN_RADIUS 18.15
#define EAR_RADIUS 19.13
#define MOO_RADIUS  6.15
#define MAR_RADIUS 10.19
#define JUP_RADIUS 42.90
#define SAT_RADIUS 36.16
#define URA_RADIUS 25.56
#define NEP_RADIUS 24.78// 距太阳的距离
#define MER_DIS   62.06
#define VEN_DIS  115.56
#define EAR_DIS  168.00
#define MOO_DIS   26.01
#define MAR_DIS  228.00
#define JUP_DIS  333.40
#define SAT_DIS  428.10
#define URA_DIS 848.00
#define NEP_DIS 949.10// 运动速度
#define MER_SPEED   87.0
#define VEN_SPEED  225.0
#define EAR_SPEED  365.0
#define MOO_SPEED   30.0
#define MAR_SPEED  687.0
#define JUP_SPEED 1298.4
#define SAT_SPEED 3225.6
#define URA_SPEED 3066.4
#define NEP_SPEED 6014.8
//自转速度
#define SELFROTATE 3#define REST 700
#define REST_Z (REST)
#define REST_Y (-REST)enum STARS{Sun, Mercury, Venus, Earth, Moon,Mars, Jupiter, Saturn, Uranus, Neptune
};
#define TIMEPAST 1 // 假设每次更新都经过了一天
void SolarSystem::onUpdate() {for (int i=0; i<STARS_NUM; i++)stars[i]->update(TIMEPAST); // 更新星球的位置this->onDisplay(); // 刷新显示
}
void SolarSystem::onDisplay() {// 清除 viewport 缓冲区glClear(GL_COLOR_BUFFER_BIT  |  GL_DEPTH_BUFFER_BIT);// 清空并设置颜色缓存glClearColor(.7f, .7f, .7f, .1f);// 指定当前矩阵为投影矩阵glMatrixMode(GL_PROJECTION);// 将指定的矩阵指定为单位矩阵glLoadIdentity();// 指定当前的观察视景体gluPerspective(75.0f, 1.0f, 1.0f, 40000000);// 指定当前矩阵为视景矩阵堆栈应用术后的矩阵操作glMatrixMode(GL_MODELVIEW);// 指定当前的矩阵为单位矩阵glLoadIdentity();// 定义视图矩阵,并与当前矩阵相乘gluLookAt(viewX, viewY, viewZ, centerX, centerY, centerZ, upX, upY, upZ);// 设置第一个光源(0号光源)glEnable(GL_LIGHT0);// 启用光源glEnable(GL_LIGHTING);// 启用深度测试,根据坐标的远近自动隐藏被遮住的图形glEnable(GL_DEPTH_TEST);// 绘制星球for (int i=0; i<STARS_NUM; i++)stars[i]->draw();// 我们在 main 函数中初始化显示模式时使用了 GLUT_DOUBLE// 需要使用 glutSwapBuffers 在绘制结束后实现双缓冲的缓冲区交换glutSwapBuffers();
}
#define OFFSET 20
void SolarSystem::onKeyboard(unsigned char key, int x, int y) {switch (key)    {case 'w': viewY += OFFSET; break; // 摄像机Y 轴位置增加 OFFSETcase 's': viewZ += OFFSET; break;case 'S': viewZ -= OFFSET; break;case 'a': viewX -= OFFSET; break;case 'd': viewX += OFFSET; break;case 'x': viewY -= OFFSET; break;case 'r':viewX = 0; viewY = REST_Y; viewZ = REST_Z;centerX = centerY = centerZ = 0;upX = upY = 0; upZ = 1;break;case 27: exit(0); break;default: break;}}
#define SET_VALUE_3(name, value0, value1, value2) \((name)[0])=(value0), ((name)[1])=(value1), ((name)[2])=(value2)
SolarSystem::SolarSystem() {// 定义视角,在前面我们已经讨论过视角的初始化了viewX = 0;viewY = REST_Y;viewZ = REST_Z;centerX = centerY = centerZ = 0;upX = upY = 0;upZ = 1;// 太阳GLfloat rgbColor[3] = {1, 0, 0};stars[Sun]     = new Fixed_star(SUN_RADIUS, 0, 0, SELFROTATE, 0, rgbColor);// 水星SET_VALUE_3(rgbColor, .2, .2, .5);stars[Mercury] = new Planet(MER_RADIUS, MER_DIS, MER_SPEED, SELFROTATE, stars[Sun], rgbColor);// 金星SET_VALUE_3(rgbColor, 1, .7, 0);stars[Venus]   = new Planet(VEN_RADIUS, VEN_DIS, VEN_SPEED, SELFROTATE, stars[Sun], rgbColor);// 地球SET_VALUE_3(rgbColor, 0, 1, 0);stars[Earth]   = new Planet(EAR_RADIUS, EAR_DIS, EAR_SPEED, SELFROTATE, stars[Sun], rgbColor);// 月亮SET_VALUE_3(rgbColor, 1, 1, 0);stars[Moon]    = new Planet(MOO_RADIUS, MOO_DIS, MOO_SPEED, SELFROTATE, stars[Earth], rgbColor);// 火星SET_VALUE_3(rgbColor, 1, .5, .5);stars[Mars]    = new Planet(MAR_RADIUS, MAR_DIS, MAR_SPEED, SELFROTATE, stars[Sun], rgbColor);// 木星SET_VALUE_3(rgbColor, 1, 1, .5);stars[Jupiter] = new Planet(JUP_RADIUS, JUP_DIS, JUP_SPEED, SELFROTATE, stars[Sun], rgbColor);// 土星SET_VALUE_3(rgbColor, .5, 1, .5);stars[Saturn]  = new Planet(SAT_RADIUS, SAT_DIS, SAT_SPEED, SELFROTATE, stars[Sun], rgbColor);// 天王星SET_VALUE_3(rgbColor, .4, .4, .4);stars[Uranus]  = new Planet(URA_RADIUS, URA_DIS, URA_SPEED, SELFROTATE, stars[Sun], rgbColor);// 海王星SET_VALUE_3(rgbColor, .5, .5, 1);stars[Neptune] = new Planet(NEP_RADIUS, NEP_DIS, NEP_SPEED, SELFROTATE, stars[Sun], rgbColor);}
SolarSystem::~SolarSystem() {for(int i = 0; i<STARS_NUM; i++)delete stars[i];
}

好了,功能实现完成,然后来编译运行看看能不能行了。

[root@jack course]# g++ main.cpp stars.cpp solarsystem.cpp -lglut -lGL -lGLU -o solarsystem
[root@jack course]# ./solarsystem


基本能实现功能,不过还是差了点吧,挺满足了,现在重新更新一下代码,因为磕磕碰碰的,也有不少查错:
头文件:

#include<GL/glut.h>
class Star {public:
// 星球的运行半径
GLfloat radius;
// 星球的公转、自传速度
GLfloat rotationSp, revolutionSp;
// 星球的中心与父节点星球中心的距离
GLfloat distance;
// 星球的颜色
GLfloat rgbaColor[4];
// 父节点星
Star* parentStar;
// 构造函数,构造一颗星球时必须提供
// 旋转半径、旋转速度、自转速度、绕行(父节点)星球
Star(GLfloat radius, GLfloat distance,
GLfloat rotationSp, GLfloat revolutionSp,
Star* parentStar);
// 对一般的星球的移动、旋转等活动进行绘制
void drawStar();
// 提供默认实现,负责调用 drawStar()
virtual void draw() { drawStar();}
// 参数为每次刷新画面时的时间跨
virtual void update(long timeSpan);
protected:
GLfloat rotation_angle, revolution_angle;
};class Planet : public Star {public:
// 构造函数
Planet(GLfloat radius, GLfloat distance,GLfloat rotationSp, GLfloat revolutionSp,Star* parent, GLfloat rgbColor[3]);
// 增加对具备自身材质的行星绘制材质
void drawPlanet();
// 继续向其子类开放重写功能
virtual void draw() { drawPlanet(); drawStar(); }
};class Fixed_star : public Planet {public:
Fixed_star(GLfloat radius,GLfloat distance, GLfloat rotationSp,GLfloat revolutionSp, Star* parent,GLfloat rgbColor[3]);
// 增加对提供光源的恒星绘制光照
void drawsun();
virtual void draw() { drawsun(); drawPlanet(); drawStar(); }
};
#include"stars.h"
#include<GL/glut.h>
#define STARS_NUM 10
class SolarSystem {public:SolarSystem();~SolarSystem();void onDisplay();void onUpdate();void onKeyboard(unsigned char key, int x, int y);private:Star *stars[STARS_NUM];// 定义观察视角的参数GLdouble viewX, viewY, viewZ;GLdouble centerX, centerY, centerZ;GLdouble upX, upY, upZ;
};

方法实现

//
//  stars.cpp
//  solarsystem
//
#include "stars.h"
#include<cmath>#define PI 3.1415926535
//Star methods
Star::Star(GLfloat radius, GLfloat distance,GLfloat rotationSp, GLfloat revolutionSp,Star* parentStar){this->radius = radius;this->rotationSp = rotationSp;this->rotation_angle= this->revolution_angle = 0;this->distance = distance;for (int i = 0; i < 4; i++)this->rgbaColor[i] = 1.0f;this->parentStar = parentStar;if (revolutionSp > 0)this->revolutionSp = 360.0f / revolutionSp;elsethis->revolutionSp = 0.0f;
}
void Star::drawStar() {glEnable(GL_LINE_SMOOTH);glEnable(GL_BLEND);int n = 1440;// 保存 OpenGL 当前的矩阵环境glPushMatrix();{// 公转// 如果是行星,且距离不为0,那么 且向原点平移一个半径// 这部分用于处理卫星if (parentStar != 0 && parentStar->distance > 0) {//将绘制的图形沿 z 轴旋转 alphaglRotatef(parentStar->revolution_angle, 0, 0, 1);// x 轴方向上平移 distance , y,z 方向不变glTranslatef(parentStar->distance, 0.0, 0.0);}// 绘制运行轨道glBegin(GL_LINES);for(int i=0; i<n; ++i)glVertex2f(distance * cos(2 * PI * i / n),distance * sin(2 * PI * i / n));glEnd();// 绕 z 轴旋转 alphaglRotatef(revolution_angle, 0, 0, 1);// x 轴方向平移 distance, y,z 方向不变glTranslatef(distance, 0.0, 0.0);// 自转glRotatef(rotation_angle, 0, 0, 1);// 绘制行星颜色glColor3f(rgbaColor[0], rgbaColor[1], rgbaColor[2]);glutSolidSphere(radius, 40, 32);}// 恢复绘制前的矩阵环境glPopMatrix();}
void Star::update(long timeSpan) {revolution_angle += timeSpan * revolutionSp;  // 更新角度rotation_angle += rotationSp;     // 更新自转角度
}//Planet methods
Planet::Planet(GLfloat radius, GLfloat distance,GLfloat rotationSp,  GLfloat revolutionSp,Star* parent, GLfloat rgbColor[3]) :
Star(radius, distance, rotationSp, revolutionSp, parent) {rgbaColor[0] = rgbColor[0];rgbaColor[1] = rgbColor[1];rgbaColor[2] = rgbColor[2];rgbaColor[3] = 1.0f;
}
void Planet::drawPlanet() {GLfloat mat_ambient[]  = {0.0f, 0.0f, 0.5f, 1.0f};GLfloat mat_diffuse[]  = {0.0f, 0.0f, 0.5f, 1.0f};GLfloat mat_specular[] = {0.0f, 0.0f, 1.0f, 1.0f};GLfloat mat_emission[] = {rgbaColor[0], rgbaColor[1], rgbaColor[2], rgbaColor[3]};GLfloat mat_shininess  = 90.0f;glMaterialfv(GL_FRONT, GL_AMBIENT,   mat_ambient);glMaterialfv(GL_FRONT, GL_DIFFUSE,   mat_diffuse);glMaterialfv(GL_FRONT, GL_SPECULAR,  mat_specular);glMaterialfv(GL_FRONT, GL_EMISSION,  mat_emission);glMaterialf (GL_FRONT, GL_SHININESS, mat_shininess);
}//Fixed_star methods
Fixed_star::Fixed_star(GLfloat radius,GLfloat distance, GLfloat rotationSp,GLfloat revolutionSp, Star* parent,GLfloat rgbColor[3]):Planet(radius, distance, rotationSp, revolutionSp, parent, rgbColor) {;}
void Fixed_star::drawsun() {GLfloat sun_position[] = {0.0f, 0.0f, 0.0f, 1.0f};GLfloat sun_ambient[]  = {0.0f, 0.0f, 0.0f, 1.0f};GLfloat sun_diffuse[]  = {1.0f, 1.0f, 1.0f, 1.0f};GLfloat sun_specular[] = {1.0f, 1.0f, 1.0f, 1.0f};glLightfv(GL_LIGHT0, GL_POSITION, sun_position); // 指定零号光源的位置glLightfv(GL_LIGHT0, GL_AMBIENT,  sun_ambient);  // 表示各种光线照射到该材质上,经过很多次反射后追踪遗留在环境中的光线强度glLightfv(GL_LIGHT0, GL_DIFFUSE,  sun_diffuse);  // 漫反射后的光照强度glLightfv(GL_LIGHT0, GL_SPECULAR, sun_specular); // 镜面反射后的光照强度}

solarsystem.cpp上面就有了,这里不做详说
主文件

//
//main.cpp
//solarsystem
//
#include <GL/glut.h>//glut基本头文件
#include "solarsystem.h"
//创建图形窗口的基本宏
#define WINDOW_X_POS 50
#define WINDOW_Y_POS 50
#define WIDTH 700
#define HEIGHT 700SolarSystem solarsystem;
//用于注册glut的回调
void onDisplay(void) {solarsystem.onDisplay();}
void onUpdate(void) {solarsystem.onUpdate();}
void onKeyboard(unsigned char key, int x, int y) {solarsystem.onKeyboard(key, x, y);}int main(int argc, char*  argv[]) {glutInit(&argc, argv);//对GLUT初始化,并处理所有命令行参数glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);//指定使用RGBA模式//另外指定了双缓冲窗口glutInitWindowPosition(WINDOW_X_POS, WINDOW_Y_POS);//指定窗口创建时左上角位于屏幕的位置glutCreateWindow("SolarSystem");//指定创建的窗口标题为SolarSystemglutDisplayFunc(onDisplay);   //回调函数,当GLUT确定窗口内容需要更新时                  //指定函数onDisplay就会被执行glutIdleFunc(onUpdate);     //指定函数onUpdate                              //当事件循环处于空闲,执行此函数glutKeyboardFunc(onKeyboard);   //将键盘上的键与函数相关联,按键被按下或者释放,函数调用glutMainLoop();                                  return 0;
}

GLUT使用の太阳系天体绘制相关推荐

  1. OpenGL(glut)模拟太阳系:太阳,地球,月球,火星

    GitHub项目地址OpenGL(glut)模拟太阳系:太阳,地球,月球,火星 核心代码如下: // orgin.cpp : 此文件包含 "main" 函数.程序执行将在此处开始并 ...

  2. 基于C++和OpenGL (GLUT) 实现太阳系行星系统

    基于C++和OpenGL (GLUT) 实现太阳系行星系统 效果图: 分析与设计 OpenGL 包含了很多渲染函数,但是他们的设计目的是独立于任何窗口系统或操作系统的.因此,它自身并没有包含创建打开窗 ...

  3. 考粒子静态能源公式、太阳系天体运动原理...中国银行笔试题刷屏,网友:这是在招总行行长?...

    转载于 每日经济新闻 9月开始,校园招聘如火如荼的进行着.9月26日,"中国银行笔试"这一话题登上微博热搜.这条热搜下,不少考生吐槽,"怀疑自己在考中科院".中 ...

  4. OPENGL学习(三)GLUT二维图像绘制

    文章目录 1.Opengl的Hello world 2.初始化(调整试图) 3.增加Reshape函数 3.事件 4.动画 1.Opengl的Hello world 最基础的程序,画了个三角形,请确保 ...

  5. c语言glut打正方形,OpenGL绘制正方形并用键盘移动

    准备工作: 在OpenGL中,基本图形元素如点.线.折线和多边形都是由一个或多个顶点所定义.OpenGL的7种基本图元: WeChat77732bbab74bef94d9f34e151bce8b6e. ...

  6. WxGL应用实例:绘制高精度的3D太阳系模型

    文章目录 1 坐标系的选择 1.1 黄道坐标系 1.2 三维空间直角坐标系 2 使用JPL星历表计算轨道 2.1 日期时间 2.2 特定时刻天体的位置 2.3 天体运行轨道 3 太阳系模型 3. 1 ...

  7. openGL学习之glut库的使用

    对于初学者来说,做小项目用的glut已经很足够了,它的定义是用于简单程序和初学者学习使用的简单的.容易的.小的. vs2015创建空项目: 然后在项目中添加glut中include路径: 先创建一个调 ...

  8. 盖亚绘制的星图里,藏着银河系不为人知的混乱过去

    来源:Nature自然科研 来自盖亚探测器的最新数据从根本上改变了我们对银河系演化的认知. 去年4月的一天,Amina Helmi在前往荷兰北部上班的路上起了一阵鸡皮疙瘩,并不是因为天气冷,而是因为一 ...

  9. 恒星星空图绘制(一)——参考系

    绘制一个漂亮的星空图是一件很酷的事情,例如手机版的Star Walk软件可以指定实时观察星空,电脑版的stellarium可以准确计算天体位置,绘制星空图.但想要动手实践却没那么容易,因为涉及较多的天 ...

最新文章

  1. LeetCode简单题之用栈操作构建数组
  2. 第二章:3、BP神经网络
  3. leetcode 1044. Longest Duplicate Substring | 1044. 最长重复子串(Rabin Karp算法)
  4. html5监听动画结束,js判断css动画是否完成 animation,transition
  5. Microsoft REST API指南
  6. 3分钟简单了解 prototype 和 __proto__
  7. kali 无法使用ifconfig等常用命令
  8. virtio+ovs转发原理和性能分析
  9. qt电容触摸屏实现长按_电阻屏和电容屏有什么区别?究竟谁更胜一筹?
  10. sql查询将字段值转换成汉字
  11. 英语知识点整理day03
  12. 通过Element开发基础增删改查页面——Vue项目实战(三)
  13. matlab基于傅立叶变换的时域或频域算法计算多普勒频移,展示代码
  14. freeswitch + dbl 提示403
  15. 解决网络丢包问题及故障判断方法
  16. 《开源之迷》有哪些迷?怎么解?
  17. Linux测试工具httpd-tools
  18. oracle分段时间统计总数,oracle中根据年份统计每月的总数?解决思路
  19. 字符串的原样输入输出python_Python字符串输入输出的详细介绍
  20. Python 的内建函数

热门文章

  1. IOS中触摸事件学习
  2. 贝佐斯:所有努力,都应集中在一点上
  3. 根据身份证号码提取出性别和年龄
  4. 华为OD机试 - 新员工座位安排系统(Python) | 机试题+算法思路+考点+代码解析 【2023】
  5. Python:视频拆分成一帧一帧的图片
  6. 为什么我的Windows 10家庭版具有远程桌面和BitLocker?
  7. 太原住宅小区型分户计费节能管理系统TKD-CAS 电力载波技术 节电效率高-节能环保
  8. 蛋疼的OneNote同步问题终于找到解决方案了
  9. 理解和创建GANs|使用PyTorch来做深度学习
  10. Herd Sums(hdu 2715)