(完整版)基于OpenGL的飞机3D实时仿真_程序代码

(完整版)基于OpenGL的飞机3D实时仿真_程序代码
(完整版)基于OpenGL的飞机3D实时仿真_程序代码

#include "total.h"

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define GLUT_DISABLE_ATEXIT_HACK

#define FILE_NAME "feiji.3DS" //指定对应的FILE NAME

#define SCREEN_WIDTH 800

#define SCREEN_HEIGHT 600

#define SCREEN_DEPTH 16

#define MAX_TEXTURES 100 // 最大的纹理数目

#define PRIMARY 0x4D4D// 基本块(Primary Chunk),位于文件的开始// 主块(Main Chunks)

#define OBJECTINFO 0x3D3D // 网格对象的版本号

#define VERSION 0x0002 // .3ds文件的版本

#define EDITKEYFRAME 0xB000 // 所有关键帧信息的头部

// 对象的次级定义(包括对象的材质和对象)

#define MATERIAL 0xAFFF // 保存纹理信息

#define OBJECT 0x4000 // 保存对象的面、顶点等信息// 材质的次级定义

#define MATNAME 0xA000 // 保存材质名称

#define MATDIFFUSE 0xA020 // 对象/材质的颜色

#define MATMAP 0xA200 // 新材质的头部

#define MATMAPFILE 0xA300 // 保存纹理的文件名

#define OBJECT_MESH 0x4100 // 新的网格对象

// OBJECT_MESH的次级定义

#define OBJECT_VERTICES 0x4110 // 对象顶点

#define OBJECT_FACES 0x4120 // 对象的面

#define OBJECT_MATERIAL 0x4130 // 对象的材质

#define OBJECT_UV 0x4140 // 对象的UV纹理坐标

int g_ViewMode = GL_TRIANGLES;

bool g_bLighting = true;

float g_Rotatex = 0;

float g_Rotatey = 0;

float g_Rotatez = 0;

float g_x =0;

float g_y =0;

float g_z =0;

//。。。。。。。。。。。。。。。。。。。。定义需要导入的数据

float Rotatex ;

float Rotatey ;

float Rotatez ;

float x ;

float y ;

float z ;

double gl_x; double gl_y; double gl_z; double gl_pitch; double gl_roll; double gl_yaw; double gl_wcpitch;double gl_wcroll;double gl_wcyaw;

using namespace std;

UINT g_Texture[MAX_TEXTURES] = {0};

HWND g_hWnd;

RECT g_rRect;

HDC g_hDC;

HGLRC g_hRC;

HINSTANCE g_hInstance;

HINSTANCE hInstance;

MMRESULT idtimer_Opengl;

HWND CreateMyWindow(LPSTR strWindowName, int width, int height, DWORD dwStyle, HINSTANCE hInstance);// 生成用户窗口

LRESULT CALLBACK WinProc(HWND gl_hwnd, UINT message, WPARAM wParam, LPARAM lParam);//消息响应

void Init(HWND gl_hWnd);// 初始化整个程序

void InitializeOpenGL(int width, int height);// 初始化OpenGL

bool bSetupPixelFormat(HDC hdc);// 设置像素格式

void SizeOpenGLScreen(int width, int height);// 初始化投影变换

int MainLoop();//主循环

void RenderScene(double gl_x, double gl_y, double gl_z, double gl_roll, double gl_pitch, double gl_yaw) ;

void DeInit();// 释放程序占用的内存空间

void myDisplaycube();//绘制外框架

void glprintf();//输出文字

//----------------定义结构变量----------------------------------------------------------------------------- // 定义3D点的类,用于保存模型中的顶点

class CVector3

{

public:

float x, y, z;

};

// 定义2D点类,用于保存模型的UV纹理坐标

class CVector2

{

public:

float x, y;

};

// 面的结构定义

struct tFace

{

int vertIndex[3]; // 顶点索引

int coordIndex[3]; // 纹理坐标索引

};

// 材质信息结构体

struct tMaterialInfo

{

char strName[255]; // 纹理名称

char strFile[255]; // 如果存在纹理映射,则表示纹理文件名称

BYTE color[3]; // 对象的RGB颜色

int texureId; // 纹理ID

float uTile; // u 重复

float vTile; // v 重复

float uOffset; // u 纹理偏移

float vOffset; // v 纹理偏移

} ;

// 对象信息结构体

struct t3DObject

{

int numOfVerts; // 模型中顶点的数目

int numOfFaces; // 模型中面的数目

int numTexVertex; // 模型中纹理坐标的数目

int materialID; // 纹理ID

char strName[255]; // 对象的名称

CVector3 *pVerts; // 对象的顶点

CVector3 *pNormals; // 对象的法向量

CVector2 *pTexVerts; // 纹理UV坐标

tFace *pFaces; // 对象的面信息

};

// 模型信息结构体

struct t3DModel

{

int numOfObjects; // 模型中对象的数目

int numOfMaterials; // 模型中材质的数目

vector pMaterials; // 材质链表信息

vector pObject; // 模型中对象链表信息

};

struct tIndices

{

unsigned short a, b, c, bVisible;

};

// 保存块信息的结构

struct tChunk

{

unsigned short int ID; // 块的ID

unsigned int length; // 块的长度

unsigned int bytesRead; // 需要读的块数据的字节数

};

// CLoad3DS类处理所有的装入代码

class CLoad3DS

{

public://可以被该类中的函数、子类的函数、其友元函数访问,也可以由该类的对象访问

CLoad3DS(); // 初始化数据成员

// 装入3ds文件到模型结构中

bool Import3DS(t3DModel *pModel, char *strFileName);

//只能由该类中的函数、其友元函数访问,不能被任何其他访问,该类的对象也不能访问// 读一个字符串

int GetString(char *);

// 读下一个块

void ReadChunk(tChunk *);

// 读下一个块

void ProcessNextChunk(t3DModel *pModel, tChunk *);

// 读下一个对象块

void ProcessNextObjectChunk(t3DModel *pModel, t3DObject *pObject, tChunk *);

// 读下一个材质块

void ProcessNextMaterialChunk(t3DModel *pModel, tChunk *);

// 读对象颜色的RGB值

void ReadColorChunk(tMaterialInfo *pMaterial, tChunk *pChunk);

// 读对象的顶点

void ReadVertices(t3DObject *pObject, tChunk *);

// 读对象的面信息

void ReadVertexIndices(t3DObject *pObject, tChunk *);

// 读对象的纹理坐标

void ReadUVCoordinates(t3DObject *pObject, tChunk *);

// 读赋予对象的材质名称

void ReadObjectMaterial(t3DModel *pModel, t3DObject *pObject, tChunk *pPreviousChunk);

// 计算对象顶点的法向量

void ComputeNormals(t3DModel *pModel);

// 关闭文件,释放内存空间

void CleanUp();

// 文件指针

FILE *m_FilePointer;

tChunk *m_CurrentChunk;//当前块

tChunk *m_TempChunk;//下一个块

};

CLoad3DS g_Load3ds;

t3DModel g_3DModel;

//.........................程序函数............................................................................

int OpenGL_Main()//入口程序

{

gl_hWnd=CreateMyWindow("飞机动态飞行模拟", SCREEN_WIDTH, SCREEN_HEIGHT, 0, hInstance);

if(gl_hWnd == NULL) return true;

Init(gl_hWnd);// 初始化整个程序

MainLoop();

return 0;}

//创建窗口

HWND CreateMyWindow(LPSTR strWindowName, int width, int height, DWORD dwStyle, HINSTANCE hInstance)

{

HWND gl_hWnd;

WNDCLASS wndclass;/*wndclass用来保存我们的窗口类的结构。窗口类结构中保存着我们的窗口信息。

通过改变类的不同字段我们可以改变窗口的外观和行为。

每个窗口都属于一个窗口类。当您创建窗口时,您必须为窗口注册类。*/

memset(&wndclass, 0, sizeof(WNDCLASS));

wndclass.style = CS_HREDRAW | CS_VREDRAW;//设置窗口风格

wndclass.lpfnWndProc = WinProc; // WndProc处理消息其实就是键盘响应

wndclass.hInstance = hInstance; // 设置实例

wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);// 装入缺省图标要使用windows预定义的图标,这时hInstance必须设置成NULL

wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); // 装入鼠标指针

wndclass.hbrBackground = (HBRUSH) (COLOR_WINDOW+1);//设置opengl的背景色wndclass.lpszClassName = "opengl"; //只是设定一个类型名

RegisterClass(&wndclass);//注册窗口的

if(!dwStyle)

dwStyle = WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN;//拓展窗口风格的

/*WS_CLIPCHILDREN裁剪子窗口。。。就是不绘制与子窗口重合的父窗口部分子窗口间相互裁减。

当两个窗口相互重叠时,设置了WS_CLIPSIBLINGS样式的子窗口重绘时不能绘制被重叠的部分。

WS_OVERLAPPEDWINDOW可以创建一个拥有各种窗口风格的窗体,包括标题,系统菜单,边框,最小化和最大化按钮等*/

g_hInstance = hInstance;

RECT rWindow;// 取得矩形的左上角和右下角的坐标值

rWindow.left = 0; //将Left 设为0

rWindow.right = width; // 宽度

rWindow.top = 0;

rWindow.bottom = height;//高度

AdjustWindowRect( &rWindow, dwStyle, false);//该函数依据所需计算需要的窗口矩形的大小随后传递给CreateWindow函数,用于创建一个客户区所需大小的窗口。

gl_hWnd = CreateWindow("opengl", strWindowName, dwStyle, 0, 0,

rWindow.right - rWindow.left, rWindow.bottom - rWindow.top,

NULL, // 无父窗口

NULL,//无菜单

hInstance,//实例

NULL);//不向WM_CREATE传递信息

if(!gl_hWnd) return NULL ;

ShowWindow(gl_hWnd, SW_SHOWNORMAL); //该函数设置指定窗口的显示状态SW_SHOWNORMAL运行时正常大小显示

UpdateWindow(gl_hWnd);//指定客户区

SetFocus(gl_hWnd);//设置键盘焦点

return gl_hWnd;

}

LRESULT CALLBACK WinProc(HWND gl_hWnd,UINT uMsg, WPARAM wParam, LPARAM lParam)//窗口响应

{

static int cxClient,cyClient;

LONG lRet = 0;

switch (uMsg)

{

case WM_SIZE://用于控制窗口的形状变化

cxClient = LOWORD(lParam);

cyClient = HIWORD(lParam);

return 0;

case WM_CLOSE: //关闭窗口的响应

ShowWindow(gl_hWnd,SW_HIDE) ; //隐藏窗口

break;

default:

lRet = DefWindowProc (gl_hWnd, uMsg, wParam, lParam); //处理无关消息

break;

}

return lRet;

}

void Init(HWND gl_hWnd)//初始化整个窗口

{

g_hWnd = gl_hWnd;

GetClientRect(g_hWnd, &g_rRect);//该函数获取窗口客户区的坐标。

InitializeOpenGL(g_rRect.right, g_rRect.bottom);//以hWnd代表的客户区的矩形的宽和高为变量初始化opengl

g_Load3ds.Import3DS(&g_3DModel, FILE_NAME); // 将3ds文件装入到模型结构体中

glEnable(GL_LIGHT0); // 使用默认的0号灯

glEnable(GL_LIGHTING); // 使用灯光

glEnable(GL_COLOR_MA TERIAL); // 使用颜色材质

}

void InitializeOpenGL(int width, int height) // 初始化OpenGL

{

g_hDC = GetDC(g_hWnd);

if (!bSetupPixelFormat(g_hDC))

PostQuitMessage (0);

g_hRC = wglCreateContext(g_hDC); //函数建立一个适合在指定hdc上绘制的RC,RC 与DC有相同的像素格式

wglMakeCurrent(g_hDC, g_hRC);

glEnable(GL_TEXTURE_2D);//开启2D纹理贴图功能

glEnable(GL_DEPTH_TEST); //开启深度测试

SizeOpenGLScreen(width, height);

}

bool bSetupPixelFormat(HDC hdc) //设置设置像素格式

{

PIXELFORMATDESCRIPTOR pfd;

int pixelformat;

pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);

pfd.nVersion = 1;

pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;

pfd.dwLayerMask = PFD_MAIN_PLANE;

pfd.iPixelType = PFD_TYPE_RGBA;

https://www.360docs.net/doc/b811181716.html,olorBits = SCREEN_DEPTH;

pfd.cDepthBits = SCREEN_DEPTH;

pfd.cAccumBits = 0;

pfd.cStencilBits = 0;

if ( (pixelformat = ChoosePixelFormat(hdc, &pfd)) == FALSE ) //获取opengl最佳像素

{

return FALSE;

}

if (SetPixelFormat(hdc, pixelformat, &pfd) == FALSE) //设置像素格式

{

return FALSE;

}

return TRUE;

}

void SizeOpenGLScreen(int width, int height)//初始化投影变换

{

if (height==0)

{

height=1;

}

glViewport(0,0,width,height);// 设置实际图像映射的像素矩形

glMatrixMode(GL_PROJECTION);//指定当前矩阵

glLoadIdentity();//变成单位矩阵

gluPerspective(45.0f,////角度

(GLfloat)width/(GLfloat)height,//视景体的宽高比

.5f ,//沿z轴方向的两裁面之间的距离的近处

150.0f//沿z轴方向的两裁面之间的距离的远处

);//设置透视投影矩阵

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

}

int MainLoop()//主循环

{

MSG msg;

while(1)

{

if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) //该函数为一个消息检查线程消息队列,并将该消息(如果存在)放于指定的结构。

//PM_REMOVE:PeekMessage处理后,消息从队列里除掉

{

if(msg.message == WM_CLOSE)

break;

TranslateMessage(&msg); //键盘码的转化

DispatchMessage(&msg); //分发消息到回调函数,系统通过调用回调函数实现在窗体中实现对应操作

}

else

{

glprintf();//输出状态文字

gl_x=0;gl_y=0;gl_z=0;

gl_wcpitch=wc.pitch;gl_wcroll=wc.roll;gl_wcyaw=wc.yaw;

gl_pitch=gl_wcpitch;gl_roll=gl_wcroll;gl_yaw=gl_wcyaw;

RenderScene(gl_x,gl_y,gl_z,gl_roll,gl_pitch,gl_yaw);//控制飞机的姿态和观察角度并且对应的在opengl中绘制3ds模型

}

}

for(int i = 0; i < g_3DModel.numOfObjects; i++)//清空图形的相关变量

{

// 删除所有的变量

delete [] g_3DModel.pObject[i].pFaces;//对象的面

delete [] g_3DModel.pObject[i].pNormals;// 给出法向量

delete [] g_3DModel.pObject[i].pVerts; // 对象的顶点

delete [] g_3DModel.pObject[i].pTexVerts;// 纹理UV坐标

}

DeInit(); // 释放程序占用的内存空间

return(msg.wParam);

}

void DeInit()// 释放程序占用的内存空间

{

if (g_hRC)

{

wglMakeCurrent(NULL, NULL); //用于释放opengl里面的上下文环境-------------------- 渲染上下文句柄为null时才有这个功能

wglDeleteContext(g_hRC);//删除渲染内容的句柄

}

if (g_hDC)

ReleaseDC(g_hWnd, g_hDC);//函数释放设备上下文环境(DC)供其他应用程序使用

UnregisterClass("opengl", g_hInstance); //该函数注销一个窗口类,一类释放所需的内存

PostQuitMessage (0);

}

//文字显示

void glprintf()

{

char str0[100];

sprintf(str0, "%-08.3lf", wc.pitch);

char str_pitch[] = "俯仰角度:";

strcat(str_pitch, str0);

SetBkColor(g_hDC,NULL);

TextOut(g_hDC,5,5,str_pitch,strlen(str_pitch));

SetTextColor(g_hDC,RGB(0,200,0));

char str1[100];

sprintf(str1, "%-08.3lf", wc.roll);

char str_roll[] = "滚转角度:";

strcat(str_roll, str1);

SetBkColor(g_hDC,NULL);

TextOut(g_hDC,5,20,str_roll,strlen(str_roll));

SetTextColor(g_hDC,RGB(0,200,0));

char str2[100];

sprintf(str2, "%-08.3lf", wc.yaw);

char str_yaw[] = "偏航角度:";

strcat(str_yaw, str2);

SetBkColor(g_hDC,NULL);

TextOut(g_hDC,5,35,str_yaw,strlen(str_yaw));

SetTextColor(g_hDC,RGB(0,200,0));

char str3[100];

sprintf(str3, "%-08.3lf", x);

char str_x[] = "X轴位移:";

strcat(str_x, str3);

SetBkColor(g_hDC,NULL);

TextOut(g_hDC,5,60,str_x,strlen(str_x));

SetTextColor(g_hDC,RGB(0,200,0));

char str4[100];

sprintf(str4, "%-08.3lf", y);

char str_y[] = "Y轴位移:";

strcat(str_y, str4);

SetBkColor(g_hDC,NULL);

TextOut(g_hDC,5,75,str_y,strlen(str_y));

SetTextColor(g_hDC,RGB(0,200,0));

char str5[100];

sprintf(str5, "%-08.3lf", z);

char str_z[] = "Z轴位移:";

strcat(str_z, str5);

SetBkColor(g_hDC,NULL);

TextOut(g_hDC,5,90,str_z,strlen(str_z));

SetTextColor(g_hDC,RGB(0,200,0));

}

void RenderScene(double gl_x, double gl_y, double gl_z, double gl_roll, double gl_pitch, double gl_yaw)

{

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //清除颜色缓冲以及深度缓冲

glLoadIdentity();//设置为单位矩阵

gluLookAt(1.2,1.2,-1.2, 0, 0, 0, -1,-1,-1);//设置观察坐标,视点坐标,视线朝向

glPushMatrix(); myDisplaycube();glPopMatrix();//绘制外部正方体框架

g_x=gl_x; g_y=gl_y; g_z=gl_z;

g_Rotatex=gl_roll;g_Rotatey= gl_pitch;g_Rotatez=gl_yaw;

glTranslatef(g_x,g_y,g_z);//机翼是y方向从机头前方看右侧有正,机身前后方向是x机头方向为正方向,机身垂直是z向下为正方向

glRotatef(g_Rotatex,1.0f, 0, 0);//是飞机roll的角度

glRotatef(g_Rotatey, 0, 1.0f, 0);//pitch的角度

glRotatef(g_Rotatez, 0, 0,1.0f);//yaw的角度

glPushMatrix(); //将当前变换矩阵(单位阵)压入堆栈

glPopMatrix();

// 遍历模型中所有的对象(将显示列表里的信息显示出来)

for(int i = 0; i < g_3DModel.numOfObjects; i++)

{

// 如果模型中没有对应的对象,则退出

if(g_3DModel.pObject.size() <= 0) break;

// 获得当前显示的对象

t3DObject *pObject = &g_3DModel.pObject[i];

glBegin(g_ViewMode);// 开始以g_ViewMode模式绘制

// 遍历所有的面

for(int j = 0; j < pObject->numOfFaces; j++)

{

// 遍历三角形的所有点

for(int whichVertex = 0; whichVertex < 3; whichVertex++)

{

// 获得面对每个点的索引

int index = pObject->pFaces[j].vertIndex[whichVertex];

// 给出法向量

glNormal3f(pObject->pNormals[ index ].x, pObject->pNormals[ index ].y, pObject->pNormals[ index ].z);

glVertex3f(pObject->pVerts[ index ].x, pObject->pVerts[ index ].y, pObject->pVerts[ index ].z);

}

}

glEnd(); // 绘制结束

}

Sleep(60);//为了降低opengl的cpu占用率,降低刷新频率

SwapBuffers(g_hDC); // 交换缓冲区

}

void myDisplaycube()//绘制矩形边框

{

glColor3f(1.0f, 1.0f, 1.0f);

static const GLfloat vertex_list[][3] = {

-0.41f, -0.39f, -0.52f,

0.41f, -0.39f, -0.52f,

-0.41f, 0.39f, -0.52f,

0.41f, 0.39f, -0.52f,

-0.41f, -0.39f, 0.52f,

0.41f, -0.39f, 0.52f,

-0.41f, 0.39f, 0.52f,

0.41f, 0.39f, 0.52f,};

glBegin(GL_LINE_LOOP);

glVertex3fv(vertex_list[0]);

glVertex3fv(vertex_list[2]);

glVertex3fv(vertex_list[3]);

glVertex3fv(vertex_list[1]);

glEnd();

glBegin(GL_LINE_LOOP);

glVertex3fv(vertex_list[0]);

glVertex3fv(vertex_list[4]);

glVertex3fv(vertex_list[5]);

glVertex3fv(vertex_list[1]);

glEnd();

glBegin(GL_LINE_LOOP);

glVertex3fv(vertex_list[0]);

glVertex3fv(vertex_list[4]);

glVertex3fv(vertex_list[6]);

glVertex3fv(vertex_list[2]);

glEnd();

glBegin(GL_LINE_LOOP);

glVertex3fv(vertex_list[2]);

glVertex3fv(vertex_list[6]);

glVertex3fv(vertex_list[7]);

glVertex3fv(vertex_list[3]);

glEnd();

glBegin(GL_LINE_LOOP);

glVertex3fv(vertex_list[3]);

glVertex3fv(vertex_list[7]);

glVertex3fv(vertex_list[5]);

glVertex3fv(vertex_list[1]);

glEnd();

glBegin(GL_LINE_LOOP);

glVertex3fv(vertex_list[5]);

glVertex3fv(vertex_list[7]);

glVertex3fv(vertex_list[6]);

glVertex3fv(vertex_list[4]);

glEnd();

glPointSize(5.0f);

glFlush();

}

//导入3ds文件部分,生成显示列表部分

// 构造函数的功能是初始化tChunk数据,分配内存空间

CLoad3DS::CLoad3DS()

{

m_CurrentChunk = new tChunk; // 初始化并为当前的块分配空间

m_TempChunk = new tChunk; // 初始化一个临时块并分配空间}

// 打开一个3ds文件,读出其中的内容,并释放内存

bool CLoad3DS::Import3DS(t3DModel *pModel, char *strFileName)

{

char strMessage[255] = {0};

m_FilePointer = fopen(strFileName, "rb");// 打开一个3ds文件

ReadChunk(m_CurrentChunk);//读出块的id和块的size

ProcessNextChunk(pModel, m_CurrentChunk);// 现在开始读入数据,ProcessNextChunk()是一个递归函数通过调用下面的递归函数,将对象读出

ComputeNormals(pModel);// 在读完整个3ds文件之后,计算顶点的法线

CleanUp(); // 释放内存空间

return true;

}

void CLoad3DS::CleanUp()// 下面的函数释放所有的内存空间,并关闭文件

{

fclose(m_FilePointer); // 关闭当前的文件指针

delete m_CurrentChunk; // 释放当前块

delete m_TempChunk; // 释放临时块

}

/*fread函数的功能是从一个文件流中读数据,读取count个元素,每个元素size字节.如果调用成功返回count.如果调用成功则实际读取size*count字节*/

// 下面的函数读出3ds文件的主要部分

void CLoad3DS::ProcessNextChunk(t3DModel *pModel, tChunk *pPreviousChunk)

{

t3DObject newObject = {0}; // 用来添加到对象链表

unsigned int version = 0; // 保存文件版本

int buffer[50000] = {0}; // 用来跳过不需要的数据

m_CurrentChunk = new tChunk; // 为新的块分配空间

while (pPreviousChunk->bytesRead < pPreviousChunk->length)

{

// 读入下一个块

ReadChunk(m_CurrentChunk);

// 判断块的ID号

switch (m_CurrentChunk->ID)

{

case VERSION:

// 读入文件的版本号,并将字节数添加到bytesRead变量中

m_CurrentChunk->bytesRead += fread(&version, 1, m_CurrentChunk->length - m_CurrentChunk->bytesRead, m_FilePointer);

if (version > 0x03)// 如果文件版本号大于3,给出一个警告信息

MessageBox(NULL, "This 3DS file is over version 3 so it may load incorrectly", "Warning", MB_OK);

break;

case OBJECTINFO: //网格对象的信息

ReadChunk(m_TempChunk);

m_TempChunk->bytesRead += fread(&version, 1, m_TempChunk->length - m_TempChunk->bytesRead, m_FilePointer);

m_CurrentChunk->bytesRead += m_TempChunk->bytesRead;

ProcessNextChunk(pModel, m_CurrentChunk);

break;

case OBJECT: // 对象的名称

// 该块是对象信息块的头部,保存了对象了名称

// 对象数递增

pModel->numOfObjects++;

// 添加一个新的tObject节点到对象链表中

pModel->pObject.push_back(newObject);

// 初始化对象和它的所有数据成员

memset(&(pModel->pObject[pModel->numOfObjects - 1]), 0, sizeof(t3DObject));

// 获得并保存对象的名称,然后增加读入的字节数

m_CurrentChunk->bytesRead += GetString(pModel->pObject[pModel->numOfObjects - 1].strName);

// 进入其余的对象信息的读入

ProcessNextObjectChunk(pModel, &(pModel->pObject[pModel->numOfObjects - 1]), m_CurrentChunk);

break;

case EDITKEYFRAME:

// 跳过关键帧块的读入,增加需要读入的字节数

m_CurrentChunk->bytesRead += fread(buffer, 1, m_CurrentChunk->length - m_CurrentChunk->bytesRead, m_FilePointer);

break;

default:

// 跳过所有忽略的块的内容的读入,增加需要读入的字节数

m_CurrentChunk->bytesRead += fread(buffer, 1, m_CurrentChunk->length - m_CurrentChunk->bytesRead, m_FilePointer);

break;

}

// 增加从最后块读入的字节数

pPreviousChunk->bytesRead += m_CurrentChunk->bytesRead;

}

// 释放当前块的内存空间

delete m_CurrentChunk;

m_CurrentChunk = pPreviousChunk;

}

// 下面的函数处理所有的文件中对象的信息

void CLoad3DS::ProcessNextObjectChunk(t3DModel *pModel, t3DObject *pObject, tChunk *pPreviousChunk)

{

int buffer[50000] = {0}; // 用于读入不需要的数据

// 对新的块分配存储空间

m_CurrentChunk = new tChunk;

// 继续读入块的内容直至本子块结束

while (pPreviousChunk->bytesRead < pPreviousChunk->length)

{

// 读入下一个块

ReadChunk(m_CurrentChunk);

// 区别读入是哪种块

switch (m_CurrentChunk->ID)

{

case OBJECT_MESH: // 正读入的是一个新块

// 使用递归函数调用,处理该新块

ProcessNextObjectChunk(pModel, pObject, m_CurrentChunk);

break;

case OBJECT_VERTICES: // 读入是对象顶点

ReadVertices(pObject, m_CurrentChunk);

break;

case OBJECT_FACES: // 读入的是对象的面

ReadVertexIndices(pObject, m_CurrentChunk);

break;

case OBJECT_UV: // 读入对象的UV纹理坐标

// 读入对象的UV纹理坐标

ReadUVCoordinates(pObject, m_CurrentChunk);

break;

default:

// 略过不需要读入的块

m_CurrentChunk->bytesRead += fread(buffer, 1, m_CurrentChunk->length - m_CurrentChunk->bytesRead, m_FilePointer);

break;

}

// 添加从最后块中读入的字节数到前面的读入的字节中

pPreviousChunk->bytesRead += m_CurrentChunk->bytesRead;

}

// 释放当前块的内存空间,并把当前块设置为前面块

delete m_CurrentChunk;

m_CurrentChunk = pPreviousChunk;

}

// 下面函数读入块的ID号和它的字节长度

void CLoad3DS::ReadChunk(tChunk *pChunk)

{

// 读入块的ID号,占用了2个字节。块的ID号象OBJECT或MATERIAL一样,说明了在块中所包含的内容

pChunk->bytesRead = fread(&pChunk->ID, 1, 2, m_FilePointer);

// 然后读入块占用的长度,包含了四个字节

pChunk->bytesRead += fread(&pChunk->length, 1, 4, m_FilePointer);

}

// 下面的函数读入一个字符串

int CLoad3DS::GetString(char *pBuffer)

{

int index = 0;

// 读入一个字节的数据

fread(pBuffer, 1, 1, m_FilePointer);

// 直到结束

while (*(pBuffer + index++) != 0) {

// 读入一个字符直到NULL

fread(pBuffer + index, 1, 1, m_FilePointer);

}

// 返回字符串的长度

return strlen(pBuffer) + 1;

}

// 下面的函数读入RGB颜色

void CLoad3DS::ReadColorChunk(tMaterialInfo *pMaterial, tChunk *pChunk)

{

// 读入颜色块信息

ReadChunk(m_TempChunk);

// 读入RGB颜色

m_TempChunk->bytesRead += fread(pMaterial->color, 1, m_TempChunk->length - m_TempChunk->bytesRead, m_FilePointer);

// 增加读入的字节数

pChunk->bytesRead += m_TempChunk->bytesRead;

}

// 下面的函数读入顶点索引

void CLoad3DS::ReadVertexIndices(t3DObject *pObject, tChunk *pPreviousChunk)

{

unsigned short index = 0; // 用于读入当前面的索引

// 读入该对象中面的数目

pPreviousChunk->bytesRead += fread(&pObject->numOfFaces, 1, 2, m_FilePointer);

// 分配所有面的存储空间,并初始化结构

pObject->pFaces = new tFace [pObject->numOfFaces];

memset(pObject->pFaces, 0, sizeof(tFace) * pObject->numOfFaces);

// 遍历对象中所有的面

for(int i = 0; i < pObject->numOfFaces; i++)

{

for(int j = 0; j < 4; j++)

{

// 读入当前面的第一个点

pPreviousChunk->bytesRead += fread(&index, 1, sizeof(index), m_FilePointer);

if(j < 3)

{

// 将索引保存在面的结构中

pObject->pFaces[i].vertIndex[j] = index;

}

}

}

}

// 下面的函数读入对象的UV坐标

void CLoad3DS::ReadUVCoordinates(t3DObject *pObject, tChunk *pPreviousChunk)

{

// 为了读入对象的UV坐标,首先需要读入UV坐标的数量,然后才读入具体的数据

// 读入UV坐标的数量

pPreviousChunk->bytesRead += fread(&pObject->numTexVertex, 1, 2, m_FilePointer);

// 分配保存UV坐标的内存空间

pObject->pTexVerts = new CVector2 [pObject->numTexVertex];

// 读入纹理坐标

pPreviousChunk->bytesRead += fread(pObject->pTexVerts, 1, pPreviousChunk->length - pPreviousChunk->bytesRead, m_FilePointer);

}

// 读入对象的顶点

void CLoad3DS::ReadVertices(t3DObject *pObject, tChunk *pPreviousChunk)

{

// 在读入实际的顶点之前,首先必须确定需要读入多少个顶点。

// 读入顶点的数目

pPreviousChunk->bytesRead += fread(&(pObject->numOfVerts), 1, 2, m_FilePointer);

// 分配顶点的存储空间,然后初始化结构体

pObject->pVerts = new CVector3 [pObject->numOfVerts];

memset(pObject->pVerts, 0, sizeof(CVector3) * pObject->numOfVerts);

// 读入顶点序列

pPreviousChunk->bytesRead += fread(pObject->pVerts, 1, pPreviousChunk->length - pPreviousChunk->bytesRead, m_FilePointer);

/* 现在已经读入了所有的顶点。

因为3D Studio Max的模型的Z轴是指向上的,因此需要将y轴和z轴翻转过来。

具体的做法是将Y轴和Z轴交换,然后将Z轴反向。*/

// 遍历所有的顶点

SU导入3D的流程

Sketchup建模及导入3D的方法及选项设置 用su建模,一是推敲方案,二是在方案推敲完成导入3D后进入后期的渲染,出效果图。 SU建模注意:为了加快建模速度必须设定自己的一套快捷键,在建模的过程中必须每个体量编辑组件,以便以后的修改。为了能导入3D中进行渲染,Sketchup的模型必须面是统一 的,系统默认白色的是正面,蓝色的是反面,就必须把正面朝外反面朝里,要不然在3d里面反面是显示不出来。 第一,第二就是Sketchup 一定是专业版,只有它才能导出3ds格式和dwg格式。 第二,在Sketchup中把材质都赋好,记得一点是不要用Sketchup默认的材质,要新建材质赋你有的jpg格式贴图,这样在3d里面才能继续调整贴图,Sketchup默认的贴 图在3d里可是不认。 第三,就是导出了,在Sketchup里面:文件,导出,3d模型,第一个下拉菜单选所有图层,然后中间的全部都不要选择,最后一个把单位改成毫米就可以了。第一个不动直接确定,第二个点否,现在导进来了,打灯光,打摄像机,调Vary选项。 第四,在Sketchup中赋好的材质,先把模型选中然后在编辑菜单中选Poly Select (可编辑网格选择),下面有几个选项选倒数第二个Polygon,然后在Select By Material ID里面输入相应的材质ID,被选中的材质就会变成红色,这样就可以进行材质的调 整了。 第五,SU导出3DS格式说明:1、Sin gel Object勾选此选项时,整个场景将合并成一个物体被输出,在SketchUP中建立的群组和组件将不能被单独进行操作,在场景中线面数很大的情况 下有可能不能完成输出;(这视情况而定) 2、Objects By Geometry 此选项将以群组和组件为单位输出物体,SketchUP 最表面一层的群组和组件被保留为单独的物体,可以在max中进行单独灵活的各种 编辑,推荐使用。缺点是每一个群组和组件都会输出一个自身的多重子材质 3、Output Texture Maps 如果不勾选,输出材质中将不包含贴图信息;贴图 文件路径需要在max里添加,建议将所有贴图复制到max模型文件所在工作目录, 这样就不会出现找不到贴图的错误信息 4、Output 2-Sides 输出双面:一般情况下不需要,会额外增加模型量;但是 在SketchUP建模阶段必须保证面法线正反的正确性,否则反面在max里无法显示, 产生丢面现象。Materiar和Geometry分别以材质和物体产生双面。 5、Output Standalong Edges 输出边线,对于max 不必要。 6、Use “Color By Layer ” Mater用I层的颜色作为材质输出,是以层颜色进行管 理的材质,需要在建模起始阶段就规划好的材质管理方式,物体(或面)将以所在的层的颜色为自身的材质。因为SketchUP里组件和层是参插的,在组件具有复合 材质时好像不易管理。 7、Gen erate Cameras 产生相机,基本上每一个页面会产生一个相机,这个不用勾 选。

第一次坐飞机,必熟悉的常识!

第一次坐飞机,必熟悉的常识! 一、乘飞机常识 应尽量轻装。根据规定,手提物品不得超过五公斤,因此能托运的,可随机或分开托运。一般可随身携带雨伞、大衣、手杖、相机、手机、途中看的书报等。 抵达机场后应先办理乘机手续。将身份证交所乘航空公司窗口换取登机牌,同时将随身托运的行李过磅。乘客凭登机牌上飞机,凭行李卡到目的地机场领取行李。 直接托运的行李,在中途换乘飞机时,应关照一下行李是否转到换乘的班机上。例如,乘巴航飞机去开罗,过境卡拉奇,行李卡上应写:起点北京,中转卡拉奇,终点开罗。飞机抵达卡拉奇时,在换乘飞机前,应设法了解(就是多问一句)行李是否已转到去开罗的班机上。 上、下飞机时,空姐站在机舱门口迎送乘客,旅客应有礼貌地点头致意。机内分头等舱和公务舱、经济舱。头等舱在飞机前部。无论是否对号入座,都不要抢占座位。购经济舱票的乘客,不能坐到头等舱、公务舱座位上去。随身携带物品可放在头顶上方的行李架上,较重物品可放在座位下面。但不要把东西放在安全门前或出入通道上。 飞机起飞和降落时,不准吸烟,不得上厕所,要系好安全带,座椅要放直。这时航空小姐常常发给乘客糖果等,在飞机升降过程中咀嚼,以免由于气压变化,引起耳膜疼痛。晕飞机者可在起飞前半小时服用乘晕宁等药物,登机后安稳靠在座椅上,椅背兜中备有清洁袋。呕吐时可吐在袋中。 飞机座位上方都有吹风阀、聚光灯和呼叫航空小姐的按钮。在机舱里感到闷热时可打开吹风阀;看书报时可打开聚光灯;要喝水,购买物品等事情,均可利用按钮呼叫服务员。长途飞行,飞机上备有酒水、茶点、食品、早餐、正餐等。除烟、酒(包括啤酒)要支付现金外,其他免费供应。 飞机上备有各种文字的报刊,供旅客借阅,不得带走。大型飞机在旅途中往往放映电影,但听声音则需租用耳机(也有免费提供耳机的)。在飞机上不要大声喧哗,以免影响他人,特别是在晚间睡眠时间。自己不能入睡时,可看书报,不要与他人闲谈。在飞机上的坐卧姿势也应注意,不要影响他人坐卧。 飞机上的一切用品均不得拿走,如厕所内的卫生用品,座椅背兜中的刊物,餐用杯盘刀叉,以及小毛毯、小垫枕等。飞机中途着陆加油时,乘客一般下机休息,下机时,重要小件物品随身携带,别的物品仍放在机上。如发过境登机卡时,有时可凭卡免费供应饮料一杯。旅客不要随意离开过境候机室,以免误机。到达目的地前,飞机通常广播当地地面天气情况,供乘客下机时穿衣参考,如需更换衣服应到盥洗间。 如遇气候不好,飞机被迫改降其他城市或地区的机场时,航空公司将采取措施,或设法改乘其他交通工具,或安顿旅客等待气候好转继续飞行。这一切费用包括停留期间的食宿费等均由航空公司负责。 如某一代表团人数较多,上下飞机时应清点一下人数。但不要列队而行,不吹哨集合,不喊口令,不喧哗吵闹。 办完入境手续即可凭行李卡认领托运的行李。很多国际机场都有行李传送带的设备和备有手推车。旅客可自己用手推车将行李推出机场。如没有这些设备,可请行李搬运员协助,但要付小费。下机后,如行李一时找不到,可通过机场行李管理人员或有关航空公司查询,并填写申报单交航空公司。如行李遗失,航空

三维模型导入ADAMS的实用方法

三维模型导入ADAMS仿真的实用方法摘要:此文内容主要来源于 宋博士的博客(https://www.360docs.net/doc/b811181716.html,/doctorsongshaoyun)。 本文所提供的方法是现有ADAMS书籍上未曾提供的内容,是解决大家建模感觉繁琐的非常实用的方法。 下面谈谈我的一些经验:尽管ADAMS软件中提供了几何建模的工具,但相比现在成熟的三维专业设计CAD软件而言其功能非常薄弱。ADAMS/View提供的建模工具功能非常的原始,即使对于简单的几何模型,用户想直接在ADAMS/View中建立也需要非常熟练地掌握移动和旋转工作栅格才能实现,而对于复杂的机械装配模型,ADAMS/View基本无能为力,因此目前通常的做法是先用成熟三维设计软件(如CATIA,UG,Pro/E,Solidwork等)精确建立机械系统实体零件模型和虚拟装配模型,之后通过数据交换的方式(我一般使用parasolid格式)将模型导入到ADAMS软件中,根据实际情况抽象出相应的运动副添加适当的约束、驱动和负载等(此处在正确位置建立合适的Maker点很关键,对于不规则实体有时软件自动建立的cm点并非在仿真需要的地方,运动副位置设置错了容易导致仿真失败)建立起机械系统的虚拟样机,来模拟实际工况和真实运动情况。此外机械系统方面的仿真建议大家使用Adams/Machinery这个插件,可以极大的提高仿真效率。 欢迎访问我的新浪博客(https://www.360docs.net/doc/b811181716.html,/u/1774643737)。 基于SOLIDWORKS-ADAMS的机构动力学仿真对一个实际的机构做动力学仿真,是我们在机械设计实践中经常会遇到的的问题。一般我们会首先用某款三维软件(如SOLIDWORKS,SOLIDEDGE,PRO/E,UG,CATIA等)对所有零件进行建模,然后把零件组装成为装配体,接着把模型导入到机构动力学软件如ADAMS中进行动力学中仿真。 然而,从三维软件的装配模型导入到ADAMS中时,由于装配体中的零件很多,如果直接导入,会在ADAMS中出现许多零件,而其中许多零件之间并不存在相对运动,为了在ADAMS 中进行正确的仿真,就需要首先对没有相对运动的一系列零件之间建立固定副。对于简单的

大班常识教案:认识飞机

大班常识教案:认识飞机 [教学目的]: 1、认识飞机的外形特征及简单结构,并知道它们的用途。 2、通过认识飞机,知道飞机分民用机和军用机。 3、让幼儿了解古代中国人对航空的贡献,知道飞机的由来, 4、培养幼儿热爱祖国的情感,增加幼儿对科技的探索性, 5、激发幼儿探索事物的兴趣,培养孩子的创造力、想象力。 教学准备: 课件:1、认识飞机。2、飞机的种类和用途。3、飞机的发展史。4、古代中国人对航空的贡献。5:讨论、飞呀飞。 6、游戏1。 7、游戏2。 实物:一架军用机和一架民用机模型。 组织形式: 一:出示飞机模型。 呜……我来了,翅膀抖一抖,飞上蓝天去,飞过黄河,飞过长江,转进云彩里。小朋友长大了想不想开飞机?{想}那今天老师就和小朋友先来认识一下飞机。 二:、打开课件:认识飞机。

卡通飞机说:在所有的交通工具中,飞机的速度是最快的。好吧!现在就请你们一起来认识飞机吧! 师依次点击:1、机身。2、机翼。3、尾翼。4、起落架。 5、发动机。 6、驾驶室。 7、机舱。 8、机首。 再点击卡通飞机:飞机是由机身、机翼、尾翼、起落架、发动机、驾驶室、机舱、机首等主要部分组成的。@_@我是分割线@_@ :提出问题,加深记忆。 A:飞机主要是有那几部分组成的? B:各部分的主要功能是什么? 师:现在小朋友都知道了飞机的各个组成部分,我们就来做一个拼图游戏,看谁拼的快又对。 三:打开课件:游戏2。 让幼儿根据原图进行拼图,机头不动。 师:小朋友都很喜欢飞机,哪你都见过什么样的飞机?{让幼儿自由回答}今天我们就来看一看飞机的种类有哪些? 四:打开课件:飞机的种类和用途。 卡通飞机:飞机有民用机和军用机两种,载送旅客或装货物用的是民用机,战争用的是军用机。 A:点击大客机,依次出现七架不同型号的客机,点击每一架可放大。

DMAX模型导入到Unity3D的步骤

3DMAX模型导入到Unity3D的步骤 1、打开3DMAX,自定义-》单位设置,将系统单位和显示单位都设置为“厘米” 2、建立一个Polygon管状体,参数如下:内径20CM,外径30CM,高30CM 注:保证其坐标原点在0,0,0 3、选中模型右击鼠标转换为可编辑多边形。 多模型进行一些挤出操作。 4、开始导出模型。保持模型选中状态,点击左上角3DMAX图标菜单, 导出-》导出选定对象。导出格式为.FBX,名称必须为英文字母类, 跳出的选项框默认直接确定即可。 例如导出的名称为 5、接下来打开Unity3D,新建立一个项目。 因为是测试项目所以可不导入Unity提供的资源包 6、将之前在3DMAX里导出的模型复制到Unity项目所在文件夹中的Assets文件夹下。 Unity会自动刷新出资源并自动创建一个Materials材质文件夹。如下图示: 7、单击Tube资源,在旁边的Inspector视图中可以看到:Scale Factor的值 表示的比例

8、鼠标拖动Tube到场景中,保持选择状态,摁键盘“F”键,物体自动放大到场景最大 点。3DMAX模型导入到Unity3D的步骤完成。 9、在3DMAX里新建立一个圆柱,系统单位和显示单位仍为CM厘米,圆柱参数如下: 半径100cm,高100cm,模型中心在坐标原点,转换为可编辑多边形, 保存命名为。将复制到Unity项目的Assets文件夹下 10、拖动yuanzhu到主场景。接着在Unity里建立一个圆柱体 Unity里默认是直径1M,高1M的圆柱。我们之前在3DMAX里建立的圆柱半径100cm,导入到Unity后即直径是200cm了。 将Unity里建立的圆柱,Scale参数中的X和Z放大2倍,这个圆柱的半径才是100cm(直径200cm) 然后将从3DMAX里导入的圆柱与Unity里建立的圆柱比较:半径是一样大小的。 说明在3DMAX里建立对应到Unity的模型,系统单位和显示单位设置为“CM”最好。

飞机基本知识

1,中文名称:超临界翼型 英文名称:supercritical aerofoil profile 定义:一种上翼面中部比较平坦,下翼面后部向里凹的翼型,在超过临界M 数飞行时,虽有激波但很弱,接近无激波状态,故称超临界翼型。 超临界翼型(Supercritical airfoil)是一种高性能的超音速翼型。它是由美国国家航空航天局(NASA)兰利研究中心的理查德.惠特科姆(Richard T.Whitcomb 1921-)在1967年提出的。这种翼型属于双凸翼型的一种,但样子看起来像一个倒置的层流翼型,即下表面鼓起,而上表面较为平坦。超临界翼型的最大优势是可以将临界马赫数大大提高,一般可以提高0.06-0.1,因此可以获得较好的跨音速和超音速飞行性能。 20世纪70年代以来,超临界翼型开始在大型运输机上进行试验。 现在主要用于大型客机和超音速轰炸机上。关于在战斗机上使用超临界 翼型的研究也早已展开。 2,中文名称:展弦比 英文名称:aspect ratio 定义:机翼或其他升力面的翼展平方与翼面积的比值。

展弦比即机翼翼展和平 均几何弦之比,常用以下 公式表示: λ=l/b=l^2/S 这里l为机翼展长, b为几何弦长,S为机翼 面积。因此它也可以表述 成 翼展(机翼的长度) 的平方除以机翼面积,如 圆形机翼就是直径的平 方除以圆面积,用以表现机翼相对的展张程度。 展弦比的大小对飞机飞行性能有明显的影响。展弦比增大时,机翼的诱导阻力会降低,从而可以提高飞机的机动性和增加亚音速航程,但波阻就会增加,以致会影响飞机的超音速飞行性能,所以亚音速飞机一般选用大展弦比机翼;而超音速战斗机展弦比一般选择2.0~4.0。 如大航程、低机动性飞机——B-52轰炸机展弦比为6.5,U-2侦察机展弦比10.6,全球鹰无人机展弦比25;小航程、高机动性飞机——J-8展弦比2,Su-27展弦比3.5,F-117展弦比1.65。 展弦比还影响机翼产生的升力,如果机翼面积相同,那么只要飞机 没有接近失速状态,在相同条件下展弦比大的机翼产生的升力也大,因 而能减小飞机的起飞和降落滑跑距离和提高机动性。 3,中文名称:压力中心 英文名称:pressure center 定义:作用在物体上的空气动力合力的作用点。 4中文名称:临界马赫数 英文名称:critical Mach number 定义:物体表面上最大流速达到当地声速时所对应的自由流的马赫数。 当来流以亚声速度v∞(相应的流动马赫数Ma∞,比如小于0.6)流过翼型时, 上翼面的最大速度点c的vc>v∞,因为有可压缩性的影响,点c处的温度最低, 该点处的声速也最小,故点c的局部马赫数Mac是流场中最大的,比如说现在 Mac<1.0。这时全流场都是亚声速流动。随着来流速度v∞或来流马赫数Ma∞的 增加,Mac也会跟着增加。当Mac=1.0相应此时的来流马赫数Ma∞就称为该翼 型的临界马赫数,用符号Macr表示

航空常识

航空常识——认识飞机 机翼机翼是飞机的重要部件之一,安装在机身上。其最主要作用是产生升力,同时也可以在机翼内布置弹药仓和油箱,在飞行中可以收藏起落架。另外,在机翼上还安装有改善起飞和着陆性能的襟翼和用于飞机横向操纵的副翼,有的还在机翼前缘装有缝翼等增加升力的装置。由于飞机是在空中飞行的,因此和一般的运输工具和机械相比,就有很大的不同。飞机的各个组成部分要求在能够满足结构强度和刚度的情况下尽可能轻,机翼自然也不例外,加之机翼是产生升力的主要部件,而且许多飞机的发动机也安装在机翼上或机翼下,因此所承受的载荷就更大,这就需要机翼有很好的结构强度以承受这巨大的载荷,同时也要有很大的刚度保证机翼在巨大载荷的作用下不会过 分变形。(请见机翼的构造) 机翼的分类方法有很多种,常用的分类方法有:* 按机翼的数量分类:可分为单翼机、双翼机、多翼机等;* 按机翼的平面形状分类:可分为平直翼、后掠翼、前掠翼、三角翼等等;* 按机翼的构造形式分类:可分为构架式、梁式、壁板式、整体式等等。此外,机翼的剖面形状也是多种多样,随着生产技术以及流体力学的发展,从早期的平直矩形机翼剖面到后来的流线形剖面、菱形剖面,机翼的升力性能越来越好,相反受到的空气阻力越来越小,也就是说机翼的升力系数越来越大,

相同面积的机翼所产生的升力就越来越大。 图中(1)是平板形翼剖面,它相当于风筝的剖面,靠迎角产生升力;(2)是典型的鸟翼剖面,多用在早期的飞机上,如图15;(3)(4)(5)及(6)为上拱下略平的翼剖面,气动力特性好,升力大,多用于亚音速以下的飞机;其余的翼剖面多为上下翼面对称的翼型剖面,能做成薄形机翼,对超音速飞行很有好 处,多用于超音速飞机或飞机的尾翼上。 机翼的数量分类机翼的数量是指飞机有几副机翼,一副机翼一般包括一左一右两个机翼。根据机翼的数量可以将飞机分为单翼机、双翼机和多翼机。 双翼机:在飞机刚刚出现的头二十几年中,是双翼机独占鳌头的时期。由于当时的飞行理论很落后,飞行中所要解决的主要矛盾是获得足够的升力。要获得较大的升力,在当时有两种办法:一种方法是增大机翼的展弦比,但这会使机翼的强度变弱;另一种方法就是增加机翼面积,但同时也会增加结构的重量。因此,为了取得折衷,当时的飞机大多数都设计成为上下两个翼面,莱特兄弟的第一架飞机“飞鸟一号”就是双翼机。多翼机:为了进一步获得较大的升力,有的设计师为飞机增加了更多的翼面,我们可以将三副机翼以上的飞机统称为多翼机。一般说来多翼机中以三翼机最为常见,如第一次世界大战中德国著名的战斗机福克DR.1就是三翼机。

航空安全小常识

航空安全小常识 近日马航飞机事故又引起人们旧话重提:坐飞机安全吗?飞机的安全性有多高?乘坐飞机该注意些什么?现在我们就归纳整理国内外专家的看法,以飨读者。 飞机重大事故发生的频率如何? 中国民航大学副校长、民航特聘专家吴仁彪表示,民航还是最安全的交通运输方式,这从美国联邦航空局发布的安全数字可以看出。去年全世界民航运送乘客30亿人次,执行飞行3500万次航班,失事死亡224人。而中国民航的安全形势是比较好的,近5年百万架次重大事故率的平均值为0.08,与同期全球民航0.42的平均值相比,安全状况好于世界平均水平。 随时有飞机迫降? 英国希思罗机场几乎每个月都有一架飞机迫降。有51起迫降发生于去年,2012年发生40起,2011年54起,2010年66起,2009年55起――5年来总共有266次迫降。 是不是很容易遇上颠簸? “剧烈的飞机颠簸是极为罕见的,”英国退休航空机长Steve Allright说,“在我一生的一万小时飞行经历中,剧烈颠簸的时间加起来也只有大概5分钟。”

飞机经常被雷电击中? 飞行员Patrick Smith说:“飞机被雷击的次数比你想象的要频繁――每架喷气式客机平均每两到三年就要被雷电击中一次。雷电不会传进客舱电死乘客,而是经过飞机的铝制外壳泻出,飞机外壳是电的良好导体。有些时候雷电会给飞机造成一点小损伤,但是大多数情况下不会留下任何痕迹。” 四个发动机都熄火了,还可能存活? 都说发动机越多安全性能就越高,确实是如此,波音747在四台发动机只有一台能工作的前提下也能飞行,但是如果四台发动机都熄火了呢?如果飞机发动机在飞行途中停止,水平距离和丢失高度之间的比值是20∶1,也就是说,在一万米高空下降到地面之前,飞机还可以滑翔几百英里。所有发动机同时熄火的概率很小,但是确实发生过,原因包括:燃料耗尽、火山灰、吸入飞鸟。在曾经的几起发动机熄火的案例中,飞行员都靠滑翔,在没有一死一伤的情况下安全降落。 坐飞机和坐汽车,哪个更安全? 据美国全国安委会对1993~1995年间所发生的伤亡事故的比较研究,坐飞机比坐汽车要安全22倍。事实上,在美国过去的60年里,飞机失事所造成的死亡人数比在有代表性的3个月里汽车事故所造成的死亡人数还要少。

关于飞机的这些小知识,东航来告诉你

关于飞机的这些小知识,东航来告诉你 飞机已经成为常用的交通工具之一,为人们的出行带来极大的便利,经常乘坐东方航空的航班,很多看似习以为常的那些机上规定与常识,却也存在着很多奥秘。 一、机舱里我们呼吸的空气来自哪里 飞机上有一套设备,在飞行过程中,可以将外界低温低压的空气吸入后加压、增温、过滤,通过专用管道强行送入机舱。此外,飞机的空气循环系统也经过严格的设计,以过滤掉空气中的有害微生物。 二、飞机是怎么启动的,是否需要钥匙 现代飞机大部分都是自动完成启动,飞机在加燃料和点火前,会通过空气起动机推动引擎转动。这也就是说基本不用拉什么扳手或是按什么按钮。不过有需要的话,还是可以通过手动完成启动。 三、飞机舷窗为什么都是椭圆形的 商用客机的舷窗从最初的方形演变到椭圆形,改变外形的出发点就是为乘客的安全所考虑。随着飞行高度的增加,机舱需要加压维持较舒适的环境,机舱内的高压会作用在舷窗上。研究发现,多边形(包括方形)的窗户结构稳定性较差,在拐角处会承担更多压力,最终因为金属的疲劳导致结构出现问题。而椭圆形由于在各个方向上的结构相同,这种压力将被平均分散,极少出现从某一点发生崩

溃的情况,所以飞机客舱的舷窗采用了现在所见的椭圆形。 四、飞机为什么能在空中转弯 机身在空中倾斜运动是自由的,驾驶杆向右转则飞机也向右倾斜,这时飞机的重力与地面垂直,可是机翼上的升力却是垂直于机翼的,此刻的升力不再指向地面的正上方而是指向斜上方。由于重力和升力的方向不同,它们不再互相平衡,于是就产生了一个垂直于机身指向右方的力,在这个力的作用下,飞机沿着一条圆弧向右转动,这与人骑自行车的体验相近似,骑车人的身体如向一侧倾斜,自行车会随之倾斜并且自动向倾斜方向转弯无须转动车把。 五、在夜晚降落时,为何调暗舱内灯光 弱光是准备用来疏散乘客的,而不是用来睡觉的。当飞机在夜晚准备降落时,飞机内的灯光就会变暗,这样降落后,乘客在下飞机时,眼睛就很容易适应夜晚外面的光线强度,可以更清楚的看到外面的事物。 了解了那么多关于飞机的知识,今后乘坐东方航空的航班时,对这些事情就不会再有疑问了!

prescan 3D模型导入步骤

3D模型导入 一.把3D导入PreScan中有步骤: 1.从sketchup软件中导出目标模型文件 1)打开sketchup,右击“文件”——“3D模型库” ——“获取模型”,然后再弹出的模型库页面中 搜索目标模型; 2)选择目标文件并点击下载(保存为.dae格式,只有这个文件prescan才能识别)。 2.把下载下来的目标模型文件添加到prescan用户元素 库中 1)右击prescan上的“Tools”——“User Library Elments Wizard”; 2)弹出的菜单最上面是选择存放路径,下面的选项按钮点击“classic ULE”,然后点击“Add folder” 并对新生成的文件命名; 3)点击新生成的文件来激活对话框右边的“New Element”按钮并点击; 4)在弹出的对话框的第一页给文件命名以及选择元素类型并点击“next”; 5)在弹出的对话框的第二页给添加的心元素命名以及必要的描述并点击“next”; 6)在弹出的对话框的第三页选择第一步骤下载下

来的目标模型文件并点击“next”; 7)第四页是对目标模型进行尺寸设置,一般从sketchup中下载文件都已设置好,可以直接点 击“next”; 8)下面只要顺着点击“next”即可,最后点击“User Library Elments Wizard”对话框上的“refersh and close”就能在prescan的UL Elements中直接拖 拉该模型放置场景中。 注意:1)在3D模型库中下载的文件需有 textures.txt文件,不然导入的在3D viewer中看 到的模型将是一片漆黑。

乘坐飞机的安全常识(标准版)

乘坐飞机的安全常识(标准版) Understand the common sense of safety, you can understand what safety issues should be paid attention to in daily work, and enhance your awareness of prevention. ( 安全管理 ) 单位:______________________ 姓名:______________________ 日期:______________________ 编号:AQ-SN-0030

乘坐飞机的安全常识(标准版) 随着社会的进步,我们的交通运输变得越来越发达,飞机变成了一种十分通用的交通工具,乘坐飞机旅行既省时,又舒适。虽然飞机的事故发生率远远低于汽车、火车等交通工具,但由于飞机的特殊性,一旦发生事故就会造成较严重后果,而且民航史上也有着许多因旅客安全常识的缺乏而造成的惨痛教训,因此,普及人们的飞行安全常识就成了一件刻不容缓的事。 旅客在登机以前必须办理登机手续,同时接收安全检查,以确保你所携带的物品符合安全规定,以减少事故隐患。登上飞机以后,一定要在起飞和着陆前根据提示系好安全带,尽管现代旅客机远比汽车平稳得多,但在任何情况下都不要忽视安全。由于飞机在起飞和着陆时处于颠簸的气流中,因此少数人可能会感到不适,有些人也会出现象晕车一样的晕机现象,有这种情况的旅客只要在登机前

服用防晕药,同时注意减少活动即可。此外,由于飞机高度的变化所引起的气压的变化可能会导致耳中不适,此时只要做吞咽动作,使耳腔内的气压平衡,就可以解除。旅客机上是严禁吸烟的,吸烟不但会污染空气,更为重要的是容易引发火灾,酿成重大事故。我国就曾在1982年发生过一起由于吸烟引发的空难,造成机上69人中25人死亡,37人受伤的恶性事故。因此,对于那些习惯于上卫生间吸烟的人来说尤其需要注意,改掉这种不良习惯。 前面已经说道,乘坐飞机旅行是较为舒适,然而,飞行中的轻度颠簸和轻度缺氧对于某些有伤病旅客来说却是很危险的。那么,患有哪些疾病的人不宜乘坐飞机呢?一般来说,这些病人包括未经控制的心力衰竭,发病后不到6周的心肌梗塞和7日内做过气胸照相术的人,发病后3个月的气胸病人,3周内作过胃肠手术的入,胃溃疡出血者,空洞型肺结核病人,血红蛋白量低于标准值50%或红细胞低于250万/立方毫米的贫血患者,伴有严重并发症的高血压病患者,严重哮喘、肺炎,支气管扩张,急性肺水肿等患者,脑梗塞,脑动脉硬化的患者。此外,对于接近预产期的孕妇,在旅行时可能导致

飞机基础知识

主题:飞机基础知识 飞机概况 排row(如:第5排译作row 5) 飞机A/C(是aircraft 的英文缩写形式)机头nose 机腹belly 蒙皮skin 机身airframe 翼肋rib 翼梁spar 机翼wing 翼尖wing tip 前缘leading edge 后缘trailing edge 客舱cabin 或passenger compartment 货舱cargo compartment 轮舱wheel well 缩写W/W 驾驶舱cockpit/ flight deck 设备舱equipment bay 窗window 滑窗sliding window 门窗door mounted window 旅客窗passenger cabin window 座位seat 过道aisle 地板floor 天花板ceilin 行李架stowage bin 杆lever or stick or column 操纵面control surface 操纵杆control column 控制面板control panel 手柄handle 开关/电门switch 正常位NORM 备用位ALTN 人工manual 自动auto 选择select (注:通常也用缩写形式SEL)按钮button 旋钮knob

方位描述 左left 缩写L 或LH 右right 缩写R 或RH 前部forward 缩写fwd 后部afterward 缩写aft 上面upper 下面lower 左上upper left 右下lower right 左前left forward 右后right afterward 内侧inboard 缩写I/B 外侧outboard 缩写O/B 左内侧left inboard 在…之间between…and… 航材 胶adhesive 销子pin 例如安全销safety pin 插头plug 插座socket 插针pin 电阻resistor 线路wire 引线lead 螺帽nut 螺栓bolt 螺钉screw 跳开关circuit breaker 继电器relay 隔离垫spacer 遮光板glare shield 消耗航材consumable material 故障描述 航前检查preflight (PF)check 航后检查after flight (AF)check 过站检查transit(TR) check 定检scheduled maintenance 发现find或reveal 故障trouble 或failure 或fault 失效fail 或malfunction

Quest3D模型的导入教程

一、前期准备工作(本教程以3DSMax为建模工具作为使用参考) 1.使用3DSMax创作一个最简单的茶壶模式: 2.在File(文件)菜单栏中选择运行Export(输出)命令,然后在Select File to Export(选择输出文件)对话框中选择Quest3D公司自己开发支持的X文件格式,选定后点击"完成"按钮: 3.在"场景统计和文件选项"对话框中选择并完成相应的设置: 4.Quest3D公司为3DSMax开发的X文件输出插件会自动将模型保存为X文件,本实例中将文件名设置保存为teaport.X.

二、在Quest3D中导入模型: 1.双击快捷图标运行Quest3D程序,在File(文件)菜单栏中选择运行Import导入命令: 2.在Select File to Import(选择输入文件)对话框中选择teaport.x文件: 3.Quest3D在点击导入文件对话框中的"打开"按钮后会弹出X Object Importer Options(X对象导入选项)对话框,进行相应的载入类型和选项设置.完成设置后点击"OK"确认按钮:

4、在Load Channel Group(载入通道组合)警告提示框,用以确定文件名和文件类型,: 5、当Channel通道窗口中出现DX8 3D Object相应的模型结构关系图后,就完成了模型的导入任务: 三、在动画窗口正常显示3D模型 出现问题:当我们完成第二步骤的工作以后,却发现在动画窗口中看不到相应的模型,这就意味着在Run预览运行效果和打包输出后一无所见! 这可是一个及其严重的问题哟,怎么办呢,解决方法如下: 1.在template模板窗口中,拖动Quick Start中的ObjectInspectiong的链接到Channel通道窗口:

航空常识

非托运行李 非托运行李的体积应能置于旅客的前排座椅下或封闭式行李架内。 A.国际航班随身携带物品:免费随身携带物品的重量,每位头等舱、公务舱旅客以8千克为限,每位经济舱旅客以5千克为限;持头等舱、公务舱客票的旅客,每人可随身携带两件物品;持经济舱客票的旅客,每人可随身携带一件物品; B.国内航班随身携带物品:每位头等舱旅客可随身携带两件行李,每件行李重量不得超过5千克;每位公务舱和经济舱旅客可随身携带一件行李,重量不得超过5千克。 C.体积:每件随身携带物品的长、宽、高分别不超过55CM(21英寸)、40CM(15英寸)、20CM(7英寸); 超过上述重量、件数、体积限制的物品,应作为托运行李托运。 下列物品不得作为行李或夹入行李内托运,也不得作为免费随身携带物品带入客舱运输:危险品、枪支(猎枪和体育运动用枪支除外)、军用或警用械具类(含主要零部件)、管制刀具。活体动物、带有明显异味的鲜活易腐物品(如:海鲜、榴莲等)。 托运行李一般规定 托运行李定义:托运行李指旅客交由国航负责照管和运输,并拴挂行李识别标签的行李。 托运行李限额:每件托运行李不得低于2千克。每件托运行李的最大重量不得超过45千克。国际运输的每件托运行李重量一般不超过32千克,如超过32千克,但不超过45千克的行李必须符合达到机场和续程承运人的有关规定。每件托运行李的长、宽、高三边之和不得超过203厘米,不得小于60厘米。 超过免费托运行李限额的托运行李在支付逾重行李费后可作为托运行李运输;但超过最大体积或重量的行李,不能作为托运行李运输,应作为货物运输。 托运行李包装:托运行李应进行适当包装和固定,以保证能承受一定的压力,且在正常操作条件下可以安全地被卸载和运输。托运行李的包装还应遵守以下规定: ? 旅行箱、旅行袋和手提袋应锁好,避免遭窃。 ? 两个或两个以上行李袋不能捆扎成一个。 ? 额外物品不得填塞至托运行李包。 ? 竹制编织筐、网袋、绳子、草袋、塑料袋不得缠绕于行李四周。 ? 乘客姓名、具体地址和电话号码应在行李包内侧和外侧写明。 不允许作为托运行李或夹入行李内托运的物品 基于以下原因下列物品不适合运输:由于物品的危险性、不安全性,或由于其重量、尺寸、形状或者性质,或考虑到包括但不限于飞机机型的因素易碎或易腐物品以及锂电

提取3D游戏模型的方法

提取3D游戏模型的方法 网络游戏工具【GameAssassin】是一个针对网络游戏和3D游戏的辅助工具,具有设置3D游戏的线框显示模式,截获3D游戏的模型贴图数据等功能,针对于网络游戏,此软件能够接获游戏所发出并且接受的网络消息,并且能够向服务器直接发送外部的自定义数据。 如果想截游戏模型,首先要到GA的官方下载相关软件和插件。 只需下载GA和导入MAX用的插件就可以。 首先是激活功能,这是必须做的一步,然后尽先一下简单的设置(如图) 再将游戏在任务栏上的完整名称输入到“自定义截取”中。然后在进入游戏。 切记是先运行GA再运行游戏,如果无法确认游戏的名称 可以在运行GA之前先运行游戏,记住游戏在任务栏上的名称 如果名称太长,显示不完整,可以查看任务管理器,确认后退出游戏。 在顺利进入游戏以后,我们会在屏幕的左上角看到“GA”两个彩色字母,这就说明在本游戏中GA运行成功,如果没有显示,就说明没有成功,就无法进行截取(如果不显示的话,就试着Alt+Tab切到GA主截面,选中游戏名称,点击“截取”,如果还不显示,可能就是操作步骤出现了错误)。如果没什么问题,就按下热键Alt+F7截取模型。 【建议在模型比较少的界面下截取,例如选人截面】

按下热键后,我们切到GA的主目录观察文件夹“魔兽世界”中是否已经生成OBJ模型文件,如果什么都没有,就再切回来,再按两遍热键。如果还没有OBJ文件,或是出现“非法操作”的话,那么退出GA,从新截取游戏。

如果没问题了,那么我们就进入模型观察器3D View中,将主人公的模型碎片从新组合,选择你认为是主人公身体一部分的模型,将其添加到组合物体中去。(如果在选取模型碎片文件时提示模型打开失败的话,那么建议你换个显卡。) 拼合好模型后,如果没问题的话,就将组合好的模型保存为列表文件

出行常识--飞机型号

出行常识--飞机型号

飞机型号大小如何区别 大型宽体飞机:座位数在200以上,飞机上有双通道通行 747 波音747,载客数在350-400人左右。(747、74E均为波音747的不同型号)777 波音777,载客在350人左右。(或以77B作为代号) 767 波音767,载客在280人左右 M11 麦道11,载客340人左右 340 空中客车340,载客350人左右 300 空中客车300,载客280人左右(或以AB6作为代号) 310 空中客车310,载客250人左右 ILW 伊尔86,苏联飞机,载客300人左右 中型飞机:指单通道飞机,载客在100人以上,200人以下 M82 M90 麦道82,麦道90载客150人左右 737 738 733 波音737系列载客在130-160左右 320 空中客车320,载客180人左右 TU5 苏联飞机,载客150人左右 146 英国宇航公司BAE-146飞机,载客108人 YK2 雅克42,苏联飞机,载客110人左右 小型飞机:指100座以下飞机,多用于支线飞行 YN7 运7,国产飞机,载客50人左右 AN4 安24,苏联飞机,载客50人左右 SF3 萨伯100,载客30人左右

ATR 雅泰72A,载客70人左右 美国波音公司和欧洲空客公司是世界上两家最大的飞机制造商。波音是世界最大的航空航天公司,1997年波音与麦道公司合并,其主要民机产品包括717、737、747、757、767、777和波音公务机。全球正在使用中的波音喷气客机达11000多架。欧洲空客公司成立于1970年,如今已成为美国波音飞机公司在世界民用飞机市场上的主要竞争对手。30年来,该公司共获得来自175家客户的订货4200余架。 航班号--所包括了那些信息 随着生活水平的提高,乘坐飞机出行已经越来越普遍.无论是出门远行,还是接送亲友,相信您对航班号一定不会陌生.根据航班号,您才知道航班的起降时间.如果您乘坐的飞机由北京飞往西安,航班号为CA1206,您了解它所代表的含义吗? 我国国内航班号的编排是由航空公司的两字代码加4位数字组成,航空公司代码由民航总局规定公布.后面四位数字的第一位代表航空公司的基地所在地区,第二位代表航班基地外终点所在地区,其中数字1代表华北、2为西北、3为华南、4为西南、5为华东、6为东北、8为厦门、9为新疆,第三、第四位表示航班的序号,单数表示由基地出发向外飞的航班,双数表示飞回基地的回程航班. 以CA1206为例,CA是中国国际航空公司的代码,第一位数字1表示华北地区,国航的基地在北京;第二位数字2表示西北,西安属西北地区;后两位06为航班序号,末位6是双数,表示该航班为回程航班. 再比如CZ3151,深圳&mdash北京航班,CZ为南方航空公司的代码,第一位数字3表示华南地区,南航的基地在广州;1表示华北,北京属于华北地区;51为航班序号,单数为去程航班. 国际航班号的编排,是由航空公司代码加3位数字组成.第一位数字表示航空公司,后两位为航

机场相关常识

[机场知识]机场相关常识 民用机场系统 由各类机场设施组成的系统,以便实现其服务功能。机场的功能可以分为三个方面: 为飞机运行服务,提供旅客、货物运输服务和其他服务。机场的活动是以旅客(包括行李、货物、邮件等)为中心的。他们的活动范围包括空中空间和陆上空间两方面。按机场的活动内容,机场系统可分为两大部分: 空域-受机场塔台控制指挥的控制空间,包括等候空区、进近净空区等;陆域-又可分为两个活动区: 飞行区,系供飞机活动(如起飞、降落、地勤服务、维修、装载、卸脱等)的陆域,包括跑道、滑行道、停机坪、待飞小场地及有关服务设施等;服务区(也称航站区),系为旅客、货物、邮件运输的服务及为飞行技术服务的设施,包括候机楼、停机坪、停车场以及指挥塔台、通信台站等。 跑道 陆地机场上供飞机着陆和起飞用的一块长方形场地。跑道是机场的重要组成部分,在整个机场的平面布局中,跑道的位置和数量是起主导作用的。它不仅影响机场本身的平面布置,而且影响机场在城市中的位置选择。跑道的布置直接影响机场的用地规模、净空限制的范围、噪声影响的范围,也受到机型、风象、运量的因素的影响。它们之间的关系如下图所示。 跑道的方位 飞机的起飞、降落必须逆风进行。逆风风速越大,起飞、起落猾跑的距离越短,并增加安全性;而侧风对起、降安全有影响。早期的飞机重量小,抗侧风的能力差,必须随着机场的风向相应的改变飞机起飞或降落的方位。因此,早期的机场是整片的无人工道面的飞行场地。随着飞机重量增加和抗侧风性能的提高,整片的飞行场地已不能满足要求或者很不经济,于是开始出现了带状跑道。带状跑道的形式也经历了由繁到简的发展过程。三十年代,因飞机抵抗侧风的性能还较差,为保证飞机在各种风向情况下起降,修建了多向式或切线式跑道。五十年代,邮运喷气式飞机的出现,飞机进一步向大

飞机常识及其飞行学习知识普及其课程

飞机常识及飞行知识普及课程 本内容由[台风]发表于盛唐 第一课飞机的一般知识 飞机是目前最主要的飞行器。它广泛地用于军事和国民经济两方面。本节简要介绍飞机的主要组成部分及其功用,操纵飞机的基本方法,以及机翼的形状等问题。 一、飞机的主要组成部分及其功用 自从世界上出现飞机以来,飞机的结构形式虽然在不断改进,飞机类型不断增多,但到目前为止,除了极少数特殊形式的飞机之外,大多数飞机都是由下面五个主要部分组成,即:机翼、机身、尾翼、起落装置和动力装置。它们各有其独特的功用。 (一)机翼 机翼的主要功用是产生升力,以支持飞机在空中飞行;也起一定的稳定和操纵作用。在机翼上一般安装有副翼和襟翼。操纵副翼可使飞机滚转;放下襟翼能使机翼升力增大。另外,机翼上还可安装发动机、起落架和油箱等。机翼有各种形状,数目也有不同。历史上曾出现过双翼机,甚至还出现过多翼机。但现代飞机一般都是单翼机。 (二)机身 机身的主要功用是装载乘员、旅客、武器、货物和各种设备;还可将飞机的其它部件如尾翼、机翼及发动机等连接成一个整体。 (三)尾翼 尾翼包括水平尾翼和垂直尾翼。水平尾翼由固定的水平定面和可动的升降舵组成。垂直尾翼则包括固定的垂直安定面和可动的方向舵。尾翼的主要功用是用来操纵飞机俯仰和偏转,并保证飞机能平稳地飞行。 (四)起落装置 起落装置是用来支持飞机并使它能在地面和水平面起落和停放。陆上飞机的起落装置,大都由减震支柱和机轮等组成。它是用于起飞、着陆滑跑,地面滑行和停放时支撑飞机。 (五)动力装置 动力装置主要用来产生拉力或推力,使飞机前进。其次还可以为飞机上的用电设备提供电源,为空调设备等用气设备提供气源。 现代飞机的动力装置,应用较广泛的有四种:一是航空活塞式发动机加螺旋桨推进器;二是涡轮喷气发动机;三是涡轮螺旋桨发动机;四是涡轮风扇发动机。随着航空技术的发展,火箭发动机、

飞机基础知识

飞机基础知识 1、基础: 三轴六余度的通用标准: 首先大家要记住这个图,这将是贯穿始终最重要的一个图,后边简单讲到气动导数的时候会再用到。这图代表了三轴6个余度(或DOF,自由度),前后,左右,上下 (x,y,z)三条轴向以及绕轴旋转的余度。记住图中箭头的方向代表了正值的方向(可能跟你学过的直角坐标系正好相反!) 三轴六余度通用标准表

静稳定性的概念: 理解这个,有一颗吃货的心就好懂了:首先你有一个碗,碗里有一颗鸡蛋,你左摇右晃这个碗,放下碗后鸡蛋还是要回到碗底,或者说,鸡蛋在受到扰动后会有自然想回到碗底的趋势,这就是静态稳定性,简称静稳。 反之,鸡蛋立在西瓜上,静态是不稳定的,这就是静不稳,虽然也能配平!飞机也是这样,但是稍微一扰动,他就离稳定状态越来越远了。 鸡蛋放在菜板上,这叫中立稳定:我推它一下,它就停在新的地方,没有想回或者想离开的趋势,换句话说任何地方都能配平! 动态稳定性: 鸡蛋每次都会想往碗询问滚动这叫做静稳,因为摩擦力,每次左摇右晃的幅度越来越小,越来越趋近于在碗底部静止这叫做动态稳定性,简称动稳。 假设理想状态下碗和鸡蛋没有摩擦力,没有空气阻力,你会看到鸡蛋会一直保持左摇右晃下去不衰减,这叫静态稳定+动态中立。 假设碗底有个吹风的喷口,每次越过碗底都会增加向另一边的运动幅度,摆动越来越大,但是每次都还想回到碗底,这叫做静态稳定+动态不稳定。

阻尼系统: 跟弹簧不一样,阻尼系统的阻力是与速度相关的。弹簧的压力是跟位移有关,压缩距离越大,弹力越大,但本身(理想弹簧)不消耗能量。但阻尼系统是运动速度越大,阻力越大,系统会消耗能量。 俯仰/偏航阻尼: 回想鸡蛋的问题,不管是在碗里、板上还是西瓜上,我们用一层厚厚的粘稠的糖浆包裹起来,虽然鸡蛋还是要回到原来中立位置、停在新的位置、离中立越来越远。 最明显的是速度会变慢,这有啥用呢? 比如碗里的状态,原来的鸡蛋就算想回到碗底,也很可能会越过,并来回滚好几次,但有糖浆后很可能只越过一次,甚至不越过,就可以回到原位了。 (静态稳定+动态十分稳定) 当然糖浆太浓(阻尼太大)会严重减慢鸡蛋回去的速度。从系统控制理论来说,鸡蛋稍稍越过原位(峰值位移的2-5%左右),得到的是一个比较迅速和稳定的状态。 另外,即使是西瓜上立鸡蛋的状态,因为糖浆(阻尼)会大大减缓鸡蛋离开平衡点的速度,我们的反应时间就足够滚动或者移动西瓜来重新控制鸡蛋了。 也就是说,适当的俯仰阻尼设置可以让我们手动控制静不稳的飞机。当然这只是静不稳的一半问题,静不稳还有更严重的问题没解决。 平飞的概念: 简单来说,平飞就是飞机六个余度的所有力和力矩相等,飞机对称的话我们省略掉对称轴的东西,比如滚转和侧滑,那么基本上来说就是: 升力=重力 L=W; 推力=阻力 T=D; 最重要的: 抬头力矩=低头力矩 M=0。 听起来太简单了,但这三个等式将是我们设计飞机时最重要的参照。

相关文档
最新文档