计算机图形学之机器人
计算机图形学之机器人
效果图如下
话不多说,
代码附上,
仅供参考
#include"stdafx.h"
#include <gl/glut.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#define PI 3.14159
static int shoulder1 = 0;
static int shoulder2 = 0;
static int hand=0;
static int turn1=0;
static int tag=0;
int inner=10,outer=80;
int d1=0.5,d2=0.5;//手中物品大小
static int turn=0 ;//转弯
static float forward=0;//前进
static float elbow = 0 ,z=0;
int w;
int h;
float x2=0;//视线
float y2=0;//视线
float z2=10;//视线
float atx=0,aty=0,atz=0; //at point initial position
float angle=0; //for angle between view-line and z axis
float r=170; //for distance between eye and at
float step=r/10; //for forward and backword step;GLfloat vertices[][3]={{1.0,-1.0,0},{1.0,1.0,0},{-1.0,1.0,0},{-1.0,-1.0,0}};
GLfloat colors[][3]={{1.0,0.0,0.0},{0.0,1.0,1.0},{1.0,1.0,0.0},{0.0,1.0,0.0},{0.0,0.0,1.0},{1.0,0.0,1.0},{0.0,1.0,1.0},{1.0,1.0,1.0}};int font=(int)GLUT_BITMAP_8_BY_13;
char s[30];
int frame,timeOwn,timebase=0;static GLfloat xRot = 0.0f;
static GLfloat yRot = 0.0f;
static GLfloat zRot = 0.0f;
//是否停止转动
bool IsStop=false;
//光照 使用光源
GLfloat lightPos[] = { 1.0f, 0.0f, -1.0f, 0.0f };
GLfloat specular[] = { 1.0f, 1.0f, 1.0f, -1.0f};//反射光
GLfloat specref[] = { 0.75f, 0.75f, 0.75f, 1.0f };//模拟太阳光照射形成光照效果
GLfloat ambientLight[] = { 1.0f, 0.7f, 0.5f, 1.0f};//环绕光
GLfloat spotDir[] = { 0.0f, 0.0f, 1.0f };
GLboolean bEdgeFlag = true;void showText(void);
void resetPerspectiveProjection() ;
void setOrthographicProjection() ;
void Something();
void renderBitmapString(float x, float y, void *font,char *string); //设置背景void SetupRC(void)
{
glEnable(GL_CULL_FACE);//只渲染正面
glEnable(GL_LIGHTING);//开启光照
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambientLight);//设置全局环境光为白光
glLightfv(GL_LIGHT0,GL_DIFFUSE,ambientLight);//光源中的散射光强度
glLightfv(GL_LIGHT0,GL_SPECULAR,specular); //光源中的镜面反射光强度
glLightfv(GL_LIGHT0,GL_POSITION,lightPos);//指定光源位置glLightf(GL_LIGHT0,GL_SPOT_CUTOFF,30.0f);//指定光源的最大散布角
glLightf(GL_LIGHT0,GL_SPOT_EXPONENT,20.0f);//指定聚焦光源指数。
glEnable(GL_LIGHT0);//开启GL_LIGHT0光源
glEnable(GL_COLOR_MATERIAL);//启用函数
glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);//可以用颜色来贴物体。如果没有这行代码,纹理将始终保持原来的颜色,glMaterialfv(GL_FRONT, GL_SPECULAR,specref); // 设置多边形正面的镜面反射属性
glMateriali(GL_FRONT, GL_SHININESS,8);// 指定镜面指数
glClearColor(0, 0, 0, 1 );//设置背景色
} void display(void)
{ glClear(GL_COLOR_BUFFER_BIT);//把窗口清除为当前颜色glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);glLoadIdentity();//重置当前指定的矩阵为单位矩阵gluLookAt(x2,y2,z2,0,0,0,0,1,z2-10);//定义一个视图矩阵,并与当前矩阵相乘glShadeModel(GL_SMOOTH);//控制opengl中绘制指定两点间其他点颜色的过渡模式//定义机器人开始旋转if (IsStop==false){turn = (turn - 5) % 360; if (forward<2){turn1=turn; forward = forward -0.04*sin((GLfloat)turn1/360*3.14*2); z=z-0.05*cos((GLfloat)turn1/360*3.14*2); if(tag==0){ shoulder1 = (shoulder1 + 1); shoulder2 = (shoulder2 - 1); if(shoulder1>=0){elbow=elbow-1.2;} else{elbow=elbow+1.2;} } else { shoulder1 = (shoulder1 - 1); shoulder2 = (shoulder2 + 1); if(shoulder1>=0){elbow=elbow+1.25;} else{elbow=elbow-1.2;} } if(shoulder1>30) {tag=1;} if(shoulder1<-30){tag=0;} }else {turn1=turn; forward = forward +0.04*sin((GLfloat)turn1/360*3.14*2); z=z+0.05*cos((GLfloat)turn1/360*3.14*2); if(tag==0){ shoulder1 = (shoulder1 - 1); shoulder2 = (shoulder2 + 1); } else { shoulder1 = (shoulder1 + 1); shoulder2 = (shoulder2 - 1); } if(shoulder1>30){ tag=0; } if(shoulder1<-30){ tag=1; } }}//背景变色网格图绘制 glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);for (int i=-8;i<8;i=i+1.0) {glPushMatrix(); glBegin(GL_LINE_STRIP);glColor3ub(255,0,0);glVertex3f(8.0f, i, 12.0f);glColor3ub(0,(i+8)*17,-(i+8)*17);glVertex3f(8.0f, i, -8.0f);glColor3ub(255,(i+8)*17,0);glVertex3f(-8.0f, i, -8.0f);glColor3ub(0,0,255);glVertex3f(-8.0f, i, 12.0f);glEnd();glPopMatrix();} for (int i=-8;i<8;i=i+1.0) {
glPushMatrix(); glBegin(GL_LINE_STRIP);glColor3ub(100,10*i,100);glVertex3f(i,8.0f,12.0f);glColor3ub(255-(i+8)*17,255,0);glVertex3f( i,8.0f, -8.0f);glColor3ub(255-(i+8)*17,0,(i+8)*17);glVertex3f(i,-8.0f, -8.0f);glColor3ub(123,15*i,i);glVertex3f( i,-8.0f, 12.0f);glEnd();
glPopMatrix();
}
//变色圆环for(int i=20;i<100;i=i+2){glPushMatrix(); glTranslatef(0.0,0.0,-i); glRotatef ((GLfloat) shoulder2, 1.0, 0.0, 1.0); glColor3ub((i-10)*2.83,(GLfloat) shoulder2*10,255-(i-10)*2.83);glutWireTorus(0.1,(50+i)/10,50,50);glPopMatrix(); }
//变色正方形for(int i=11;i<100;i++){
glPushMatrix(); glTranslatef(0.0,0.0,i); glRotatef ((GLfloat) shoulder2, 0, 0.0, 1.0); glBegin(GL_POLYGON);glColor3fv(colors[0]); glVertex3fv(vertices[0]);glColor3fv(colors[1]); glVertex3fv(vertices[1]);glColor3fv(colors[2]); glVertex3fv(vertices[2]);glColor3fv(colors[3]); glVertex3fv(vertices[3]);glEnd();
glPopMatrix(); }glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);//机器人运动glPushMatrix(); glTranslatef (forward,0.0,z); //前进 glRotatef ((GLfloat) turn, 0.0, 1.0, 0.0); Something();glTranslatef (0.375,0.0, 0.0);//提起右大腿glRotatef ((GLfloat) shoulder2, 1.0, 0.0, 0.0); glTranslatef (0,0.0, 0.0);//提起左大腿glRotatef ((GLfloat) shoulder2, 1.0, 0.0, 0.0); glPushMatrix();glRotatef(yRot, 0.0f, 1.0f, 0.0f);glRotatef(xRot, 1.0f, 0.0f, 0.0f);glLightfv(GL_LIGHT0,GL_POSITION,lightPos);glLightfv(GL_LIGHT0,GL_SPOT_DIRECTION,spotDir);//画一个光源glTranslatef(lightPos[0],lightPos[1],lightPos[2]);glTranslatef(0,4,0);glPushAttrib(GL_LIGHTING_BIT);//glDisable(GL_LIGHTING);glColor3ub(255-yRot/360*255,xRot/360*255,xRot/360*255);glutWireSphere(xRot/30,30,30);glPopAttrib();glPopMatrix();glTranslatef (0.0, -0.5, 0.0); glColor3f(0.8,1.0,0.2); glPushMatrix();glScalef (0.5, 1.0, 0.5);glutSolidCube(1.0); glPopMatrix(); glTranslatef (0.0, -0.5, 0.0);//提起右小腿 glRotatef ((GLfloat) elbow, 1.0, 0.0, 0.0); glTranslatef (0.0, -0.5, 0.0); glColor3f(0.5,0.1,0.8); glPushMatrix(); glScalef (0.5, 1.0, 0.5); glutSolidCube(1.0); glPopMatrix(); glTranslatef (0.0, -0.5, -0.1);//右脚 glColor3f(0.5,0.2,1.0); glPushMatrix(); glScalef (0.5, 0.1, 0.7); glutSolidCube(1.0); glPopMatrix(); glPopMatrix (); glPushMatrix(); glTranslatef (forward,0.0,z); glRotatef ((GLfloat) turn, 0.0, 1.0, 0.0); glTranslatef (-0.375, 0.0, 0.0);//左大腿 glRotatef ((GLfloat) shoulder1, 1.0, 0.0, 0.0); glTranslatef (0.0, -0.5, 0.0); glColor3f(0.8,1.0,0.2); glPushMatrix(); glScalef (0.5, 1.0, 0.5); glutSolidCube(1.0); glPopMatrix(); glTranslatef (0.0, -0.5, 0.0);//左小腿 glRotatef ((GLfloat) elbow, 1.0, 0.0, 0.0); glTranslatef (0.0, -0.5, 0.0); glColor3f(0.5,0.1,0.8); glPushMatrix(); glScalef (0.5, 1.0, 0.5);//缩放四方体glutSolidCube(1.0);//画四方体 glPopMatrix(); glTranslatef (0.0, -0.5, -0.1);//左脚 glColor3f(0.5,0.2,1.0); glPushMatrix(); glScalef (0.5, 0.1, 0.7); glutSolidCube(1.0); glPopMatrix(); glPopMatrix(); glPushMatrix(); glTranslatef (forward,0.0,z); glRotatef ((GLfloat) turn, 0.0, 1.0, 0.0); glTranslatef (0.0, 1.0, 0.0);//躯干 glColor3f(0.5,0.5,1.0); glPushMatrix(); glScalef (1.4, 2.0, 0.5); glutSolidCube(1.0); glPopMatrix(); glTranslatef (0.0, 1.25, 0.0);//头 glColor3f(0,1,0); glPushMatrix(); glScalef (0.5, 0.5, 0.5); glutSolidCube(1.5); glPopMatrix(); glTranslatef (0.2, 0.2, 0);//眼睛 glColor3f(0,0,0); glPushMatrix(); glScalef (0.5, 0.5, 0.5); glutSolidSphere(0.2,20,20); glPopMatrix(); glTranslatef (-0.4,0,0);//眼睛 glColor3f(0,0,0); glPushMatrix(); glScalef (0.5, 0.5, 0.5); glutSolidSphere(0.2,20,20); glPopMatrix(); glTranslatef (0.2,-0.3,0);//嘴glColor3f(1,0,0); glPushMatrix(); // glRotatef ((GLfloat) turn, 1.0, 0, 0);glScalef (0.8, 0.5, 0.5); glutWireTorus(0.1f,0.2f,50,50);glPopMatrix(); glTranslatef (0,0.6,0);//帽子glRotatef (-90, 1.0, 0, 0); glPushMatrix(); glScalef (0.5, 0.5, 0.5); glColor3f(1,1,0); glutWireCone(1.5f,5.0f,15,15);glColor3f(1,1,0); glutWireTorus(0.5f,1.8,15,15);glTranslatef (0,0,5);glColor3f(1,1,0);glutSolidSphere(0.5,5,5);glTranslatef (2,0,-5);glColor3f(0,1,1); glutWireCone(0.5,2,5,5);glTranslatef (-4,0,0);glColor3f(0,1,1); glutWireCone(0.5,2,5,5);glPopMatrix(); glPopMatrix(); glPushMatrix(); glTranslatef (forward,0.0,z); glRotatef ((GLfloat) turn, 0.0, 1.0, 0.0); glTranslatef (0.85, 1.75, 0.0);//右臂 glRotatef ((GLfloat) shoulder1, 1.0, 0.0, 0.0); glTranslatef (0.0, -0.5, 0.0); glColor3f(1.0,0.0,1.0); glPushMatrix(); glScalef (0.3, 1.3, 0.4); glutSolidCube(1.0); glPushMatrix();glTranslatef (0, -0.8,0); glScalef (2,d1,d2);glColor3f(1-(d1+d2)/20,d1/20,d2/20); glutWireSphere(0.3,21,21);glPopMatrix();glPopMatrix(); glPopMatrix(); glPushMatrix(); glTranslatef (forward,0.0,z); glRotatef ((GLfloat) turn, 0.0, 1.0, 0.0); glTranslatef (-0.85, 1.75, 0.0);//左臂 glRotatef ((GLfloat) shoulder2, 1.0, 0.0, 0.0); glTranslatef (0.0, -0.5, 0.0); glColor3f(1.0,0.0,1.0); glPushMatrix(); glScalef (0.3, 1.3, 0.4); glutSolidCube(1.0); glPopMatrix(); glPopMatrix(); glutSwapBuffers();
}
//随便画一些小东西
void Something()
{glPushMatrix();//位置的保存,进站
glRotatef (xRot, 0.0, 0.0, 1.0);
glRotatef (yRot, 1.0, 0.0, 0);
glTranslatef(4,-2,0);//设置位置glColor3f(0.6,1-xRot/360,yRot/360);
glutWireSphere(0.6f,10,10);
glTranslatef(-8,0,0);//设置位置glColor3f(yRot/360,0.6,xRot/360);
glutWireSphere(0.6f,10,10);
glTranslatef(4,0,4);//设置位置glColor3f(xRot/360,yRot/360,1);
glutWireSphere(0.6f,10,10);
glTranslatef(0,0,-8);//设置位置glColor3f(1,yRot/360,xRot/360);
glutWireSphere(0.6f,10,10);glPopMatrix();//位置的恢复,出站
}
void renderBitmapString(float x, float y, void *font,char *string)
{ char *c; glRasterPos2f(x, y); for (c=string; *c != '\0'; c++) { glutBitmapCharacter(font, *c); }
} void reshape (int w1, int h1)
{ w=w1; h=h1; glViewport (0, 0, (GLsizei) w1, (GLsizei) h1); glMatrixMode (GL_PROJECTION); glLoadIdentity (); gluPerspective(65.0, (GLfloat) w1/(GLfloat) h1, 1.0, 50.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef (0.0, 0.0, -8.0);
} void keyboard (unsigned char key, int x, int y)
{ switch (key) { case 'z':// 变长d1++; glutPostRedisplay();break;case 'x':// 变宽d2++;glutPostRedisplay();break;case 'c':// 变短d1--; if(d1<0) d1=0;case 'v':// 变窄d2--;if(d2<0) d2=0;glutPostRedisplay();break;case 'u'://眼睛前移z2=z2+0.3;glutPostRedisplay();break;case'j'://眼睛后移z2=z2-0.3;glutPostRedisplay();break;case 'h':// 视线左移x2=x2-0.3;IsStop=false;glutPostRedisplay();break;case 'k':// 视线右移x2=x2+0.3;IsStop=false;glutPostRedisplay();break;case 'n':// 视线上移y2=y2+0.3;IsStop=false;glutPostRedisplay();break;case 'm':// 视线下移y2=y2-0.3;IsStop=false;glutPostRedisplay();break;case 'w': //向后走 turn1=turn; forward = forward -0.04*sin((GLfloat)turn1/360*3.14*2); z=z-0.05*cos((GLfloat)turn1/360*3.14*2); if(tag==0){ shoulder1 = (shoulder1 + 1); shoulder2 = (shoulder2 - 1); if(shoulder1>=0){elbow=elbow-1.2;} else{elbow=elbow+1.2;} } else { shoulder1 = (shoulder1 - 1); shoulder2 = (shoulder2 + 1); if(shoulder1>=0){elbow=elbow+1.25;} else{elbow=elbow-1.2;} } if(shoulder1>30){ tag=1; } if(shoulder1<-30){ tag=0; }
IsStop=true;glutPostRedisplay(); break; case 's': //向前走 turn1=turn; forward = forward +0.04*sin((GLfloat)turn1/360*3.14*2); z=z+0.05*cos((GLfloat)turn1/360*3.14*2); if(tag==0){ shoulder1 = (shoulder1 - 1); shoulder2 = (shoulder2 + 1); } else { shoulder1 = (shoulder1 + 1); shoulder2 = (shoulder2 - 1); } if(shoulder1>30){ tag=0; } if(shoulder1<-30){ tag=1; }
IsStop=true;glutPostRedisplay(); break; case 'd'://右转turn = (turn - 5) % 360; glutPostRedisplay();
IsStop=true;break; case 'a'://左转turn = (turn + 5) % 360; glutPostRedisplay();
IsStop=true;break; case 'l': shoulder1 = (shoulder1 + 2) % 360; shoulder2 = (shoulder2 - 4) % 360; glutPostRedisplay();
IsStop=true;break; case 'L': shoulder1 = (shoulder1 - 5) % 360; shoulder2 = (shoulder2 + 10) % 360; glutPostRedisplay();
IsStop=true;break; case 'P':IsStop=false;break;case 'p':IsStop=false;break;case 'e': exit(0); break; default: break; }
}
//设置视觉角度
void setOrthographicProjection()
{ // glMatrixMode(GL_PROJECTION); glMatrixMode(GL_MODELVIEW);//glMatrixMode(GL_TEXTURE); glPushMatrix(); glLoadIdentity(); gluOrtho2D(0, w, 0, h); glScalef(1, -1, 1); glTranslatef(0, -h, 0); glMatrixMode(GL_MODELVIEW);
}
void resetPerspectiveProjection()
{ glMatrixMode(GL_PROJECTION); glPopMatrix(); glMatrixMode(GL_MODELVIEW);
}
//光源的坐标变化
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;
glutPostRedisplay();
}
//鼠标事件
void Mouse(int button,int state, int x, int y)
{ if (state == GLUT_DOWN)//鼠标按下
{
if (x<0)
{
//向左旋转
yRot -= 50.0f;
}else if (x>=0)
{
//向右旋转
yRot += 50.0f;
}else if (y>=0)
{
//向上旋转
xRot-= 50.0f;
}else if (y<0)
{
//向下旋转
xRot += 50.0f;
}
if(xRot> 356.0f)
xRot = 0.0f;
if(xRot < -1.0f)
xRot = 355.0f;
if(yRot > 356.0f)
yRot = 0.0f;
if(yRot < -1.0f)
yRot = 355.0f;
glutPostRedisplay();
}
}
//时间函数,定时刷新
void TimerFunction(int value)
{
display();glutPostRedisplay();glutTimerFunc(50,TimerFunction, 1);
}
//主函数
int main(int argc, char** argv)
{ glutInit(&argc, argv); glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB); glutInitWindowSize (800, 600); glutInitWindowPosition (100, 100); glutCreateWindow("机器人w:前行s:后退a:左转d:右转 武器z:变长x:变宽c:变短v:变窄 视线u:后移j:前移h:左移k:右移n:上移m:下移 p:自动旋转 l:手脚旋转 up:球体由大变小 down:球体由小变大 left:四球左旋转变色 right:四球右旋转变色鼠标:点击一次,四球变换颜色与位置");printf("机器人w:前行s:后退a:左转d:右转\n");printf("武器z:变长x:变宽c:变短v:变窄\n");printf("视线u:后移j:前移h:左移k:右移n:上移m:下移\n");printf("p:自动旋转 l:手脚旋转 \n");printf(" up:球体由大变小 down:球体由小变大 left:四球左旋转变色 right:四球右旋转变色\n鼠标:点击一次,四球变换颜色与位置\nw");SetupRC(); glutDisplayFunc(display); glutReshapeFunc(reshape); glutKeyboardFunc(keyboard);glutSpecialFunc(SpecialKeys);glutMouseFunc(Mouse);glutTimerFunc(20, TimerFunction, 1);//glutIdleFunc(display); glutMainLoop(); return 0;
}
计算机图形学之机器人相关推荐
- 计算机图形学:机器人的画法与填充
详情请见 http://cuiqingcai.com/1597.html http://cuiqingcai.com/1640.html #include<windows.h> #in ...
- 模式识别,计算机视觉,计算机图形学,智能控制,信号处理,语音识别,知识处理,机器学习,数据挖掘领域区别
1.人工智能:给机器赋予人类的智能,让机器能够像人类那样独立思考.当然,目前的人工智能没有发展到很高级的程度,这种智能与人类的大脑相比还是处于非常幼稚的阶段,但目前我们可以让计算机掌握一定的知识,更加 ...
- 简述计算机图形的图形应用主要有哪些,5计算机图形学考试简答题复习.doc
5计算机图形学考试简答题复习 计算机图形学考试简答题复习 1.简述计算机动画的概念,它经历了哪几个阶段的发展?(2分) 计算机动画是指采用图形与图像的处理技术,借助于编程或动画制作软件生成一系列的景物 ...
- ppt 胡事民 计算机图形学_从相机标定到SLAM,极简三维视觉六小时课程视频(附PPT)...
谭平教授是加拿大西蒙弗雷泽大学副教授.不久前他与浙江大学合作了一系列三维视觉课程,内容涵盖相机标定.多视几何等多个方面.机器之心简要介绍了该系列课程,希望能够对读者学习三维视觉技术有所帮助. 课程内容 ...
- 图灵奖公布!计算机图形学先驱 Hanrahan 和 Catmull 获奖,祝贺两位好莱坞 3D 动画大片技术元老...
作者 | 学术君 来源 | 学术头条(ID:SciTouTiao) 封图 | 视觉中国 18日,ACM(国际计算机协会)宣布,授予 Patrick M. Hanrahan 和 Edwin E. Cat ...
- 计算机图形学中需要掌握的数学基础知识有哪些?
计算机图形学中使用了大量数学知识,尤其是矩阵和线性代数.虽然我们倾向于认为3D图形编程是紧跟最新技术的领域之一(它在很多方面确实是),但它用到的很多技术实际上可以追溯到上百年前,其中一些甚至是由文艺复 ...
- 计算机图形学当前研究热点和发展方向,微软亚洲研究院网络图形组深入解释了图形学的现状、发展和未来...
计算机图形学是支持各种影视特效.三维动画影片.计算机游戏.虚拟现实以及大家手机上各种照片视频美化特效背后的技术基础,在本文中,微软亚洲研究院网络图形组深入解释了图形学的现状.发展和未来. 谈及&quo ...
- 什么是计算机图形学?(转自中国科学技术大学-刘利刚)
(如需交流,请关注公众号:神马观止) [注] 由于时常有本科学生来向笔者询问计算机图形学是做什么的,为了使得学生能够快速了解计算机图形学,有利于他们在选择研究生方向做出适合自己的选择,特撰写此文.本文 ...
- 计算机图形物理知识,计算机图形学:虚拟和现实世界的融合
谈及"计算机图形学",可能很多人会觉得很有距离感,或者和计算机视觉.图像处理等学科混淆.但是,如果告诉大家图形学技术是支持各种影视特效.三维动画影片.计算机游戏.虚拟现实以及大家手 ...
最新文章
- Conv1D和Conv2D的区别
- 软工文档”注意注意“事项
- 操作系统四: 内存连续分配
- (转载)hadoop2.2.0集群的HA高可靠的最简单配置
- 贝叶斯反垃圾邮件技术
- 搜索引擎ElasticSearchV5.4.2系列一之ES介绍
- 算法题目——整数划分(HRBUST-2004)
- 动态定时任务数据库获取方式
- 配对碱基链(信息学奥赛一本通-T1135)
- dubbo 与 zookeeper 的关系
- 现实世界的 Windows Azure:Davide Bedin讲述aKite零售管理解决方案
- java解析bt协议详解_bt协议详解 基础篇(下)
- MarkDown思维导图
- 升级笔记本CPU的常见知识汇总
- Spans,一个强大的概念
- 如何让电脑运行速度变快
- 华为OD机试 - 找数字、找等值元素(Java JS Python)
- 射频开关主要性能指标
- 常用的四种sql增删改查
- expect使用技巧