opengl es 从零开始系列9动画基础和关键帧动画

opengl es 从零开始系列9动画基础和关键帧动画
opengl es 从零开始系列9动画基础和关键帧动画

OpenGL ES 从零开始系列9:动画基础和关键帧动画

最初这篇教程我并不打算作为第9章发布,原计划是第10章。在深入了解Opengl ES 2.0 和着色器之前,我想讨论下更基础的:动画。

注意:你可以在这里找到这篇教程的配套代码,新版本的代码已经在西部时间10:14更新了,更新的代码里面修正了一个不能动画的错误。目前为止,想必你已经看过了opengles 最基本的动画形式。通过随时间改变rotate, translate, scale(旋转、移动和缩放)等,我们就可以使物体“动起来”。我们的第一个项目the spinning icosahedron就是这种动画的一个例子。我们把这种动画叫做简单动画。然而,不要被“简单动画”这个名称迷糊,你可以实现复杂的动画,只需要随时间改变一下矩阵变换。但是,如何掌握更加复杂的动画呢?比如说你想让一个人物行走或者表现一个被挤压正要反弹的球。实际上这并不困难。在OpenGL了里面有两种主要实现方法:关键帧动画和骨骼动画。在这章里面我们谈论关于帧动画的话题,下一章(#9b)里面,我们将要谈论的是骨骼动画。

Interpolation & Keys

动画只不过是随着时间改变每个顶点的位置。这是是动画的

本质。当你移动、旋转或缩放一个物体的时候,你实际上是移动了一个物体的所有顶点。如果你想让一个物体有一个更复杂、精细的动画,你需要一个方法按设置时间移动每个顶点。两种动画的基本原理是存储物体关键位置的每一个顶点。在关键帧动画中,我们存储独立关键位置的每一个顶点。而骨骼动画,我们存储虚拟骨骼的位置信息,并且用一些方法指定哪个骨骼会影响动作中的哪些顶点。那么什么是关键帧?如果要最简单的方法说明他们,我们还得回到他们的起源,传统逐格动画,如经典的迪斯尼和华纳兄弟的卡通。早期的动画,一个小的团队就能完成所有的绘画工作。但是随着产品的慢慢变大,那变得不可能,他们不得不进行分工。比较有经验的漫画师成为lead animator(有时叫关key animator)。这些有经验的画师并不画出动画的每一格,而是绘制更重要的帧。比如说一个极端的运动或姿势,体现一个场景的本质。如果要表现一个人物投掷一个球的动画,关键帧是手臂最后端时候的帧,手臂在弧线最顶端的帧,和人物释放球体的帧。然后,key animator会转移到新场景而另一个in-betweener(有时叫rough in-betweener)会算出关键帧之间的时间间隔,并完成这些关键帧之间帧的绘画。比如一个一秒钟的投掷动画,每秒12帧,他们需要指出怎样在首席动画师绘制的关键帧中间完成剩下的9帧。三维关键帧动画的概念也是一样。你有动作中关键位置的顶点数据,然

后插值算法担当rough in-betweener的角色。插值将是你在三维动画里面用到的最简单的数学算法。或许我们看一个实际的例子会更明白一点。让我们只关注一个顶点。在第一个关键帧,假设是在原点(0 ,0,0)。第二个关键帧,假设那是在(5、5、5),并且在这两个关键帧之间的时间间隔是五秒(为了计算方便)。动画的一秒钟,我们只需要表现出这一秒前后两个顶点在每个坐标轴上的变化。所以,在我们的例子中,两个关键帧在x,y,z轴总共移动了5个单位(5减去0等于5)。一秒钟的动画走了1/5的路程,所以我们添加5的1/5到在第一关键帧的x,y,z轴上面,变成(1, 1, 1)。目前数值算出来的过程并不优雅,但是数学算法是一样的。算出总距离,算出与第一关键帧之间流逝的时间比例,两种相乘再加上第一关键帧的坐标值。这是最简单的插值,叫线性插值,适用于大部分情况。更加复杂的算法,要权衡动画的长度。例如在Core Animation中,提供了几种"ease in", "ease out", or "ease in/out"等几种选项。也许我们会在以后的文章中讨论非线性插值。不过现在,为了保持简单易懂,我们继续讨论线性插值。你可以通过改变关键帧的数量和它们的时间间隔,完成绝大多数动画。

Keyframe Animation in OpenGLES

让我们看一个OpenGL中简单动画的例子。当一个传统的手工绘画师被训练以后,他们做的第一件事情就是做一个能够

被挤压的而且正在反弹的小球。这同样适合我们,程序会像下面这样:让我们用Blender(或者任何你想用的3d程序,如果你有方法输出vertex ,normal data的数据用人工的方法。在这个例子里面我会用Blender export script,它能生成一个有顶点数据的头文件)创建一个球。我开始在原点创建一多面体,并且重新命名为Ball1,然后我保存这个文件。使用我的脚本渲染并且输出ball1。你可以在这里找到这个帧的渲染文件。现在,我们按另存为(F2)保存一个Ball2.blend 的副本。我重命名为Ball2以便于输出脚本使用不同的名字命名数据类型。接着点击tab键进入编辑模式,点击A移动和缩放球体上的点,直到球体被压扁。保存压扁的球然后输出到Ball2.h。你可以在这里找到压扁的球的资料。到这里,我们有两个头文件,每个文件里面都包包含着我的动画里面要用到的每个帧的顶点数据。从my OpenGL ES template开始工作,我先在GLViewControler.h定义了一些新的值,它能帮助我追踪小球的运动。#define kAnimationDuration 0.3 enum animationDirection {

kAnimationDirectionForward = YES, kAnimationDirectionBackward = NO

};

typedef BOOL AnimationDirection;

因为我将是球在2个关键帧直接来回移动,我需要记录他的轨迹是向前或向后。我也设置一个值去控制两个帧之间的运动速度。然后在GLViewController.m里面,我重复在两个帧之间插值,如下(不要担心,我会解释的):

- (void)drawView:(UIView *)theView

{

static NSTimeInterval lastKeyframeTime = 0.0;

if (lastKeyframeTime == 0.0)

lastKeyframeTime = [NSDate timeIntervalSinceReferenceDate]; static AnimationDirection direction = kAnimationDirectionForward;

glClearColor(1.0, 1.0, 1.0, 1.0);

glClear(GL_COLOR_BUFFER_BIT |

GL_DEPTH_BUFFER_BIT);

glLoadIdentity();

glTranslatef(0.0f,2.2f,-6.0f);

glRotatef(-90.0, 1.0, 0.0, 0.0); // Blender uses Z-up, not Y-up like OpenGL ES

static VertexData3D ballVertexData[kBall1NumberOfVertices]; glColor4f(0.0, 0.3, 1.0, 1.0);

glEnable(GL_COLOR_MATERIAL);

NSTimeInterval timeSinceLastKeyFrame = [NSDate timeIntervalSinceReferenceDate]

- lastKeyframeTime;

if (timeSinceLastKeyFrame > kAnimationDuration) { direction = !direction;

timeSinceLastKeyFrame = timeSinceLastKeyFrame - kAnimationDuration;

lastKeyframeTime = [NSDate timeIntervalSinceReferenceDate]; }

NSTimeInterval percentDone = timeSinceLastKeyFrame / kAnimationDuration;

VertexData3D *source, *dest;

if (direction == kAnimationDirectionForward)

{

source = (VertexData3D *)Ball1VertexData;

dest = (VertexData3D *)Ball2VertexData;

}

else

{

source = (VertexData3D *)Ball2VertexData;

dest = (VertexData3D *)Ball1VertexData;

}

for (int i = 0; i < kBall1NumberOfVertices; i++)

{

GLfloat diffX = dest[i].vertex.x - source[i].vertex.x;

GLfloat diffY = dest[i].vertex.y - source[i].vertex.y;

GLfloat diffZ = dest[i].vertex.z - source[i].vertex.z;

GLfloat diffNormalX = dest[i].normal.x - source[i].normal.x; GLfloat diffNormalY = dest[i].normal.y - source[i].normal.y; GLfloat diffNormalZ = dest[i].normal.z - source[i].normal.z; ballVertexData[i].vertex.x = source[i].vertex.x + (percentDone * diffX);

ballVertexData[i].vertex.y = source[i].vertex.y + (percentDone * diffY);

ballVertexData[i].vertex.z = source[i].vertex.z + (percentDone * diffZ);

ballVertexData[i].normal.x = source[i].normal.x + (percentDone * diffNormalX);

ballVertexData[i].normal.y = source[i].normal.y + (percentDone * diffNormalY);

ballVertexData[i].normal.z = source[i].normal.z + (percentDone * diffNormalZ);

}

glEnableClientState(GL_VERTEX_ARRAY);

glEnableClientState(GL_NORMAL_ARRAY); glVertexPointer(3, GL_FLOAT, sizeof(VertexData3D),

&Ball2VertexData[0].vertex);

glNormalPointer(GL_FLOAT, sizeof(VertexData3D),

&Ball2VertexData[0].normal);

glDrawArrays(GL_TRIANGLES, 0, kBall1NumberOfVertices); glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_NORMAL_ARRAY);

}

首先,有一些初始化设置。我创建了一个静态变量来追踪当前帧是否是最后一帧,这用来判定当前流逝的时间。首先我们初始化当前的时间,然后声明变量来追踪我们的动画是向前还是向后的。

static NSTimeInterval lastKeyframeTime = 0.0;

if (lastKeyframeTime == 0.0)

lastKeyframeTime = [NSDate timeIntervalSinceReferenceDate]; static AnimationDirection direction = kAnimationDirectionForward;

然后是一些OpenGL ES一般设置。唯一需要注意的是我把x

轴旋转了-90°。我们知道OpenGL ES使用Y轴向上的坐标体系,同样的我们旋转为Z轴向上。

glClearColor(1.0, 1.0, 1.0, 1.0);

glClear(GL_COLOR_BUFFER_BIT |

GL_DEPTH_BUFFER_BIT);

glLoadIdentity();

glTranslatef(0.0f,2.2f,-6.0f);

glRotatef(-90.0, 1.0, 0.0, 0.0); // Blender uses Z-up, not Y-up like OpenGL ES

接下来,声明一个静态数组来存储插值数据:

static VertexData3D

ballVertexData[kBall1NumberOfVertices];

为了简单,我设置了一个颜色并且开启了color materials。我不想使使用texture(纹理)或者materials(材质)使这个例子变得更加混乱。

glColor4f(0.0, 0.3, 1.0, 1.0);

glEnable(GL_COLOR_MATERIAL);

现在我计算出上一个帧过去到现在的时间,如果这个时间大于动画时长,改变动画的运动方向。

NSTimeInterval timeSinceLastKeyFrame = [NSDate timeIntervalSinceReferenceDate]

- lastKeyframeTime;

if (timeSinceLastKeyFrame > kAnimationDuration) { direction = !direction;

timeSinceLastKeyFrame = timeSinceLastKeyFrame - kAnimationDuration;

lastKeyframeTime = [NSDate timeIntervalSinceReferenceDate]; }

NSTimeInterval percentDone = timeSinceLastKeyFrame / kAnimationDuration;

为了适应双向动画,我声明了两个指针指向源帧和目的帧的数据,并且根据当前的方向指向适当的数据数组。

VertexData3D *source, *dest;

if (direction == kAnimationDirectionForward)

{

source = (VertexData3D *)Ball1VertexData;

dest = (VertexData3D *)Ball2VertexData;

}

else

{

source = (VertexData3D *)Ball2VertexData;

dest = (VertexData3D *)Ball1VertexData;

}

最后,对于插值。正是我们前面谈论到的是一个相当普遍的线性插值:

for (int i = 0; i < kBall1NumberOfVertices; i++)

{

GLfloat diffX = dest[i].vertex.x - source[i].vertex.x;

GLfloat diffY = dest[i].vertex.y - source[i].vertex.y;

GLfloat diffZ = dest[i].vertex.z - source[i].vertex.z;

GLfloat diffNormalX = dest[i].normal.x - source[i].normal.x; GLfloat diffNormalY = dest[i].normal.y - source[i].normal.y; GLfloat diffNormalZ = dest[i].normal.z - source[i].normal.z; ballVertexData[i].vertex.x = source[i].vertex.x + (percentDone * diffX);

ballVertexData[i].vertex.y = source[i].vertex.y + (percentDone * diffY);

ballVertexData[i].vertex.z = source[i].vertex.z + (percentDone * diffZ);

ballVertexData[i].normal.x = source[i].normal.x + (percentDone * diffNormalX);

ballVertexData[i].normal.y = source[i].normal.y + (percentDone * diffNormalY);

ballVertexData[i].normal.z = source[i].normal.z + (percentDone * diffNormalZ);

}

清理环境

glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_NORMAL_ARRAY); glVertexPointer(3, GL_FLOAT, sizeof(VertexData3D),

&Ball2VertexData[0].vertex);

glNormalPointer(GL_FLOAT, sizeof(VertexData3D),

&Ball2VertexData[0].normal);

glDrawArrays(GL_TRIANGLES, 0, kBall1NumberOfVertices); glDisableClientState(GL_VERTEX_ARRAY);

glDisableClientState(GL_NORMAL_ARRAY);

}

不太难吧?只是些除法,乘法和加法。比起我们前面的经历,这算不了什么。这是基本技术的应用,例如在Id的老游戏里面使用的MD2文件格式。和我这里所作的一样,每个动画都使用了关键帧动画。Milkshape之后的版本支持其它文件格式,同样可以使用关键帧做复杂的动画。如果你想检查这个弹球,你可以下载Xcode project亲自运行。并不是所有的3 D动画都是用关键帧实现的,但是插值是复杂动画的基本原理。请继续关注part 9 b,我们将要使用插值实现一个被称为骨骼动画的更复杂的动画。在进入下一篇关于骨骼动画的文章之前,让我们先花点时间来了解一个马上会使用到的新数据类型:四元数[译者注:关于四元数的概念可以参考这个链接:点我]。我们用四元数存储单一骨骼在3个轴线上的旋转信息,换句话说,存储的是骨骼指向的方向。在下一部分介绍的仿真骨骼动画中,你将会看到,模型的顶点是同一个或多个骨骼相关联的,当骨骼移动时它们也会随之变化。相对于将欧拉角信息存储在3个GLfloats变量或一个Vector3D 变量里来说, 使用四元数有2个优点:1.四元数不会造成万向节死锁(gimbal lock),但是欧拉角容易造成万向节死锁,使用四元数能够让我们的3D模型能够全方位的移动。2.相比

于给每个欧拉角做矩阵旋转转换计算,使用四元数结合多角度旋转可以显著的减少计算量。从某些方面来看,四元数极其复杂且难于理解。它们是高级数学:完全疯狂的符咒。幸运的是,你不需要完全理解它们背后的数学含义。但是,我们现在需要使用它们来完成骨骼动画,所以还是值得我们花费些时间来讨论下它们的概念和怎么使用它们。Discovery 探索从数学上讲,四元数是复数的一个扩展延伸,于1843年由Sir William Rowan Hamilton 发现。技术上讲,四元数表现为实数之上的4维正规可除代数。Zoiks!更简单的讲,四元数被认为是第四维度用来计算笛卡尔坐标中的3个坐标值。好吧,一切可能不那么简单,对吧?先别怕,如果你不精通高等数学,四元数可能会让你头疼。但是,如我之前所说,如果你只是使用它们,完全不必深入了解。这玩意和你见过的一些概念是非常类似的。不知你是否还能想起我们在3维空间里涉及到的4X4矩阵的矩阵转换。当我们使用已转换的数据的时候,忽略了第4个值。我们可以把这里的第四个值当成四元数,为计算提供了一个位置。数学范畴内,请不要跟我说——过度简化有助于凡人在四元数世界里占有一席之地,有所作为。四元数在探索时代里被认为是相当创新的,但最繁荣的时期却如此短暂。在1880中期,向量微积分开始在计算领域取代四元数理论,因为它用了一种更为容易理解和描述的概念描述了同样的现象。Not Quite Dead

Yet!虽死犹生但在20世纪,四元数又重新获宠。正如我们在part 7里讨论的,有一个被称为gimbal lock 的现象,当你在每个轴线单独做旋转转换的时候就会发生,此现象的危害就是可能导致在三个轴中的一个轴上停止旋转。尽管事实是四元数源于复数和理论数学,但它们都有实际应用。其中一个实际应用是三轴线上旋转角的展现。由于四元数用四个维度展示了笛卡尔(或三轴)旋转,此展现不会导致gimbal lock,而且你可以在四元数和旋转矩阵之间,四元数和欧拉角之间进行无损转换。这使得存储某些对象的旋转信息相当完美,比如。。。骨骼框架中的单独骨骼?不需要存贮3轴的角信息,而是存储一个单独的四元数。四元数和矩阵一样,可以相乘,且存储于不同四元数中的旋转值通过相乘来合并计算。四元数乘积和2个旋转矩阵乘积的结果是完全一样的,考虑到减少计算量,这意味着除了要避免gimbal lock,还要减少每次程序循环运行的FLOPS(每秒浮点运算次数)。和矩阵乘法相比,四元数乘法不仅步骤少,而且可以通过一个四元数表达3轴所有数据。如果通过Vector3D 或3个GLfloats来存储旋转信息,我们经常不得不做3次矩阵乘法——每轴都要算一次。结论是,通过把存储旋转的独立角信息存为四元数,可以带来可观的性能提升。

The Quaternion Struct 四元数结构体从数据上看来,四元数只

不过是比Vector 3D多加了一个GLfloat,经常把它当成w字段。所以对我们来说一个四元数就象这样:typedef struct { GLfloat x; GLfloat y; GLfloat z; GLfloat w;} Quaternion3D;Normalizing a Quaternion 四元数归一化这个

十分简单。四元数代表空间里的一个方向,就像Vector3Ds,实际距离的值并不在意,并且在进行一些计算之前/之后使他们正常下降到1.0。完成这些我们可以这样做:static inline void Quaternion3DNormalize(Quaternion3D

*quaternion){ GLfloat magnitude; magnitude =

sqrtf((quaternion->x * quaternion->x) +

(quaternion->y * quaternion->y) +

(quaternion->z * quaternion->z) +

(quaternion->w * quaternion->w));

quaternion->x /= magnitude; quaternion->y /= magnitude; quaternion->z /= magnitude;

quaternion->w /= magnitude;}Creating a Quaternion from a Rotation matrix 从一个旋转矩阵中创建一个四元数如果我

们没法在四元数同其他的对象转换过程中保存旋转角度信

息的话,四元数对我们来说还是没用的。首先我们从一个旋转矩阵中创建一个四元数。代码如下:static inline Quaternion3D Quaternion3DMakeWithMatrix3D(Matrix3D matrix){ Quaternion3D quat; GLfloat trace, s; trace

= matrix[0] + matrix[5] + matrix[10]; if (trace > 0.0f) { s = sqrtf(trace + 1.0f); quat.w = s * 0.5f;

s = 0.5f / s; quat.x = (matrix[9] - matrix[6]) * s; quat.y = (matrix[2] - matrix[8]) * s; quat.z = (matrix[4] - matrix[1]) * s; } else { NSInteger biggest; enum {A,E,I}; if (matrix[0] > matrix[5])

if (matrix[10] > matrix[0]) biggest = I; else biggest = A; else if (matrix[10] > matrix[0]) biggest = I;

else biggest = E; switch (biggest) { case A: s = sqrtf(matrix[0] - (matrix[5] + matrix[10]) + 1.0f);

if (s > QUATERNION_TRACE_ZERO_TOLERANCE) { quat.x = s * 0.5f;

s = 0.5f / s; quat.w = (matrix[9] -

matrix[6]) * s; quat.y = (matrix[1] + matrix[4]) * s; quat.z = (matrix[2] + matrix[8]) * s; break; } s = sqrtf(matrix[10] - (matrix[0] + matrix[5]) + 1.0f);

if (s > QUATERNION_TRACE_ZERO_TOLERANCE) { quat.z = s * 0.5f;

s = 0.5f / s; quat.w = (matrix[4] -

matrix[2]) * s; quat.y = (matrix[9] + matrix[6]) * s; break; } s = sqrtf(matrix[5] - (matrix[10] + matrix[0]) + 1.0f);

if (s > QUATERNION_TRACE_ZERO_TOLERANCE) { quat.y = s * 0.5f;

s = 0.5f / s; quat.w = (matrix[2] - matrix[8]) * s; quat.z = (matrix[6] + matrix[9]) * s; quat.x = (matrix[4] + matrix[1]) * s; break; } break; case E: s = sqrtf(matrix[5] - (matrix[10] + matrix[0]) + 1.0f);

if (s > QUATERNION_TRACE_ZERO_TOLERANCE) { quat.y = s * 0.5f;

s = 0.5f / s; quat.w = (matrix[2] - matrix[8]) * s; quat.z = (matrix[6] + matrix[9]) * s; quat.x = (matrix[4] + matrix[1]) * s; break; } s = sqrtf(matrix[10] - (matrix[0] + matrix[5]) + 1.0f);

if (s > QUATERNION_TRACE_ZERO_TOLERANCE) { quat.z = s * 0.5f;

s = 0.5f / s; quat.w = (matrix[4] -

matrix[2]) * s; quat.y = (matrix[9] + matrix[6]) * s; break; } s = sqrtf(matrix[0] - (matrix[5] + matrix[10]) + 1.0f);

if (s > QUATERNION_TRACE_ZERO_TOLERANCE) { quat.x = s * 0.5f;

s = 0.5f / s; quat.w = (matrix[9] - matrix[6]) * s; quat.y = (matrix[1] + matrix[4]) * s; quat.z = (matrix[2] + matrix[8]) * s; break; } break; case I: s = sqrtf(matrix[10] - (matrix[0] + matrix[5]) + 1.0f);

if (s > QUATERNION_TRACE_ZERO_TOLERANCE) { quat.z = s * 0.5f;

s = 0.5f / s; quat.w = (matrix[4] - matrix[1]) * s; quat.x = (matrix[8] + matrix[2]) * s; quat.y = (matrix[9] + matrix[6]) * s; break; } s = sqrtf(matrix[0] - (matrix[5] + matrix[10]) + 1.0f);

if (s > QUATERNION_TRACE_ZERO_TOLERANCE) { quat.x = s * 0.5f;

s = 0.5f / s; quat.w = (matrix[9] -

matrix[4]) * s; quat.z = (matrix[2] + matrix[8]) * s; break; } s = sqrtf(matrix[5] - (matrix[10] + matrix[0]) + 1.0f);

if (s > QUATERNION_TRACE_ZERO_TOLERANCE) { quat.y = s * 0.5f;

s = 0.5f / s; quat.w = (matrix[2] - matrix[8]) * s; quat.z = (matrix[6] + matrix[9]) * s; quat.x = (matrix[4] + matrix[1]) * s; break; } break; default:

break; } } return quat;}好的,如果你想真正知道这里是怎么工作的。你需要了解矩阵运算、欧拉旋转理论、特征值和纹理。更不用说理解旋转在矩阵里的表示方法。当你完成你的数学博士学位,你可以回过头用它来解释剩余的usl。你会发现这个函数中使用的算法都是Matrix的FAQ上用伪代码列出来的。Creating a Rotation Matrix from a Quaternion 从一个四元数中创建旋转矩阵这另外的一个方法相对简单些。并且这个基本算法来自于Matrix FAQ,虽然我需要把它转换成行优先的顺序。static inline void

Matrix3DSetUsingQuaternion3D(Matrix3D matrix, Quaternion3D quat){ matrix[0] = (1.0f - (2.0f * ((quat.y *

电工基础试卷试题

第五章正弦稳态电路 5-1、已知i ab =(314t-45°) (i ab 以 A 为单位,t 以 s 为单位) (1)试求它的幅值、有效值和周期、频率、角频率。 (2)试画出它的波形图,并求t=5 ms时的瞬时值,并说明该瞬时电流的实际方向。 (3)试写出 i ba 的瞬时值表达式,并画出它的波形图。 5-2、已知u 1=220sin(ωt+60°) , u 2 =380sin(ωt-30°), u 1,u 2 以 V 为单位,t 以 s 为单位。 (1)在同一坐标中画出 u 1与u 2 的波形图,并求 t=0 时的瞬时值。 (2)求 u 1与u 2 的相位差,若以 u 1 为参考正弦量,重写它们的瞬时 值表达式。 5-3、把下列复数化为极坐标形式: (1)7.5+ j (2) –+j125 (3) –(4) 、有正弦量 u 1=220sin(ωt+45°), u 2 =380sin(ωt-60°), u 1 ,u 2 以 V 为单位, t 以 s 为单位。试写出表示它们的相量,并用相量法求 u 1+u 2 和u 1 -u 2 。 5-5、一个 220 V 、75 W 的电烙铁接到220V 的工频交流电源上,试求电烙铁的电流、功率及使用10小时所消耗的电能。 5-6、设有一电感线圈,其电阻可略去不计,电感为35mH,将它接到电压为110V的正弦电源上,分别求电源频率在50Hz和500Hz时的感抗,电路电流及电流从零开始的1/4周期中线圈储存的磁场能量。 5-7、一电容接到工频的220V的电源上,测得电流为,求电容器的电容量C.若将电源频率变为500Hz,电路电流变为多大 5-8、电阻为3Ω,电感为12mH的串联电路接到u=220sin(314t+30°)的电源上,其中u以V为单位,t以s为单位,求电路的电流、电阻电压、电感电压的瞬时值表达式,并作相量图。 5-9、图5-1所示电路中,已知Z 1=5+j3Ω,Z 2 =1+j3Ω,Z 3 =1- j2Ω,I 2 =1A, 求总电压,并作相量图。 5-10、一个具有内阻R的电感线圈与电容器串联接到工频100V的电源上,

日语入门1

第一回 大家好!从今天开始,我们要和大家一起从零开始学日语。学习日语,都是从「あいうえお」开始的,虽然有些枯燥无味,但是每个人都是从这里开始学起的。 第1课是「五十音図」。 じゃ、始めましょう。 ◆日语是由假名、汉字、罗马字组成的。五十音按照发音规律可排列成表,叫做“五十音图”。 ◆表的横向称「行」,每行五个假名,共有十行。纵向称「段」,每段十个假名,共有五段。 ◆但其实五十音里假名没50个。 "い"、"え"各出现三次,"う"出现两次,包括拨音"ん"的话,共46个假名。

◆每个假名下面的“罗马字”是近代为了表记的方便才创造的,所以并不代表正确的日语发音。 但在用电脑输入日文时,输入这个罗马字就会出来各个假名。 ◆“五十音图”不仅有「あいうえお」等“平假名”,还有「??ウエオ」等“片假名”。 每个平假名都有各自对应的片假名。例如平假名「あ」的片假名是「?」。 第二回 あ行:あいうえお ??ウエオ (它们代表五个元音,其他各行基本上表示辅音+元音形成清音。) 下面我们进入“发音巩固练习”环节! 愛あい①家いえ②上うえ②甥おい?柿かき?赤あか①秋あき①菊きく?池いけ②恋こい①酒さけ①四季しき②寿司すし②汗あせ①嘘うそ①歌うた②下した?父ちち②地下鉄ちかてつ?月つき②テスト①外そと①夏なつ②西にし?犬いぬ②猫ねこ①兄あに①姉あね②角つの②

?型:表示只有第一拍低,其他各拍都高。 ①型:表示只有第一拍高,以下各拍都低。 ②型:表示只有第二拍高,第一拍和第三拍以下各拍都低。 ③型:表示第二拍,第三拍高,第一拍和第四拍以下各拍都低。 ④型:表示第二拍至第四拍高,第一拍和第五拍以下各拍都低。 ⑤型:表示第二拍至第五拍高,第一拍和第六拍以下各拍都低.。 ⑥型:表示第二拍至第六拍高,第一拍和第七拍以下各拍都低。 第三回 拨音ん:ん(ン)

从零开始学VC系列教程之四并口控制与类的使用

从零开始学VC系列教程之四.并口控制与类的使用 学习目标:掌握VC下并口程序的方法及类的使用. 课程详解: 参照第一章新建一个基于对话框的Vc工程,名称定义为Eg04. 图01 (原文件名:01.JPG) 类型选基于对话框. 在本例中,我们要用到一些资源,现列出如下 WinIo.sys WinIo.dll 这是一个动态库,与WinIo.sys完成同并口的连接. WinIo.lib 这是为静态调用提供的引入库文件.虽然引入库文件和静态库文件都是以Lib为扩展名的,但实际上有本质的区别. WinIo.h 这是IO操作的头文件. ParallelPort.cpp 这是一个并口操作类,用于同WinIo接口,并定义了相关的操作函数.虽然这个类用于同WinIo的操作接口,但这个类并不是从WinIO派生的,只是一个独立的自定义类.至于类的自定义,以前我们也提到过. ParallelPort.h 这是并口类的头文件. 这几个文件是可以从网上下载到的,并不是我做的,所以这个动态库大家就不用问我要源码了,因为我也没有. 首先,把WinIo.lib WinIo.h ParallelPort.cpp ParallelPort.h拷贝到工程目录中,后面马上就要用到.再把WinIo.Dll WinIo.sys 拷贝到工程目录的Debug目录中,以后工程发布后,这两个文件要跟随工程一起. 下面添加引入库到系统中,点击[工程]->[设置]在弹出的对话框中选择[连接]标签,然后在[对象/库模块]中加入WinIo.lib完成后如下图.

图02 (原文件名:02.JPG) 然后加入并口操作类的头文件.一般来说,网上可以下载到的源码都是以类的形式给出的,VC的好处也在于可以把一个操作封装成类,以便在不同的工程中调用.如图,双击类管理器中的Ceg04Dlg在弹出的文件中加入#include "ParallelPort.h" //添加并口类头文件 图03 (原文件名:03.JPG) 同时,还要定义一个类变量,用于并口类的操作. 在刚打开的类定义文件中找到CEg04Dlg类,并加入一个类变量m_Port,完成后如下图所示

电工基础第四章磁场与电磁感应教(学)案

第四章 磁场和电磁感应 第一节 电流的磁效应 一、 磁场 1.磁场:磁体周围存在的一种特殊的物质叫磁场。磁体间的相互作用力是通过磁场传送的。磁体间的相互作用力称为磁场力,同名磁极相互排斥,异名磁极相互吸引。 2.磁场的性质:磁场具有力的性质和能量性质。 3.磁场方向:在磁场中某点放一个可自由转动的小磁针,它N 极所指的方向即为该点的磁场方向。 二、磁感线 1.磁感线 在磁场中画一系列曲线,使曲线上每一点的切线方向都与该点的磁场方向相同,这些曲线称为磁感线。如图所示。 2.特点 (1) 磁感线的切线方向表示磁场方向,其疏密程度表示磁场的强弱。 (2) 磁感线是闭合曲线,在磁体外部,磁感线由N 极出来,绕到S 极;在磁体部,磁感线的方向由S 极指向N 极。 (3) 任意两条磁感线不相交。 说明:磁感线是为研究问题方便人为引入的假想曲线,实际上并不存在。 图5-2所示为条形磁铁的磁感线的形状。 3.匀强磁场 在磁场中某一区域,若磁场的大小方向都相同,这部分磁场称为匀强磁场。匀强磁场的磁感线是一系列疏密均匀、相互平行的直线。 三、电流的磁场 1.电流的磁场 条形磁铁的磁感线 磁感线

直线电流所产生的磁场方向可用安培定则来判定,方法是:用右手握住导线,让拇指指向电流方向,四指所指的方向就是磁感线的环绕方向。 环形电流的磁场方向也可用安培定则来判定,方法是:让右手弯曲的四指和环形电流方向一致,伸直的拇指所指的方向就是导线环中心轴线上的磁感线方向。 螺线管通电后,磁场方向仍可用安培定则来判定:用右手握住螺线管,四指指向电流的方向,拇指所指的就是螺线管部的磁感线方向。 2.电流的磁效应 电流的周围存在磁场的现象称为电流的磁效应。电流的磁效应揭示了磁现象的电本质。

混凝土基础知识完整教程

混凝土基础知识完整教程第一节概述 第二节普通混凝土的组成材料 第三节道路与桥梁工程用石料的技术性质 第四节普通混凝土的技术性质 第五节混凝土外加剂 第六节混凝土的质量检验和评定 第七节普通混凝土的配合比设计 第八节高强高性能混凝土 第九节粉煤灰混凝土 第十节轻混凝土 第十一节特种混凝土 附录:习题与复习思考题

第一节概述 一、混凝土的分类 混凝土是指用胶凝材料将粗细骨料胶结成整体的复合固体材料的总称。混凝土的种类很多,分类方法也很多。 (一)按表观密度分类 1. 重混凝土。表观密度大于2600kg/m3的混凝土。常由重晶石和铁矿石配制而成。 2. 普通混凝土。表观密度为1950~2500kg/m3的水泥混凝土。主要以砂、石子和水泥配制而成,是土木工程中最常用的混凝土品种。 3. 轻混凝土。表观密度小于1950kg/m3的混凝土。包括轻骨料混凝土、多孔混凝土和大孔混凝土等。 (二)按胶凝材料的品种分类 通常根据主要胶凝材料的品种,并以其名称命名,如水泥混凝土、石膏混凝土、水玻璃混凝土、硅酸盐混凝土、沥青混凝土、聚合物混凝土等等。有时也以加入的特种改性材料命名,如水泥混凝土中掺入钢纤维时,称为钢纤维混凝土;水泥混凝土中掺大量粉煤灰时则称为粉煤灰混凝土等等。 (三)按使用功能和特性分类 按使用部位、功能和特性通常可分为:结构混凝土、道路混凝土、水工混凝土、耐热混凝土、耐酸混凝土、防辐射混凝土、补偿收缩混凝土、防水混凝土、泵送混凝土、自密实混凝土、纤维混凝土、聚合物混凝土、高强混凝土、高性能混凝土等等。 二、普通混凝土 普通混凝土是指以水泥为胶凝材料,砂子和石子为骨料,经加水搅拌、浇筑成型、凝结固化成具有一定强度的“人工石材”,即水泥混凝土,是目前工程上最大量使用的混凝土品种。“混凝土”一词通常可简作“砼”。 (一)普通混凝土的主要优点 1. 原材料来源丰富。混凝土中约70%以上的材料是砂石料,属地方性材料,可就地取材,避免远距离运输,因而价格低廉。 2. 施工方便。混凝土拌合物具有良好的流动性和可塑性,可根据工程需要浇筑成各种形状尺寸的构件及构筑物。既可现场浇筑成型,也可预制。 3. 性能可根据需要设计调整。通过调整各组成材料的品种和数量,特别是掺入不同外加剂和掺合料,可获得不同施工和易性、强度、耐久性或具有特殊性能的混凝土,满足工程上的不同要求。 4. 抗压强度高。混凝土的抗压强度一般在7.5~60MPa之间。当掺入高效减水剂和掺合料时,强度可达100MPa以上。而且,混凝土与钢筋具有良好的匹配性,浇筑成钢筋混凝土后,可以有效地改善抗拉强度低的缺陷,使混凝土能够应用于各种结构部位。 5. 耐久性好。原材料选择正确、配比合理、施工养护良好的混凝土具有优异的抗渗性、抗冻性和耐腐蚀性能,且对钢筋有保护作用,可保持混凝土结构长期使用性能稳定。 (二)普通混凝土存在的主要缺点 1. 自重大。1m3混凝土重约2400kg,故结构物自重较大,导致地基处理费用增加。 2. 抗拉强度低,抗裂性差。混凝土的抗拉强度一般只有抗压强度的1/10~1/20,易开裂。 3. 收缩变形大。水泥水化凝结硬化引起的自身收缩和干燥收缩达500×10-6m/m以上,易产生混凝土收缩裂缝。 (三)普通混凝土的基本要求 1. 满足便于搅拌、运输和浇捣密实的施工和易性。 2. 满足设计要求的强度等级。 3. 满足工程所处环境条件所必需的耐久性。

从零开始学电脑,一步一步到高手(硬件篇和软件篇)

硬件篇: 电脑硬件的组成: (菜鸟篇) CPU:目前常见的CPU主要是由2个厂家生产,一个是AMD公司的,高端产品是 速龙系列,低端是闪龙系列,另外就是INTER公司,高端产品是奔4系列,低端是赛扬系列.这两年开始流行的双核CPU在2个公司的高端产品中都有相应的型号 . CPU的知识比较多,具体的可以再网上查询,这里就不多说了.提醒一句,CPU是造不了假的,只有外盒,风扇等附加品存在假货. 主板: 目前的主板的主芯片都是国外制造的,芯片厂家主要有NVIDIA,ATI,INTER,AMD,VIA,SIS等等,各大主板厂家自己研发PCB板来进行主板的设计,分别来满足2个CPU厂家的CPU需要. 显卡:目前的显卡分为独立和集成显卡,生产独立的显卡芯片主要有2个厂家垄断,NVIDIA 和ATI 公司,生产集成显卡芯片有INTER,NVIDIA,ATI,SIS等等.各大显卡厂家利用显卡芯片提供的显卡GPU来进行显卡的设计和组装. 内存:目前所有内存的颗粒都是国外制造的,主要是韩国制造.国内不过是生产PCB板和封装 的过程.内存主要有3种,一种是SD内存(已淘汰),一种是DDR内存,一 种是DDR II代内存.未来还有DDR III代内存. 硬盘:常见的硬盘有三星,西数和希捷,基本上是希捷一枝独秀,容量在20GB以上的基本上都是7400转的,低于20GB的一般都是5400转的,转速越高,硬盘读些数据的速度越快.提醒一句:

硬盘的生产环境要求比较高,所有的硬盘都是国外生产. 机箱+电源:这两样东西没有什么技术含量,都是国内制造. 光驱:常见的有CD-ROM(类似VCD机),CD刻录机(兼容VCD,可以刻录VCD),DVD光驱(类似DVD 机,兼容VCD),康宝(相当于DVD光驱多了个刻录VCD光盘的功能),DVD刻录机(VCD,DVD播放和VCD,DVD刻录功能) 显示器:常见的有两种类型,CRT 和LCD ,一种是普通显示器, 一种是液晶显示器,普通显示器常见的发展过程和电视机相似,尺寸从14 15 17 19 21,屏幕从球面超平视觉纯平物理纯平.液晶显示器尺寸从14 15 17 19寸,目前流行的宽屏有17 19 20 21寸等等.LCD显示器的液晶面板都是国外制造的. 声卡:常见的有集成声卡和独立声卡,绝大多数的主板都集成的有集成声卡,可以满足普通 消费者的是使用.独立声卡一般应用于高端,这里就不多说了. 网卡:常见的有独立和集成网卡,绝大多数的主板都集成有集成网卡,可以满足普通消费者 的使用,独立网卡主要应用于特殊要求的用户.这里不多说了. 键盘+鼠标:相对没有什么技术含量,属于损耗品.跟个人喜好有关系 音箱+耳麦:相对没有什么技术含量,属于损耗品.跟个人喜好有关系. 软驱:基本上已经淘汰,这里就不讨论了. 综述:: 主板就是个平台,把CPU,内存,显卡,硬盘,光驱通过数据线或者直接安装来组成一个工作整体.CPU相当于人的大脑,发出各种指令来协调各个部分的工作,内存是个中转仓库,中转各种指令,数据等等.关机后数据不保留,硬盘是最终载体,所有的数据,程序,歌曲,电影等等都是保存在硬盘中,硬盘中的数据在关机后保留.机箱就是把这个整体固定在一个固定的环境中,通过电源来给各个部分来进行供电,通过显卡来输出显示信号,最后在显示在显示器上.键盘鼠标来进行电脑的各项操作.音箱通过主板上的集成声卡来输出各种声音.网卡是组建局域网或者上网的时候发送和接收数据.电脑的硬件说白了就是能摸的到的都是硬件,摸不到的就属于软件.电脑硬件一般情况下是不容易损坏的,只有软件方面的问题比较多,只有把软件方面的故障全部排除后最后才考虑硬件方面的问题.

量子力学教程-周世勋-课程教案(轻松学量子力学)

量子力学讲义

一、量子力学是什么? 量子力学是反映微观粒子(分子、原子、原子核、基本粒子等)运动规律的理论。 研究对象:微观粒子,大致分子数量级,如分子、原子、原子核、基本粒子等。 二、量子力学的基础与逻辑框架 1.实验基础 ——微观粒子的波粒二象性: 光原本是波 ——现在发现它有粒子性; 电子等等原本是粒子 ——现在发现它有波动性。 2.(由实验得出的)基本图象 —— de Broglie 关系与波粒二象性 Einstein 关系(对波动):E h ν=,h p λ = de Broglie 关系(对粒子): E =ω, p k = 总之,),(),(k p E ω? 3.(派生出的)三大基本特征: 几率幅描述 ——(,)r t ψ 量子化现象 —— ,,,321E E E E = 不确定性关系 ——2 ≥ ???p x 4.(归纳为)逻辑结构 ——五大公设 (1)、第一公设 ——波函数公设:状态由波函数表示;波函数的概率诠释;对波函数性质的要求。 (2)、第二公设 ——算符公设 (3)、第三公设 ——测量公设 ?=r d r A r A )(?)(* ψψ (4)、第四公设 ——微观体系动力学演化公设,或薛定谔方程公设 (5)、第五公设 ——微观粒子全同性原理公设 三、作用 四、课程教学的基本要求 教 材:《量子力学教程》周世勋, 高等教育出版社 参考书:1. 《量子力学》,曾谨言,2. 《量子力学》苏汝铿, 复旦大学出版社 3. 《量子力学习题精选与剖析》钱伯初,曾谨言, 科学出版社

第一章 绪论 §1.1 辐射的微粒性 1.黑体辐射 所有落到(或照射到)某物体上的辐射完全被吸收,则称该物体为黑体。G. Kirchhoff (基尔霍夫)证明,对任何一个物体,辐射本领)T ,(E ν与吸收率)T ,(A ν之比是一个与组成物体的物质无关的普适函数,即 )T ,(f )T ,(A )T ,(E ν=νν (f 与物质无关)。 辐射本领:单位时间内从辐射体表面的单位面积上发射出的辐射能量的频率分布,以)T ,(E ν表示。在t ?时间,从s ?面积上发射出频率在 ν?+ν-ν 范围内的能量为: ν???νs t )T ,(E )T ,(E ν的单位为2 /米焦耳;可以证明,辐射本领与辐射体的能量密度分布的关系为 )T ,(u 4 c )T ,(E ν=ν ()T ,(u ν单位为秒米 焦耳3 ) 吸收率:照到物体上的辐射能量分布被吸收的份额。由于黑体的吸收率为1,所以它的辐射本领 )T ,(f )T ,(E ν=ν 就等于普适函数(与物质无关)。所以黑体辐射本领研究清楚了,就把普适函数(对物质而言)弄清楚了。我们也可以以)T ,(E λ来描述。 ????λ λ ν=λλλν=λλ νν=ννd c )T ,(E d d c d ) T ,(E d d d ) T ,(E d )T ,(E 2 )T ,(E c )T ,(E 2 νν = λ (秒米焦耳?3 ) A. 黑体的辐射本领 实验测得黑体辐射本领 T ,(E λ与λ的变化关系在理论上, ① 维恩(Wein )根据热力学第二定律及用一模型可得出辐射本领 h 32 e c h 2)T ,(E ν-νπ= ν ?? ?=π=k h c c h 2c 22 1(k 为Boltzmann 常数:K 1038.123 焦耳-?)

电工电子实验报告

电工电子实验报告 电工电子综合实验(U)实 验报告 —多功能数 字计时器

摘要 设计搭建一个多功能数字计数器,从0分0秒开始计时, 计到9分59秒后自动清零。具有计时、清零、校分、整点报时的基本功能和闹钟、秒表的附加功能。显示电路使用的是动态显示方式,即只使用一片译码器外加较高频率的时钟控制电路来实现数码管的“同时”显示功能 Abstract Desig n a multi-purpose digital register which can display the time . It starts from 0 mi nute 0 sec on ds, counts after 9 minute 59 sec onds automatic clear zero. The clock has the basic functions of clearing, minute-correcting, beeping in the sharp hour and the stopwatch. We use dyn amic display circuit to display, n amely realiz ing display ing in the same time using one en coder and a high freque ncy.

目录设计目的 二. 设计要求 三. 实验原理 四. 单元电路设计及其电路图 1信号发生电路 2、计时电路 3、显示电路 4、清零电路 5、校分电路 6、报时电路 五. 附加电路 六. 实验感想 七. 实验中遇到的问题 八. 附录 1、工具及器件清单 2、各元件的引脚图及功能表 3、总电路逻辑图 4、参考文献

摄影知识入门(经典入门级教程)

摄影知识入门 傅春山刘文健 第一章一张好照片的三个基本原则 摄影家的眼力 我们在书籍中,网络上常常能看到让我们拍手叫好的美丽的照片,我们也渴望自己能拍出这样的照片来,在摄影论坛上我们常常看到很多摄影初学者看到一幅好照片时问,是什么相机拍的,什么镜头拍的,光圈快门多少?其实这些都只是技术细节,即使知道了这些也无助于拍摄出佳作来。就像尽管知道了达·芬奇用的是什么颜料和画笔,却无法画不出《蒙娜丽莎》。 对于每个初学摄影的人来说,最重要的是拍摄照片时应当追求什么。在通过照片逐步理解这些指导原则的过程中,你会培养出自己的一种意识,懂得在周围世界该追求什么。这种能在周围世界中发现和捕捉到美好画面的能力就是我们所说的"摄影家的眼力"。 接下来,我们就运用几条简明的指导原则告诉你应当追求什么。 三条基本原则 现在我们在看一幅照片时,只集中讨论三条基本原则。 1.一幅好照片要有一个鲜明的主题(有时也称之为题材)。或是表现一个人,或是表现一件事物,甚至可以表现该题材的一个故事情节。主题必须明确,毫不含糊,使任何观赏者一眼就能看得出来。 2.一幅好照片必须能把注意力引向被摄主体,换句话说,使观赏者的目光一下子就投向被摄主体。 3.一幅好照片必须画面简洁,只包括那些有利于把视线引向被摄主体的内容,而剔除或者虚化那些可能分散注意力的内容。 只要根据这三条基本原则开始思考,你就会发现你作为摄影者的生活开始发生变化。

你会用新的标准去观赏一幅美丽的照片。更重要的是你会用全新的方式去观察这大千世界,运用摄影家的眼力通过取景器捕捉画面,在学习的过程中,培养观察、发现、选取周围世界各种主题的能力。 三条基本原则的运用 不论什么时候只要你打算按下快门,必须提醒自己的第一问题是: 第一、这张照片我要表现的主题是什么? 举一张普通的日常生活照来举例,这幅作品 的主题是什么呢?它可能有很多不同的寓意--这 完全取决于你对这个主角的看法了。就拿哈姆雷 特这个角色来说吧,人们对他就争论了几百年, 一百个人心里就有一百个哈姆雷特。一幅成功的 照片对于观赏者来说,也是仁者见仁智者见智。 换句话说,一幅照片的寓意取决于观赏者对它的 理解。这和作者的意图可能一致,也可能相左。 第二,如何把观赏者的视线吸引到被摄主体身上? 市上的照片,熙熙攘 攘的人群中,我们的 一下子注意到这位 背着缝纫机的妇女, 她背着并不轻的缝 纫机穿过集市,靠手 工挣点辛苦钱,但她

必备员工转正申请书模板7篇

【必备】员工转正申请书模板7篇 在人们越来越重视自我提升的今天,有各项事务需要申请书,转正申请书可以使我们的转正请求得到合理表达。你还在为写转正申请书而苦恼吗?下面是作者帮大家整理的员工转正申请书7篇,仅供参考,希望能够帮助到大家。 员工转正申请书篇1 尊敬的公司领导: 我是xx部门的实习(或者试用)保安员xxx,于xxxx年xx月xx日进入本单位工作,担任实习(或试用)保安员一职,在x个月的工作当中xxxxxxx(把自己这段时间的工作简单介绍一下,尤其是取得了哪些成绩,受到什么表扬,然后一下对保安员这份工作的看法,例如强调责任心,最后表表决心,例如以后一定努力工作,在这个平凡但是重要的岗位上发挥更大的作用等等)。希望领导对我对我的转正申请予以批准,为感。 申请人: 年月日员工转正申请书篇2 尊敬的领导: 我于XX年1月1日成为公司的试用员工,到今天3月试用期已满,根据公司的规章制度,现申请转为公司正式员工。 本人工作认真、细心且具有较强的责任心和进取心,勤勉不懈,极富工作热情;性格开朗,乐于与他人沟通,具有良好和熟练的沟通技巧,有很强的团队协作能力;责任感强,确实完成领导交付的工作,和公司同事之间能够通力合作,关系相处融洽而和睦,配合各部门负责人成功地完成各项工作;积极学习新知识、技能,注重自身发展和进步。 刚到公司工作时,对公司的情况了解很少,对于企业对员工的要求和企业的发展方向只是有了一个简单的了解。通过这两个月的工作,我逐渐认识到,公司对员工的要求是全面的,从工作态度到业务能力到个人素质。企业是要全面发展的,如果员工个人的发展跟不上企业发展的速度,那么员工将被企业淘汰。作为公司这样一个高成长性公司中的一名员工,我有着强烈的紧迫感。在工作中我还存在着很多的不足,例如在业务知识和沟通能力上还存在很大欠缺。我会在今后

从零开始学VC系列教程完整版

从零开始学VC系列教程一.信息显示实验 题外话:第一次写教程,不知道该怎么开始.以前见过的教程可能都会介绍比较多的理论然后才开始讲实际操作,我想对于VC,理论讲得太多大家可能更糊涂,所以选择了这个方案,我们先一步步照着做,每一次只介绍一两个知识点,并且把理论放在后面说明,希望大家能喜欢这种方式,并对这种方式提出意见和建议,以便以后章节更适合大家的学习. 或许我写的还不能称之为教程,只是一些操作步骤及说明,通过这些练习,希望能使大家对VC 有一个新的认识.VC的功能是十分强大的,但我们一般并不会用到所有的功能,就像大家熟悉的KeilC一样,其实Keil功能也是很多的,平时也没见谁把Keil的功能都用到了.基于此,我写的这个教程可能在VC专业人士看来比较简单.不是要班门弄斧,而是希望推行上位机技术,形成一个氛围让大家来学习交流,PC机与下位机结合毕竟也是发展的一个方向.望高手谅解小辈的不自量力.同时,我们结合单片机编程,让大家明白上位机控制方法及原理,当然这是今后章节的内容了. 本节内容:学会在文本框中显示文本,学会弹出式对话框使用. 学习目的:信息显示是人机交互的基础,同时,信息显示也为以后的程序调试打下基础. 1.新建工程.打开VC6.0点击[文件]->[新建],弹出如下对话框. 在工程选项中选择MFC AppWizard[exe],选择好工程存入的位置,然后在工程名称中填入工程的名称,例如Eg01,填入Eg01后.VC会在我们选择的路径后自动加入一个以工程名命名的文件夹作为工程目录.完成按[确定]就会进入工程向导,出现以下的提示.

在这个我们选择[基于对话框]就行了.单文档及多文档方式会在以后详细介绍.这里也简要说明一下.①单文档.程序一次只能处理一个文档对象(文件).像写字板,记事本等.②多文档.程序一次可以处理多个对象(文件),像word之类的,可以同时打开多个文件.③基本对话框.程序一般用于处理一些比较小的,工具型的软件.像双龙的ISP下载软件,Easy 51Pro等都是基于对话框.一些不是很复杂的工业软件也通常可以用基于对话框的形式,这种方式的优点是所见即所得,一些控件可以像VB一样拖到工作区就行了.选好以后直接按[完成]就可以了.至于[下一步]的向导,这里我们先不管.然后会进入以下的画面.其中红色及绿色是我的标注,看不清图片可以下载图片放大. 选中静态文本框[TODO:在这里设置对话框控制],单击指标右键,在弹出的快捷菜单中选择[属性Properties]菜单项,弹出如下对话框 修改IDC_STATIC为IDC_FIRSTLABEL,标题可以写为”第一个应用程序”然后关闭这个对话框,就可以看到刚才的静态文本框内容变为”第一个应用程序”了. 在刚才的操作中,我们将静态文本框的ID改为了IDC_FIRSTLABEL,在VC中,ID是控件的标志,不能有相同的ID出现,但允许多个名为IDC_STATIC的ID号.所以,一般并不把文件名命为 IDC_STATIC,除非以后我们不想在程序中改变这个控件的属性.有一些控制,例如GroupBox一般并不在程序中改变什么,所以不改变其ID号.ID是程序访问控件的标识,所以一个应用程序中不能有重复ID. 按下来我们要添加一个按钮. 用鼠标将控件条上的按钮拖到对话框上,可以看到对话框上多了一个按钮.?用上叙方法,改变按钮ID为IDC_BTN1,标题改为”显示”,这样就做好一个按钮了.下面我们为按钮添加代码. 双击按钮,会出现以下的提示框. 按[OK]为按钮添加响应函数,出面以下画面 void CEg01Dlg::OnBtn1()

电工学(少学时)张南编第一章答案学习资料

电工学(少学时)张南编第一章答案

1-1题~1-5题,根据题意,画出电路,通过求解,进一步增强电源、负载、额定值的概念。 1-6:在图1-63中,d 点为参考点,即其电位V d =0,求a 、b 、c 三点的电位V a 、V b 、V c 。 20V 图 1-63 题1-6 Ω 1050V Ω 解:根据电位与电压的关系:a ad b bd c cd V U , V U , V U === 要求电压:需求电流: 0.5(A)60 30 201020102050I ==+++-=。 根据电压降准则: a ad b bd c c d V U 10(I)5010(0.5)5045(V) V U 20(I)10(I)5030(0.5)5035(V) V U 20I 200.510(V) ==?-+=?-+===?-+?-+=?-+===?=?= 1-7:在图1-64中,已知R 1= R 2=5Ω,求电位V a 、V b 、V c 。 Ω01图 1-64 题1-7 Ω 6c Ω4 解:根据电位与电压的关系:V a =U ao ,V b =U bo ,V c =U co ,求电压需求电流: 2(A)30 60 2610482436I ==+++++= 。 根据电压降准则: []。 20(V )24424)(2)I (U V 。 (V)236)34(36)548(I U V 。 (V)2036)82(368)I (U V co c bo b ao a -=-=-+?===+-=+++?-===+?-=+?-==

1-8:在图1-64中,b 为电位器移动触点的引出端。试问R 1和R 2为何值时,b 点电位等于零? 解: ) 6(410R 10R )4(16)/2(24R 24)(2)6(R I 0U V 2122bo b Ω=-=-=Ω=-=-+++?=== 1-9:求图1-65中的电压U ab 图1-65 题1-9 Ω 6ab U R 解:本题不限方法,首先进行化简。R中无电流,电压降为零,图1-65化简为图1-65-1,设参考点O ,U ab = U ao – U bo ,求U ao 。可用多种方法: 图1-65-1 Ω 6ab U (1) 叠加法求U ao ,除源求R ao ; (2) 结点法求U ao ,除源求R ao ; (3) 把电压源转换为电流源,电流源合并,最后把电流源再转换为电压源,如图1-65-2所示。 (4) 用KVL 求回路电流,再用电压降准则求出U ao ,除源求R ao 。 同样,用上面的思路求U bo ,图1-65-2已经是简单电路了,U ab 不难求出。

单反相机入门教程零基础

单反相机摄影教程(经典) 提纲: 一、基础篇 1、认识摄影 2、认识传统胶片摄影 3、认识数码摄影 4、认识数码单反相机 5、认识镜头 二、前期篇 1、掌握基本的概念和技能 2、曝光和对焦 3、光线和色彩 4、传统构图法 5、寻找新视角 三、后期篇 1、端正后期态度 2、后期需要准备些什么 3、常用后期软件 4、Photoshop常用功能 5、Photoshop处理图片实例 6、如何分享 四、升华篇 1、优秀数码摄影人的素质 2、技能训练循序渐进 3、理想主义和责任感 4、艺无止境 五、实践篇 1、风光数码摄影实践 2、人像数码摄影实践 3、微距数码摄影实践 4、其它题材数码摄影实践 基础篇 认识摄影 1、摄影的定义 2、摄影的分类 3、摄影三层次 4、浅谈摄影人的素养 认识传统摄影 1.成像原理 2.照相机的结构 3.曝光、光圈和快门 4.对焦和测光 5.感光度和颗粒

6.传统相机分类 7.传统摄影过程 认识数码摄影 1、数码摄影的过程 2、数码相机类型 3、画幅和像素 4、数码摄影专用名词解释 5、数码摄影和器材的关系 6、数码摄影和胶片摄影比较 认识数码单反相机 1、什么是数码单反相机 2、数码单反相机的特点 3、数码单反相机的选购 4、数码单反的使用和保养 认识镜头 1、焦距和视角 2、景深和虚化 3、镜头种类和用途 4、镜头参数解释 5、如何选购镜头 大家可以看到,这三个图很清晰的表明了成像的过程,如果各位还没有忘记中学物理知识,就更容易理解了。 1、照相机的结构 照相机基本结构 照相机由镜头和机身组成,有的镜头和机身可以拆开,有的不能。 2、曝光、光圈和快门 曝光 曝光就是照相机的感光材料接受影像记录的过程。 所谓曝光准确,则是让一张照片看上去不是太亮或太暗,要达到曝光准确,前期拍摄后后期冲洗,同样重要。 光圈 光圈是一个用来控制光线透过镜头,进入机身内感光面的光量的装置,它通常是在镜头内。对于已经制造好的镜头,我们不可能随意改变镜头的直径,但是我们可以通过在镜头内部加入多边形或者圆型,并且面积可变的孔状光栅来达到控制镜头通光量,这个装置就叫做光圈 光圈f值=镜头的焦距/镜头口径的直径 从以上的公式可知要达到相同的光圈f值,长焦距镜头的口径要比短焦距镜头的口径大。完整的光圈值系列如下: f1,f1.4,f2,f2.8,f4,f5.6,f8,f11,f16,f22,f32,f44,f64 这里值得一题的是光圈f值愈小,在同一单位时间内的进光量便愈多,而且上一级的进光量刚是下一级的两倍,例如光圈从f8调整到f5.6,进光量便多一倍,我们也说光圈开大了一级。对于消费型数码相机而言,光圈f值常常介于f2.8 - f16。,此外许多数码相机在调整光圈时,可以做1/3级的调整。 快门

从零开始学习黑客技术入门教程(基础)

最简单的黑客入门教程 目录 1 黑客简介 (3) 2 保护自己电脑绝对不做黑客肉鸡 (5) 3 抓肉鸡的几种方法 (10) 4 防止黑客通过Explorer侵入系统 (19) 5 SQL注入详解 (22) 5.1 注入工具 (23) 5.2 php+Mysql注入的误区 (24) 5.3 简单的例子 (27) 5.4 语句构造 (30) 5.5 高级应用 (48) 5.6 实例 (57) 5.7 注入的防范 (62) 5.8 我看暴库漏洞原理及规律1 (64) 5.9 我看暴库漏洞原理及规律2 (70) 6 跨站脚本攻击 (75) 6.1 跨站脚本工具 (75) 6.2 什么是XSS攻击 (76) 6.3 如何寻找XSS漏洞 (77) 6.4 寻找跨站漏洞 (78) 6.5 如何利用 (78)

6.6 XSS与其它技术的结合 (81) 7 XPath注入 (82) 7.1 XPath注入介绍 (82) 7.2 XPath注入工具 (87) 声明:文章来源大多是网上收集而来,版权归其原作者所有。

1黑客简介 "黑客"(hacker)这个词通常被用来指那些恶意的安全破坏者。关于"黑客"一词的经典定义,最初来源于麻省理工学院关于信息技术的一份文档,之后便被新闻工作者们长期使用。但是这个在麻省理工被当做中性词汇的术语,却逐渐被新闻工作者们用在了贬义的环境,而很多人也受其影响,最终导致了"黑客"一词总是用于贬义环境。有些人认为,我们应该接受"黑客"一词已经被用滥并且有了新的意义。他们认为,如果不认可这种被滥用的词汇,那么将无法与那些不懂技术的人进行有效的交流。而我仍然认为,将黑客和恶意的骇客(cracker)分开表述,对交流会更有效,比如使用"恶意的安全骇客"会更容易让对方理解我所指的对象,从而能够达到更好的沟通交流效果,也避免了对"黑客"一词的滥用。之所以要区分黑客和恶意骇客,是因为在某些情况下,我们讨论的对象是那些毫无恶意并且不会对安全防御或者用户隐私造成损害的对象,这些人只有用"黑客"这个词来描述才最贴切。如果你只是简单的将"黑客"和"恶意的安全骇客"划等号,将无法在与人交流安全技术问题时,轻松的分辨别人所指的到底是哪种类型的人。黑客和骇客的区别是,黑客仅仅对技术感兴趣,而后者则是通过技术获取职业发展或者谋生。很多黑客和骇客都具有技术天赋,有些骇客据此进行职业发展。当然,并不是每个有技术天赋的人都必须沿着黑客或者骇客的方向发展。黑客这个术语的经典意义是指那些对于事物如何工作非常感兴趣的人,他们修理,制作或者修改事物,并

船舶电工试题

试题一(红色字母是答案) 1、=_______A=_______μA。 A.50/5×10-5 B.5×10-5/5 C.5×10-3/50 D.5×10-5/50 2、电场力推动电荷移动而做功,衡量电场力做功能力大小的物理量是______。 A.电压B.电容C.电流D.电动势 3、不论电路如何复杂,总可归纳为由电源、_______、中间环节(控制装置、导线)三部分组成。 A.电阻 B.电容 C.电感D.负载 4、电流的实际方向与产生这一电流的电子运动方向______。 A.相同B.相反 C.超前90度 D.在直流电路中相反;在交流电路中,相同5、有一额定值为5W,500Ω的线绕电阻,其额定电流为_____,在使用时电压不得超过_____。 A.0.01A/5V B.0.1A/50V C.1A/500V D.1A/50V 6、当电压、电流的参考方向选得一致时,电阻上的电压和电流关系可用下式表示。 A.I=U/R B.I=RU C.R=IU D.I=-U/R 7、电阻串联的特征是电流_____,各电阻分配的电压与其成_____。 A.相同/反比 B.相同/正比 C.不同/反比 D.不同/正比 8、两个电阻相串联接入电路,各分得的电压与其阻值的关系是_____。 A.成正比 B.成反比 C.在直流电路中成正比,在交流电路中成反比 D.在直流电路中成反比,在交流电路中成正比 9、能定量地反映磁场中某点的磁场强弱的物理量是_____。 A.磁通密度 B.磁力线 C.磁通 D.电磁力 10、磁力线用来形象地描述磁铁周围磁场的分布情况,下列说法错误的是_____。 A.每一根磁力线都是闭合的曲线 B.任二根磁力线都不能交叉 C.磁力线的长短反映了磁场的强弱 D.任一根磁力线上的任一点的切线方向即为该点的磁场方向 11、通电导体切割磁力线将会产生感应电动势,确定磁场、导体运动和感应电动 势方向关系应用_____。 A.右手螺旋定律 B.左手定则C.右手定则 D.楞决定律

[学日本语]日语常用会话1000句PDF高清版可打印

日语常用会话1000句PDF高清版可打印 1、はじめまして。 初次见面。 2、どうぞよろしく。 请多关照。 3、よろしくお願いします。 请多关照。 4、こちらこそよろしくお願いします。 也请您多关照。 5、自己(じこ)紹介(しょうかい)いたします。 我来自我介绍一下。 6、これはわたしの名刺(めいし)です。 这是我的名片。 7、わたしは李(り)と申(もう)します。 我姓李。 8、山田さんでいらっしゃいますね。 您是山田先生吧! 9、私は山田です。 我是山田。 10、あのかたはどなたですか。 那位是谁? 11、こちらは社長(しゃちょう)の松本(まつもと)です。 这是我们总经理松本。 12、彼は中国人ではありませんか。 他不是中国人吗? 13、彼は中国人ではありません。 他不是中国人。 14、彼は日本人です。 他是日本人。 15、あなたも日本人ですか。 你也是日本人吗? 16、そうですか。 是吗? 17、はい。 是的。 18、そうです。 是那样的(是的)。 19、いいえ。 不对(不是)。 20、そうではありません。 不是那样的(不是)。 21、いいえ、ちがいます。 不,不对(不是)。 22、よくいらっしゃいました。 欢迎,欢迎。 23、お迎(むか)えにきました。 来欢迎您了。 24、出迎(でむか)えに参(まい)りました。 来欢迎您了。 25、お疲(つか)れでしょう。 路上辛苦了。 26、ちっとも疲(つか)れていません。 一点也不累。 27、それはなによりです。 那太好了。 28、途中(とちゅう)はどうでしたか。 旅途顺利吗? 29、とても順調(じゅんちょう)でした。 很顺利。 30、いつ上海(しゃんはい)をたちましたか。 什么时候离开上海的? 31、日本(にほん)は始(はじ)めてですか。 是第一次来日本吗? 32、皆(みな)さんのご来訪(らいほう)をお待(ま)ちしておりました。我们在等待着各位的光临。 33、わざわざお出迎(でむか)えしていただき、ありがとうございます。承蒙特意来接,深表谢意! 34、お忙(いそが)しいところをありがとうございます。百忙中特意来接,非常感谢! 35、日本(にほん)に来(き)た目的(もくてき)は? 来日本的目的是什么? 36、どのぐらいご滞在(たいざい)の予定(よてい)ですか。 预定停留多久? 37、二年(にねん)ないし三年(さんねん)の予定(よてい)です。 预定二年或三年。 38、このたび日本(にほん)に来(く)ることができて、たいへん嬉しく思っています。 这次能来日本,感到很高兴。 39、たいへんお手数(てすう)をおかけしました。 给您添麻烦了。 40、どういたしまして。 不用客气。 41、おはようございます。 早上好! 42、こんにちは。 你好! 43、こんばんは。 晚上好! 44、おやすみなさい。 晚安(您休息吧)! 45、ご飯(はん)ですよ。 吃饭了! 46、いただきます。 我吃饭啦。 47、ごちそうさま。 承蒙款待,谢谢!

量子力学简明教程

量子力学教案 主讲周宙安 《量子力学》课程主要教材及参考书 1、教材: 周世勋,《量子力学教程》,高教出版社,1979 2、主要参考书: [1] 钱伯初,《量子力学》,电子工业出版社,1993 [2] 曾谨言,《量子力学》卷I,第三版,科学出版社,2000 [3] 曾谨言,《量子力学导论》,科学出版社,2003 [4] 钱伯初,《量子力学基本原理及计算方法》,甘肃人民出版社,1984 [5] 咯兴林,《高等量子力学》,高教出版社,1999 [6] L. I.希夫,《量子力学》,人民教育出版社 [7] 钱伯初、曾谨言,《量子力学习题精选与剖析》,上、下册,第二版,科学出版社,1999 [8] 曾谨言、钱伯初,《量子力学专题分析(上)》,高教出版社,1990 [9] 曾谨言,《量子力学专题分析(下)》,高教出版社,1999 [10] P.A.M.Dirac,The Principles of Quantum Mechanics (4th edition), Oxford University Press (Clarendon),Oxford,England,1958;(《量子力学原理》,科学出版社中译本,1979) [11]https://www.360docs.net/doc/cf14208291.html,ndau and E.M.Lifshitz, Quantum Mechanics (Nonrelativistic Theory) (2nd edition),Addison-Wesley,Reading,Mass,1965;(《非相对论量子力学》,人民教育出版社中译本,1980)

第一章绪论 量子力学的研究对象: 量子力学是研究微观粒子运动规律的一种基本理论。它是上个世纪二十年代在总结大量实验事实和旧量子论的基础上建立起来的。它不仅在进到物理学中占有及其重要的位置,而且还被广泛地应用到化学、电子学、计算机、天体物理等其他资料。 §1.1经典物理学的困难 一、经典物理学是“最终理论”吗? 十九世纪末期,物理学理论在当时看来已经发展到相当完善的阶段。那时,一般物理现象都可以从相应的理论中得到说明: 机械运动(v<

相关文档
最新文档