当前位置:文档之家› 3D编程及Bezier曲线曲面绘制

3D编程及Bezier曲线曲面绘制

3D编程及Bezier曲线曲面绘制
3D编程及Bezier曲线曲面绘制

3D编程及Bezier曲线曲面绘制

一、实验目的

1.3D编程:熟悉视点观察函数的设置和使用;熟悉投影变换函数的设置和使用;熟悉基本3D 图元的绘制

2.了解OpenGL绘制Bezier曲线的方法

二、实验环境

硬件要求:

PC机,主流配置,最好为独立显卡,显存512M以上。

软件环境:

操作系统:Windows XP。

语言开发工具:VC6.0。

三、实验要求:

按照实验内容做实验,保留所作步骤效果截图或演示程序,当场检查,现场计分

四、实验内容

1.3D编程

3D Cube.cpp 为一静止3D立方体,3D Cube2.cpp 为正交投影下的旋转3D立方体,按下鼠标可实现不同方向的旋转。分析3D编程代码与程序结构。

图7-1 静止立方体效果图图7-2 旋转立方体效果图图7-3 旋转茶壶和圆环效果图

1.让静止的立方体绕Z轴不停旋转

2.修改视点,目标点不变,观看显示效果

3. 修改目标点,视点不动,观看显示效果

4. 视点与目标点同时修改,观看显示效果

5. 视点与目标点不变,修改观察体大小,观看显示效果

6. 将正交投影观察体改为透视投影观察体,并设置其大小,观察显示效果

7. 将立方体替换为茶壶,观看显示效果.

选做

2.Bezier曲线绘制

BezierCurve.cpp为绘制bezier曲线的源程序,仔细研读源程序,并作如下修改

1).改变控制点,观察曲线和曲面形状的变化,控制点起什么作用?

2).改写bezier.cpp,增加控制点数目,修改控制点位置,使之成为空间封闭曲线,写出修改

的关键代码及注释(TIPS:OpenGLBezier曲线绘制方法最多只能有8个控制点)

3).根据bezier曲线的性质,改写程序,使之成为两段曲线光滑连接。每段曲线用不同颜

色表示,并画出控制点。

图7-2·Bezier曲线绘制效果

五、函数参考

(一)3D编程

1.视点设置函数

void gluLookAt(GLdouble eyex, GLdouble eyey,GLdouble eyez,GLdouble atx,GLdouble aty,GLdouble atz,GLdouble upx,GLdouble upy,GLdouble upz)

给出矩阵作用于当前矩阵,定义相机位置和方向

视点:eyex, eyey, eyez

目标点:atx,aty,atz

相机向上方向:upx,upy,upz

如果不引用该函数,则eyex=0,eyey=0,eyez=0,atx=0,aty=0,atz=-1,Upx=0,upy=1,upz=0此函数放在display函数中调用

参考坐标系:世界坐标系

2.正交投影变换设置函数

. void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble near,GLdouble far),建立正交投影矩阵,定义一个正平行观察体。距离从相机位置处测量。right>left,top>bottom,far>near

OpenGL中不提供对观察平面的选择功能。近裁减平面永远和观察平面重合。

如果OpenGL不提供投影函数,默认调用为:glOrtho(-1.0,1.0,-1.0,1.0,-1.0,1.0)

3.透视投影变换设置函数

void gluPerspective(GLdouble fov,GLdouble aspect, GLdouble near,GLdouble far),定义一个透视矩阵作用于当前矩阵

fov-近裁剪平面与远裁剪平面的连线与视点的角度,也称视场角(field-of-view angle)

aspect-投影平面的宽与高之比

near,far-近裁剪平面和远裁剪平面离相机(视点)的距离

4.三维基本图形绘制函数

1)立方体绘制函数

void glutWireCube(GLdouble size) //线框模式

void glutSolidCube(GLdouble size) //实体模式

功能:绘制一个边长为size的线框的或实心立方体,立方体的中心位于原点

2)小球绘制函数

.void glutWireSphere(GLdouble Radius, Glint slices,Glint stacks)

void glutSolidSphere(GLdouble Radius, Glint slices,Glint stacks);

功能:绘制一个半径为Radius的线框的的或实心小球,小球的中心点位于原点,slices: 为小球的经线数目,stacks为小球的纬线数目

3)茶壶绘制函数

void glutWireTeapot(GLdouble size);

void glutSolidTeapot(GLdouble size);

功能:绘制一个半径为size的线框的或实心茶壶,茶壶的中心位于原点

参数说明:参数size为茶壶的近似半径,以size为半径的球体可完全包容这个茶壶。

4)圆环绘制函数

.void glutWireTorus(GLdouble innerRadius, GLdouble outerRadius,Glint slices,Glint stacks);

void glutWireTorus(GLdouble innerRadius, GLdouble outerRadius,Glint slices,Glint stacks);

功能:绘制一个半径为size的线框的的或实心圆环体,圆环体的中心位于原点,圆环的内径和外径由参数innerRadius, outerRadius指定

参数说明:innerRadius: 圆环体的内径outerRadius: 圆环体的外径slices: 圆环体的经线数目stacks: 圆环体的纬线数目

(二)Bezier曲线绘制

1)Bezier曲线绘制步骤:

1.Defining Bezier curve

void glMap1{fd} (GLenum target, TYPE u1, TYPE u2, GLint stride, GLint order, const TYPE *points);

●target: 指定控制点所描述的内容

●u1, u2:曲线的参数范围(t),一般u1=0,u2=1;

●stride: 控制点之间的浮点数或双精度的个数

●order: 次数+1,即控制点的数目

●points: 指向控制点的指针

2.Enabling Bezier curve glEnable(GL_MAP1_VERTEX_3);

3.Calculating data points

4.Linking and drawing

?求出Bezier曲线上的详细点

void glEvalCoord1{fd} (TYPE u)

void glEvalCoord1{fd}v (TYPE *u)

?画出Bezier曲线

glBegin(GL_LINE_STRIP);

for (i = 0; i <= 100; i++)

glEvalCoord1f((GLfloat) i/100.0);

glEnd();

?void glMapGrid{f,d} (GLint n,TYPE u1,TYPE u2);

?void glEvalMesh1 (GLenum mode,GLint p1, GLint p2);

?Mode的取值可以是GL_POINT或GL_LINE

?相当于glBegin(GL_LINE_STRIP);

for (i = p1; i <= p2; i++)

glEvalCoord1f(u1+i*(u2-u1)/n);

glEnd();

六、附属程序

(一)3D编程

1.3D Cube.cpp 静止立方体程序

#include

void display()

{ glClear(GL_COLOR_BUFFER_BIT); //清屏

glMatrixMode(GL_MODELVIEW); //矩阵模式设置

glLoadIdentity(); //清空矩阵堆栈

gluLookAt(1.4,1.0,0.8,0.0,0.0,0.0,0.0,1.0,0.0); //设置视点// gluLookAt(1,1.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0);

glColor3f(1,0,0);

// glutWireCube(0.5);

glutSolidCube(0.5); //绘制立方体,立方体中心在坐标原点 glColor3f(0,0,1);

glutWireCube(0.5); //绘制线框立方体,体现边框效果

glutSwapBuffers();

}

void reshape(int w,int h)

{ glViewport(0,0,w,h);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

glOrtho(-1,1,-1,1,0.5,2.5); //定义三维观察体

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

}

void init()

{ glClearColor(0.0,0.0,0.0,0.0);

glLineWidth(3);

//glColor3f(1.0,1.0,1.0);

}

int main(int argc, char** argv)

{ glutInit(&argc,argv);

glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);

glutInitWindowSize(800,800);

glutInitWindowPosition(0,0);

glutCreateWindow("cube");

glutReshapeFunc(reshape);

glutDisplayFunc(display);

init();

glutMainLoop();

}

2.3D Cube2.exe 旋转立方体参考程序

#include"math.h"

#include

int flag=0;

//GLfloat

vertices[][3]={{-1.0,-1.0,1.0},{-1.0,1.0,1.0},{1.0,1.0,1.0},{1.0,-1.0,1.0},{-1.0,-1.0,-1.0},

//{-1.0,1.0,-1.0},{1.0,1.0,-1.0},{1.0,-1.0,-1.0}};

GLfloat

vertices[][3]={{-1.0,-1.0,-1.0},{1.0,-1.0,-1.0},{1.0,1.0,-1.0},{-1.0,1.0,-1.0},{-1.0,-1.0,1.0}, {1.0,-1.0,1.0},{1.0,1.0,1.0},{-1.0,1.0,1.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}};

void init()

{

glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);

glEnable(GL_DEPTH_TEST);

glLineWidth(3);

}

void polygon(int a,int b,int c,int d)

{

/* draw a polygon via list of vertices */

if (flag==0)

{

glBegin(GL_POLYGON);

glColor3fv(colors[a]);

glVertex3fv(vertices[a]);

glColor3fv(colors[b]);

glVertex3fv(vertices[b]);

glColor3fv(colors[c]);

glVertex3fv(vertices[c]);

glColor3fv(colors[d]);

glVertex3fv(vertices[d]);

glEnd();

}

else

{

glColor3f(0,0,0);

glBegin(GL_POLYGON);

glVertex3fv(vertices[a]);

glVertex3fv(vertices[b]);

glVertex3fv(vertices[c]);

glVertex3fv(vertices[d]);

glEnd();

}

}

void colorcube(void)

{

/* map vertices to faces */

polygon(0,3,2,1);

polygon(2,3,7,6);

polygon(0,4,7,3);

polygon(1,2,6,5);

polygon(4,5,6,7);

polygon(0,1,5,4);

}

static GLfloat theta[]={0.0,0.0,0.0};

static GLint axis=2;

void display()

{

// glClear(GL_COLOR_BUFFER_BIT);

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

glLoadIdentity();

gluLookAt(3,3,3,0,0,0,0,1,0);

glRotatef(theta[0],1.0,0.0,0.0);

glRotatef(theta[1],0.0,1.0,0.0);

glRotatef(theta[2],0.0,0.0,1.0);

glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);

flag=0;

colorcube(); //绘制彩色立方体

glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);

flag=1;

colorcube(); //绘制彩色立方体

glutSwapBuffers();

}

void spinCube()

{

theta[axis]+=0.01;

if (theta[axis]>360.0) theta[axis]-=360.0;

glutPostRedisplay();

}

void mouse(int btn, int state,int x, int y)

{

if (btn==GLUT_LEFT_BUTTON && state==GLUT_DOWN) axis=0; if (btn==GLUT_MIDDLE_BUTTON && state==GLUT_DOWN) axis=1;

if (btn==GLUT_RIGHT_BUTTON && state==GLUT_DOWN) axis=2; }

void reshape(int w,int h)

{

glViewport(0,0,w,h);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

//定义正交投影观察体

if (w<=h)

glOrtho(-2.0,2.0,-2.0*(GLfloat)h/(GLfloat)w,2.0*(GLfloat)h/(GLfloat)w,1.0,20.0);

else

glOrtho(-2.0*(GLfloat)w/(GLfloat)h,2.0*(GLfloat)w/(GLfloat)h,-2.0,2.0,1.0,20.0);

//gluPerspective(120,w/h,1,60); //定义透视投影投影观察体

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

}

void main(int argc, char** argv)

{

glutInit(&argc,argv);

// glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DETH);

glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);

glutInitWindowSize(800,800);

glutCreateWindow("colorcube");

init();

glutReshapeFunc(reshape);

glutDisplayFunc(display);

glutIdleFunc(spinCube);

glutMouseFunc(mouse);

glutMainLoop();

}

(二)Bezier曲线绘制

bezierCurve.cpp //Bezier曲线绘制程序

#include

// The number of control points for this curve

GLint nNumPoints = 4;

//control point group1

GLfloat ctrlPoints[4][3]= {{ -4.0f, 0.0f, 0.0f}, // End Point

{ -6.0f, 4.0f, 0.0f}, // Control Point

{ 6.0f, -4.0f, 0.0f}, // Control Point

{ 4.0f, 0.0f, 0.0f }}; // End Point

void ChangeSize(int w, int h);

void DrawPoints(void);

void RenderScene(void);

void SetupRC();

int main(int argc, char **argv)

{glutInit(&argc, argv); //初始化GLUT库;

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); //设置显示模式;(缓冲,颜色类型)glutInitWindowSize(500, 500);

glutInitWindowPosition(1024 / 2 - 250, 768 / 2 - 250);

glutCreateWindow("Bezier Curve"); //创建窗口,标题为“Rotating 3D World”;

glutReshapeFunc(ChangeSize);

SetupRC();;

glutDisplayFunc(RenderScene); //用于绘制当前窗口;

glutMainLoop(); //表示开始运行程序,用于程序的结尾;

return 0;

}

void DrawPoints(void)

{

int i; // Counting variable

// Set point size larger to make more visible

glPointSize(5.0f);

// Loop through all control points for this example

glBegin(GL_POINTS);

for(i = 0; i < nNumPoints; i++)

glVertex2fv(ctrlPoints[i]);

glEnd();

}

// Called to draw scene

void RenderScene(void)

{

int i;

// Clear the window with current clearing color

glClear(GL_COLOR_BUFFER_BIT);

// Sets up the bezier

// This actually only needs to be called once and could go in

// the setup function

glMap1f(GL_MAP1_VERTEX_3, // Type of data generated

0.0f, // Lower u range

100.0f, // Upper u range

3, // Distance between points in the data

nNumPoints, // number of control points

&ctrlPoints[0][0]); // array of control points

// Enable the evaluator

glEnable(GL_MAP1_VERTEX_3);

// Use a line strip to "connect-the-dots"

glBegin(GL_LINE_STRIP);

for(i = 0; i <= 100; i++)

{

// Evaluate the curve at this point

glEvalCoord1f((GLfloat) i);

}

glEnd();

// Use higher level functions to map to a grid, then evaluate the // entire thing.

// Put these two functions in to replace above loop

// Map a grid of 100 points from 0 to 100

//glMapGrid1d(100,0.0,100.0);

// Evaluate the grid, using lines

//glEvalMesh1(GL_LINE,0,100);

// Draw the Control Points

DrawPoints();

// Flush drawing commands

glutSwapBuffers();

}

// This function does any needed initialization on the rendering

// context.

void SetupRC()

{

// Clear Window to white

glClearColor(1.0f, 1.0f, 1.0f, 1.0f );

// Draw in Blue

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

}

///////////////////////////////////////

// Set 2D Projection

void ChangeSize(int w, int h)

{

// Prevent a divide by zero

if(h == 0)

h = 1;

// Set Viewport to window dimensions

glViewport(0, 0, w, h);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

gluOrtho2D(-10.0f, 10.0f, -10.0f, 10.0f);

// Modelview matrix reset

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

}

空间曲线与曲面

实验七空间曲线与曲面 实验目的 1.掌握空间直线、平面的画法。 2.了解常见的空间曲线与曲面的画法。 与本实验相关的理论 最基本的空间作图函数是Plot3 ,用于作所有二元函数的三维立方体图形,其格式是: Plot3D[f,{x,xmin,xmax},{y,ymin,ymax},可选项] 由于很多曲面和绝大多数曲线都不能用显函数的形式表示。Mathematica 还提供了Parametric Plot3D参数作图函数,其格式是:Parametric Plot3D[{x[u,v],y[u,v] ,z[u,v]} ,{u,umin,umax},{v,vmin,vmax},可选项] Mathematica作三维图形的机理是先在XOY坐标面给定区域内计算出一系列格点的值,再用矩形“小瓦片”拟合张在上面的曲面上。因而如果曲面的表面变化复杂,可通过设置更细的“瓦片”分割来改善。这时候可增加选项PlotPoint―>n 来说明分割数n。 实验步骤 一、画空间曲线 注意空间曲线的参数方程只有一个参变量,如果要画出螺旋线 x=10cost , y=10sint , z=2t 的图形,只要输入: Parametric Plot3D[{10cos[t],10sin[t],2t} ,{t,0,20}] 空间直线也类似地处理。 例1:求过A(3,5,-2),B(3,5,-2)的直线方程,并画图。 分析:空间直线方程可由点向式写出,再改成参数式

) 2(4)2(535313----=--=--z y x 化为参数式是:t x 23-=,t y 25-=,t z 62+-= 输入:Parametric Plot3D[{3-2t ,5-2t ,-2+6t} ,{t ,0,1}] 二、画空间曲面 例2:求过A (1,0,0),B (0,2,0),C (0,0,3),的平面方程,并画图。 分析:平面方程可由截距式写出,y x z 2 333--=。 输入:Parametric Plot3D[{3-3x-3y/2} ,{x ,-1,1},{y ,-1,1}] 例3:画出二元函数22),(y x y x f +=的图形。 输入:Parametric Plot3D[{x^2+y^2} ,{x ,-4,4},{y ,-4,4}] 例4:画出椭球心在原点,3=a ,4=b ,5=c 的椭球面。 输入:Parametric Plot3D[{3*Cos[u] Cos[v], 4*Sin[u] Cos[v],5*Sin[v]} ,{u ,0,2Pi},{v ,-Pi/2,Pi/2}] 例5:画出以x y cos =为准线,母线平行于Z 轴的柱面。 输入:Parametric Plot3D[{x,Cos[x],z} ,{x ,-4,4},{z ,-4,4}] 例6:画出由平面曲线z x cos 1+=绕Z 轴放转而成的旋转面。 输入:Parametric Plot3D[{(1+Cos[u])Cos[v] ,(1+Cos[u])Sin[v] ,u} ,{u ,-Pi ,Pi},{v ,0,2Pi}] 例7:画单叶双曲面。 输入:Parametric Plot3D[{Sec[u]Cos[v] ,Sec[u]Sin[v] ,Tan[u]} ,{u ,-Pi/2+0.5,Pi/2-0.5},{v ,0,2Pi}]

三次Bezier曲线原理及实现代码

Bezier曲线原理及实现代码(c++) 一、原理: 贝塞尔曲线于1962年,由法国工程师皮埃尔·贝塞尔(Pierre Bézier)所广泛发表,他运用贝塞尔曲线来为汽车的主体进行设计。贝塞尔曲线最初由Paul de Casteljau于1959年运用de Casteljau 算法开发,以稳定数值的方法求出贝塞尔曲线。 线性贝塞尔曲线 给定点P0、P1,线性贝塞尔曲线只是一条两点之间的直线。这条线由下式给出: 且其等同于线性插值。 二次方贝塞尔曲线的路径由给定点P0、P1、P2的函数B(t) 追踪: 。TrueType字型就运用了以贝塞尔样条组成的二次贝塞尔曲线。 P0、P1、P2、P3四个点在平面或在三维空间中定义了三次方贝塞尔曲线。曲线起始于P0走向P1,并从P2的方向来到P3。一般不会经过P1或P2;这两个点只是在那里提供方向资讯。P0和P1之间的间距,决定了曲线在转而趋进P3之前,走向P2方向的“长度有多长”。 曲线的参数形式为: 。 现代的成象系统,如PostScript、Asymptote和Metafont,运用了以贝塞尔样条组成的三次贝塞尔曲线,用来描绘曲线轮廓。 一般化

P0、P1、…、P n,其贝塞尔曲线即 。 例如: 。 如上公式可如下递归表达:用表示由点P0、P1、…、P n所决定的贝塞尔曲线。则 用平常话来说,阶贝塞尔曲线之间的插值。 一些关于参数曲线的术语,有 即多项式 又称作n阶的伯恩斯坦基底多项式,定义00 = 1。 点P i称作贝塞尔曲线的控制点。多边形以带有线的贝塞尔点连接而成,起始于P0并以P n终止,称作贝塞尔多边形(或控制多边形)。贝塞尔多边形的凸包(convex hull)包含有贝塞尔曲线。

实验2-空间曲线曲面图形的绘制

实验二空间曲线曲面图形的绘制 一、实验目的 熟练掌握使用Mathematica软件绘制空间曲线曲面图形的方法. 二、实验容与Mathematica命令 1.基本三维图形 函数(,) 的图形为三维空间的一个曲面,Mathematica中,绘制三维曲面图形的 z f x y 基本命令格式为 Plot3D[f,{x,xmin,xmax},{y,ymin,ymax},Options] 其中,f为一个二元显函数. 该命令有众多可供使用的选项,可执行命令“Options[Plot3D]”查询. 1)绘制曲面的基本方法 运行t1=Plot3D[Sin[x+y]*Cos[x+y],{x,0,4},{y,0,4}] 图1 2)用PlotRange 设定曲面的表面的变化围 运行Show[t1,PlotRange{-0.2,0.5}]

图2 3)坐标轴上加标记,并且在每个外围平面上画上网格 运行Show[t1,AxesLabel{"Time","Depth","Value"},FaceGrids All] 图 3 4)观察点的改变 将观察点改变在(2,-2,0),运行 Show[t1,ViewPoint{2,-2,0}]

图 4 也可用鼠标拖动改变视点。 5)无网格和立体盒子的曲面 运行 Show[t1,Mesh False,Boxed False] 图 5 6)没有阴影的曲面 利用Shading取消曲面的阴影运行 Show[t1,Shading False]

图 6 7)给曲面着色 Show[t1,Lighting False 图 7 Show[t1,Lighting None]

计算机图形学 编程生成“三次贝塞尔”曲线

集美大学 计算机工程学院实验报告 课程名称计算机图形学教程 实验名称实验五、编程生成“三次贝塞尔”曲 线 实验类型设计型 学号 日期12月12日地点 成绩教师

一、实验目的: 一方面,让学生对自由曲线的生成算法有更深入的理解,特别是对于曲线的逼近,能够通过实验编程来验证书上所提供的算法思想:另一方面,在图形程序设计方法(如设计各种各样的图形)、绘图函数的使用以及C和C++语言编程环境、程序的调试和测试方面受到比较系统和严格的训练。 二、实验内容: 运用所学的三次贝塞尔曲线生成的算法,根据以下数据点[x, y]:[50, 100] [80, 230] [100, 270] [140, 160] [180, 50] [240, 65] [270, 120] [330, 230] [380, 230] [430, 150]计算出结果,并实现三段贝塞尔在屏幕上显示的功能 三、实验要求: (1)3段三次贝塞尔曲线在衔接点上要连续,曲线整体效果要光滑。 (2)整个图形轮廓要清晰,色彩要分明 四、实验环境: 1.PC,CPU:P4 2.0GHz以上,内存:512M,硬盘:40GB以上; 2.操作系统:Microsoft Windows 2000 /2003/XP; 3.软件:VC或JAVA等。 五、实验内容及完成情况: #include "graphics.h" #include "conio.h" #include "stdio.h" typedef struct { double x,y; } DPOINT; //定义结构体

class Bezier //定义Bezier类 { private: DPOINT* bP; int m_maxIndex; void drawFrame(); void drawCurve(); void drawCurve(int p0,int p1,int p2,int p3); public: Bezier(DPOINT* p,int len); //定义构造函数 void draw(); }; Bezier::Bezier(DPOINT* p,int len) //构造函数的实现{ this ->bP=p; m_maxIndex=len-1; } void Bezier::draw() //通过公有函数调用私有函数{

空间曲线地切线与空间曲面地切平面

第六节 空间曲线的切线与空间曲面的切平面 一、空间曲线的切线与法平面 设空间的曲线C 由参数方程的形式给出:?? ? ??===)()()(t z z t y y t x x ,),(βα∈t . 设),(,10βα∈t t ,)(),(),((000t z t y t x A 、))(),(),((111t z t y t x B 为曲线上两点,B A ,的连线AB 称为曲线C 的割线,当A B →时,若AB 趋于一条直线,则此直线称为曲线C 在点A 的切线. 如果)()()(t z z t y y t x x ===,,对于t 的导数都连续且不全为零(即空间的曲线C 为光滑曲线),则曲线在点A 切线是存在的.因为割线的方程为 ) ()() ()()()()()()(010010010t z t z t z z t y t y t y y t x t x t x x --=--=-- 也可以写为 010********)()() ()()()()()()(t t t z t z t z z t t t y t y t y y t t t x t x t x x ---=---=--- 当A B →时,0t t →,割线的方向向量的极限为{})(),(),(000t z t y t x ''',此即为切线的方向向量,所以切线方程为 ) () ()()()()(000000t z t z z t y t y y t x t x x '-='-='-. 过点)(),(),((000t z t y t x A 且与切线垂直的平面称为空间的曲线C 在点 )(),(),((000t z t y t x A 的法平面,法平面方程为 ))(())(())((00'00'00'=-+-+-z z t z y y t y x x t x 如果空间的曲线C 由方程为 )(),(x z z x y y == 且)(),(0' 0'x z x y 存在,则曲线在点)(),(,(000x z x y x A 的切线是 ) () ()()(100000x z x z z x y x y y x x '-= '-=- 法平面方程为

三次贝塞尔曲线

练习45 三次贝塞尔曲线 一、练习具体要求 本例制作二维图形三次贝塞尔曲线。效果如图45-1所示。执行本例实例后,将创建一个绘有三次贝塞尔曲线的帧。本实例的知识点有:Graphics2D 类和Rectangular 类的应用,曲线绘制的方法。 二、程序及注释 (1)编程思路: java2中Graphics2D 中绘图的第一步是用setColor(),setFont(),setPointMode ,setXORMODE()之类的方法制定绘图属性,第二步生成一个shape 接口的对象,指定要画的形体,第三步是绘图。绘制形体是用三个Graphics2D 方法完成的。Chip()方法将绘图区缩小到指定形体与当前剪接区的交接部分,影响后面的绘图操作。Draw()方法用当前Stroke 绘制Shape 的外形。Fill()方法用当前Point 模式填充Shape 。CubicCurve2D 类生成三次曲线,他与其他曲线类不同,不是描述闭合形体,而是描述曲线。曲线类用贝塞尔曲线定义曲线上的实际点。生成曲线后,应用Draw()或Fill()方法,可以把起点和终点看成相连接的,从而得到闭合区域。 (2) 程序实现及注释: //ExitableJFrame.java import javax.swing.*; public class ExitableJFrame extends JFrame{ //构造函数 public ExitableJFrame(){ } //带窗口标题的构造函数 public ExitableJFrame(String title){ super(title); } //窗口的初始化 本例 知识 点 一句话讲解新学 知识编写Graphics2D 类 绘制图形使用CubicCurve2D 类 绘制图形已学 知识使用Graphics 类 画屏幕图像使用String 类管理字符串

第三次作业 三次Bezier曲线的绘制

第三次作业三次Bezier曲线的绘制一.解题思路: Bezier曲线是用N+1个顶点(控制点)所构成的N根折线来定义一根N阶曲线。本次作业中的三次Bezier曲线有4个顶点,设它们分别为P0,P1,P2,P3,那么对于曲线上各个点Pi(x,y)满足下列关系: x=x0*1-u)*(1-u)*(1-u)+x1 *3*u*(1-u)*(1-u)+x2 *3*u*u*(1-u)+x3 *t*t*t y=y0*(1-u)*(1-u)*(1-t)+y1*3*u*(1-u)*(1-u)+y2*3*u*u*(1-u) +y3 *u*u*u 所以只要确定控制点的坐标,该曲线可通过编程即可绘制出来。 本题取的初始控制点为:p0(-600,100)、p1(-300,400)、p2(300,600)、p3(600,100)。还可以通过输入不同的控制点画出不同的三次Bezier曲线。 程序中有绘制曲线,清空,清屏,退出四个按钮,其中点击绘制曲线按钮可根据控制点绘制出相应的曲线;点击清空按钮则可以将已绘制的曲线清除;点击清屏按钮可以将输入文本框中的数据清除,以方便输入新的数据;点击退出按钮则退出程序。 二.程序代码 Function f() Picture1.FontSize = 9 Picture1.Scale (-900, 1000)-(900, -1000) Picture1.Line (-800, 0)-(800, 0)

Picture1.Line (0, 800)-(0, -800) For i = -7 To 7 Picture1.Line (100 * i, 0)-(100 * i, 20) Picture1.CurrentX = i * 100 - 50: Picture1.CurrentY = -5: Picture1.Print i * 100 Next i For i = -7 To -1 Picture1.Line (0, 100 * i)-(20, 100 * i) Picture1.CurrentX = -100: Picture1.CurrentY = 100 * i + 20: Picture1.Print i * 100 Next i For i = 1 To 7 Picture1.Line (0, 100 * i)-(20, 100 * i) Picture1.CurrentX = -100: Picture1.CurrentY = 100 * i + 20: Picture1.Print i * 100 Next i End Function Private Sub Form_Load() Picture1.AutoRedraw = True Picture1.ScaleWidth = 900 Picture1.ScaleHeight = 900 f Text1.Text = -600: Text2.Text = 100: Text3.Text = -300: Text4.Text = 400 Text5.Text = 300: Text6.Text = 600: Text7.Text = 600: Text8.Text = 100 End Sub Private Sub command1_Click() x0 = Text1.Text: y0 = Text2.Text X1 = Text3.Text: Y1 = Text4.Text X2 = Text5.Text: Y2 = Text6.Text X3 = Text7.Text: Y3 = Text8.Text Picture1.FontSize = 18 Picture1.CurrentX = 800: Picture1.CurrentY = -5: Picture1.Print "X" Picture1.CurrentX = 10: Picture1.CurrentY = 810: Picture1.Print "Y" For t = 0 To 1 Step 0.001 x = x0 * (1 - t) * (1 - t) * (1 - t) + X1 * 3 * t * (1 - t) * (1 - t) + X2 * 3 * t * t * (1 - t) + X3 * t * t * t y = y0 * (1 - t) * (1 - t) * (1 - t) + Y1 * 3 * t * (1 - t) * (1 - t) + Y2 * 3 * t * t * (1 - t) + Y3 * t * t * t Picture1.CurrentX = x0 + 10: Picture1.CurrentY = y0 + 10: Picture1.Print "p0" Picture1.CurrentX = X1 + 10: Picture1.CurrentY = Y1 + 10: Picture1.Print "p1" Picture1.CurrentX = X2 + 10: Picture1.CurrentY = Y2 + 10: Picture1.Print "p2" Picture1.CurrentX = X3 + 10: Picture1.CurrentY = Y3 + 10: Picture1.Print "p3" Picture1.DrawWidth = 1 Picture1.Line (x0, y0)-(X1, Y1), vbBlue

数学实验教程实验6(空间曲线与曲面

实验6 空间曲线与曲面 实验目的 1.学会利用软件命令绘制空间曲线和曲面 2.通过绘制一些常见曲线、曲面去观察空间曲线和曲面的特点 3.绘制多个曲面所围成的区域以及投影区域。 实验准备 1.复习常见空间曲线的方程 2.复习常见空间曲面的方程 实验内容 1.绘制空间曲线 2.绘制空间曲面:直角坐标方程、参数方程 3.旋转曲面的生成 4.空间多个曲面的所围成的公共区域以及投影区域 软件命令 表6-1 Matlab 空间曲线及曲面绘图命令 实验示例 【例6.1】绘制空间曲线 绘制空间曲线sin ,cos ,x at t y at t z ct ===,在区间09t π≤≤上的图形,这是一条锥面螺旋线,取a=10,c=3。

【程序】: t=0:pi/30:9*pi; a=10; c=3; x=a*t.*sin(t); y=a*t.*cos(t); z=c*t; plot3(x,y,z,’mo ’) 【输出】:见图6-1。 图6-1 空间曲线的绘制 【例6.2】利用多种命令绘制空间曲面 绘制二元函数 22 2 2 sin x y z x y += +在区域:99,99D x y -≤≤-≤≤上的图形。 【程序】:参见Exm06Demo02.m 。 【输出】:见图6-2。 图 6-2 绘制空间曲面 【例6.3】绘制Mobius 带 Mobius 带的参数方程为 122122 cos sin cos ,[0,2],[,] sin u u x r u y r u r c v u v a b z v π=??==+∈∈??=?,, 其中,,a b c 为常数,绘制其图形。

C语言代码,Bezier三次曲线

Bezier三次曲线实验报告 一:实验目的 用C语言实现Bezier三次曲线原理的划线 二:实验环境 VC6.0 三:实验人数 一人 四:实验内容 Bezier曲线生成的原理和步骤都在程序上给了注释 五:实验步骤 #include #include #include //该方法为Bezier三阶的曲线原理 void bezier_3(int color, double p[4][2]) { double t,t1,t2,xt,yt; int rate=200,x,y; setcolor(color); moveto(p[0][0],p[0][1]); for (t=0;t<=1;t+=1.0/rate) { yt=1-t; t1=yt*yt; t2=3*yt*t; xt=p[0][0]*t1*yt+p[1][0]*t2*yt+p[2][0]*t2*t+p[3][0]*t*t*t; yt=p[0][1]*yt*t1+p[1][1]*t2*yt+p[2][1]*t2*t+p[3][1]*t*t*t; x=(int)(xt); y=(int)(yt); lineto(x,y); } } void main() { static double p[4][2]={50,400,140,20,400,40,635,420}; const NO=3; int i; int driver=DETECT,mode; initgraph(&driver,&mode,"C://tools/tc2.0");//初始化图形系统 cleardevice();//清屏 setcolor(BLUE);//设置前景色为蓝色 moveto(p[0][0],p[0][1]);//把坐标移动到初始化定义的二维数组坐标的第一个坐标for (i=1;i

三次Bezier曲线

作业三:三次Bezier曲线 1. 设计要求: 1.在程序窗口中建立坐标系 2.输入控制点,绘制出三次Bezier曲线 3.四个控制点间依次用细线连接 4.在程序窗口显示四个控制点的位置并标出 2. 设计思路: 先在草稿纸上算出三次Bezier曲线的函数表达式: (0≤u≤1) =a×+b×+c×u+d 其中a、b、c、d的值为: a=(-) + 3 × - 3 × + b=3× - 6 × + 3 × c=(-3) × + 3 × d= 将、、、中的(x,y)坐标值分别代入a、b、c、d中得到、、、和、、、则: =×+×+×u+ (1) =×+×+×u+ (2) 根据以上结果(1)和(2)编程求得当u取不同值时所得到的点P(u)。再将各点用线连接起来即可拟合三次Bezier曲。 3. 设计过程: 以下是用VB编三次Bezier曲线时的源代码: 其中显示四个控制点的思路是将控制点在x和y方向的坐标值都增大1,然后再与控制点用粗实线连接起来。这样一来在窗口中显示的即为一个较大的实点。 Function drawcs() '此模块为建立坐标系 Dim k As Integer PictDraw.DrawWidth = 1: PictDraw.FontSize = 9 '设置线宽和字体 PictDraw.Line (-400, 0)-(400, 0), RGB(100, 100, 100) PictDraw.Line (0, -300)-(0, 300), RGB(100, 100, 100) For k = (-360) To 360 Step 40

PictDraw.Line (k, -5)-(k, 0): PictDraw.CurrentX = k - 20: PictDraw.CurrentY = 5: PictDraw.Print k Next k For k = (-280) To -40 Step 40 PictDraw.Line (5, k)-(0, k): PictDraw.CurrentX = -40: PictDraw.CurrentY = k - 10: PictDraw.Print (-1) * k Next k For k = (40) To 280 Step 40 PictDraw.Line (5, k)-(0, k): PictDraw.CurrentX = -40: PictDraw.CurrentY = k - 10: PictDraw.Print (-1) * k Next k End Function Private Sub Form_Load() PictDraw.AutoRedraw = True PictDraw.ScaleWidth = 800 PictDraw.ScaleHeight = 600 Text1.Text = -300: Text2.Text = -250: Text3.Text = 300: Text4.Text = -250 Text5.Text = -300: Text6.Text = 250: Text7.Text = 300: Text8.Text = 250 '作为初始值,便于测试 drawcs End Sub Private Sub cmdCancle_Click() PictDraw.Cls drawcs '清除屏幕后,重建坐标系 End Sub Private Sub delet_Click() '此模块为清除输入框中的值 Text1.Text = "" Text2.Text = "" Text3.Text = "" Text4.Text = "" Text5.Text = "" Text6.Text = "" Text7.Text = ""

曲面与空间曲面的归纳

曲面与空间曲线的总结

曲面与空间曲线一.曲面及其方程: 1.曲面方程的一般概念: 定义:若曲面上的点的坐标(x,y,z) 都满足方程F(x,y,z)=0, 而满足此方程的点都在曲面上,则称此方程为 该曲面的方程,而曲面称为此方程的‘图形’。 例1:求与A(2,3,1)和B(4,5,6)等距离的点的运动规迹。 解: 设M(x,y,z)为动点的坐标,动点应满足的条件是 |AM|=|BM|由距离公式得 此即所求点的规迹方程,为一平面方程。 2.坐标面及与坐标面平行的平面方程: ①坐标平面xOy 的方程:z=0 ②过点(a,b,c)且与xOy 面平行的平面方程:z=c 222222)6()5()4()1()3()2(-+-+-=-+-+-z y x z y x 整理得 631044=-++z y x

③坐标面yOz 、坐标面zOx 以及过(a,b,c)点且分别与之平行的平面方程:x=0; y=0; x=a; y=b 3. 球面方程: ①球面的标准方程:以M0(x0,y0,z0)为球心,R 为半径 的球面方程为 (x-x0)2+(y-y0)2+(z-z0)2=R2 ②球面的一般方程: x2+y2+z2+Ax+By+Cz+D=0 球面方程的特点:平方项系数相同;没有交叉项。 例2:求x2+y2+z2+2x-2y-2=0表示的曲面 解:整理得: (x+1)2+(y-1)2+z2=22 故此为一个球心在(-1,1,0),半径为2的球。 4.母线平行于坐标轴的柱面方程: 一般我们将动直线l 沿定曲线c 平行移动所形成的轨迹 称为柱面。其中直线l 称为柱面的母线,定曲线c 称为柱面 的准线。本章中我们只研究母线平行于坐标轴的柱面方程。 此时有以下结论: 若柱面的母线平行于z 轴,准线c 是xOy 面上的一条曲线,其方程为F(x,y)=0,则该柱面的方程为F(x,y)=0; 同理,G(x,z)=0,H(y,z)=0在空间中分别表示母线平行于y 轴和x 轴的柱面。 分析:母线平行于坐标轴的柱面的特点为:平行于某轴,则在其方程中无此坐标项。其几何意义为:无论z 取何值,只要满足F(x,y)=0,则总在柱面上。 几种常见柱面:x+y=a 平面; 2 22a y x =+圆柱面

曲面与空间曲线的方程

第 2 章曲面与空间曲线的方程 本章教学目的:通过本章学习,使学生理解空间坐标系下曲面与空间曲线方程之定义及 表示,熟悉空间中一些特殊曲面、曲线的方程。 本章教学重点:空间坐标系下曲面与空间曲线方程的定义。 本章教学难点:(1)空间坐标系下母线平行于坐标轴的柱面方程与平面坐标系下有关平面 曲线方程的区别; ( 2)空间坐标系下,空间曲线一般方程的规范表示。 本章教学内容: § 1 曲面的方程 普通方程: 1 定义:设工为一曲面,F(x, y, z) =0为一三元方程,空间中建立了坐标系以后, 若工上任一点P(x,y,z)的坐标都满足F(x,y, z)=0,而且凡坐标满足方程的点都在曲 面工上,则称F (x, y, z) =0为工的普通方程,记作 2:F (x, y, z) =0. 不难看出,一点在曲面2上〈一〉该点的坐标满足工的方程,即曲面上的点与其 方程的解之间是一一对应的???》的方程的代数性质必能反映出2的几何性质。 2 三元方程的表示的几种特殊图形:空间中任一曲面的方程都是一三元方程,反之,是否任一三 元方程也表示空间中的一个曲面呢?一般而言这是成立的,但也有如下特殊情况 1 ° 若F( x, y, z) =0 的左端可分解成两个(或多个)因式F1( x, y, z) 与F2 (x, y, z)的乘积,即 F (x, y, z)= F i (x, y, z) F2 (x, y, z),贝U F (x , y , z) =0〈一〉F i (x , y , z) =0 或F2 (x , y , z) =0 ,此时 F( x y z) =0 表示两叶曲面1与 2 它们分别以F1( x y z) =0 F2( x y z) =0 为其方程此时称F(x y z)=0 表示的图形为变态曲面。如 F(x,y,z) xyz 0 即为三坐标面。 2 0方程F(x,y,z) (x2 y2 z2) x i2 y 2 2 (z 3)2 0 仅表示坐标原点和点( i 2 3) 3 °方程F(x, y,z) 0可能表示若干条曲线如 F(x, y,z) (x2 y2)(y2 z2) 0 即表示z 轴和x 轴 °方程F(x, y,z) 0不表示任何实图形如 4

空间曲线与曲面的绘制

空间曲线与曲面的绘制 本实验的目的是:利用数学软件Mathematica 绘制三维图形来观察空间曲线和空间曲面图形的特 点,以加强几何的直观性。 1. 空间曲线的绘制 绘制空间曲线时一般使用曲线的参数方程,利用命令“ParametricPlot3D ”如画出参数方程「x =x(t) * y = y(t) , h Et “2所确定的空间曲线的命令格式为: Z =z(t) ParametricPlot3D[{x[t],y[t],z[t]},{t,tmi n, tmax}, 选项] 例1 画出旋转抛物面z = x2y2与上半球面z = 1亠:1 - x2- y2交线的图形。 X = cost 解:它们的交线为平面z=1上的圆x2+y2=1,化为参数方程为*y = sint,t"O,勿],下面的 z = 1 mathematica命令就是作出它们的交线并把它存在变量p中: p ParametricPlot3D Cos t , Sin t , 1 , t, 0, 2 Pi 运行即得曲线如图1所示。 在这里说明一点,要作空间曲线的图形,必须先求出该曲线的参数 乍(x, y, z) =0 方程。如果曲线为一般式,其在xOy面上的投影柱面的

空间曲面与空间曲线学习总结

面及其方程 一曲面方程的概念 空间曲面可看做点的轨迹,而点的轨迹可由点的坐标所满足的方程来表达。因此,空间曲面可由方程来表示,反过来也成立。 为此,我们给出如下定义: 若曲面 S与三元方程 F x y z (,,) 0 (1) 有下述关系: 1、曲面 S上任一点的坐标均满足方程(1); 2、不在曲面 S上的点的坐标都不满足方程(1)。 那么,方程(1)称作曲面 S的方程,而曲面S称作方程(1)的图形。 下面,我们来建立几个常见的曲面方程。 【例1】球心在点 ) , , ( z y x M ,半径为R的球面方程。

解:设M x y z (,,)是球面上的任一点,那么M M R 0=, 即: ()()()x x y y z z R -+-+-=020202 ()()()x x y y z z R -+-+-=0202022 (2) (2)式就是球面上任一点的坐标所满足的方程。 反过来,不在球面上的点 ''''M x y z (,,),'M 到M 0的距离M M R 0'≠, 从而点 'M 的坐标不适合于方程(2)。 故方程(2)就是以 M x y z 0000(,,)为球心,R 为半径的球面方程。 若球心在原点,即 M x y z O 0000000(,,)(,,)=,其球面方程为 x y z R 2222++= 【例2】设有点A (,,)123和B (,,)214-,求线段AB 垂直平分面π 的方程。 解:所求平面π是与A 和B 等距离的点的几何轨迹,设M x y z (,,)是所求平面上任意 的一点,则 AM BM = 即: ()()()()()()x y z x y z -+-+-=-+++-123214222222

双三次Bezier曲面

实验六 双三次Bezier 曲面 一、实验目的 根据Bizer 曲面的基础知识和数学基础,对其算法进行程序设计,验证算法的正确性,并通过程序结果加深对常用曲面数学模型的理解。 二、实验任务(2学时) Bezier 曲面算法及其程序设计。 三、实验内容和实验步骤 1、算法描述 Bezier 曲面是由Bezier 曲线拓广而来,以两组正交的Bezier 曲线控制点构造空间网格来生成曲面。m×n 次张量积形式的 Bezier 曲面的定义如下(参照教材P200式7-20): (u ,v )∈〔0,1〕×〔0,1〕 双三次Bezier 曲面定义如下(参照教材P201式7-21): (u ,v )∈〔0,1〕×〔0,1〕 展开上式,有 代入得到: )()(),(m 0i ,,0,∑∑===v B u B P v u p n j m i n j j i 33 ,,3,3i 00(,)()() i j i j j p u v P B u B v ===∑∑0,30,00,10,20,31,31,01,11,21,30,31,32,33,32,02,12,22,32,33,03,13,23,33,3()()(,)()()()()()()B v P P P P B v P P P P p u v B u B u B u B u P P P P B v P P P P B v ??????????????=??????????????????320,3321,3322,3 33,3()331()363()33()B u u u u B u u u u B u u u B u u ?=-+-+?=-+??=-+??=?320,3321,3322,333,3()331()363()33()B v v v v B v v v v B v v v B v v ?=-+-+?=-+??=-+??=? 0,00,10,20,31,01,11,21,3322,02,12,22,33,03,13,23,313313630(,)133001000P P P P P P P P p u v u u u P P P P P P P P --????????-??????=????????-????????3213313630330010001v v v ??--??????-?????????-??????????

matlab实现三次贝塞尔曲线

根据bezier定义 % Bezier Square Curve Ploter % This file will create a Bezier square curve and dispay the plot. % The parameter is the Vertex matrix. function [X] = bezier2(Vertex) BCon=[1 -2 1;-2 2 0;1 0 0]; % constant Matrix for i = 1:1:50 par = (i - 1)/49; XY(i,:) = [par^2 par 1]*BCon*Vertex; % create data end % display the vertices and the curve using Matlabs built-in graphic functions clf % this will clear the figure plot(Vertex(:,1),Vertex(:,2),'ro',XY(:,1),XY(:,2),'b-') % create a plot of both the V ertices and curve, the vertices will be red “o” % while the curve is blue line line(Vertex(:,1),Vertex(:,2),'color','g') % add the control polygon. xlabel(' x ') ylabel ('y ') title('Square Bezier Curve') legend('控制顶点','Bezier曲线','控制多边形') % you can move the legend on the plot 然后,在命令行定义Bez2Vertex=[ 0 0 ; 0.3 0.7 ; 1.0 0.2],即定义,,,再在命令行输入bezier2(Bez2Vertex)

三次Bezier曲线

三次Bezier曲线 一、程序设计功能: 1.设计绘图窗口,能实现数据的多次输入; 2.具有多次绘图功能,能实现不同数据的绘图; 3.具有清屏功能,在画完该次图形后,清除图像并重建坐标系, 4.具有数据完整性检测功能,当数据输入不完整时,通过弹窗提示用户数据输入不完整。 二、程序设计思想: 先在草稿纸上求出三次Bezier曲线的各坐标参数前的系数表达式: a1 = -px(0) + 3 * px(1) - 3 * px(2) + px(3) b1 = 3 * px(0) - 6 * px(1) + 3 * px(2) c1 = -3 * px(0) + 3 * px(1) d1 = px(0) a2 = -py(0) + 3 * py(1) - 3 * py(2) + py(3) b2 = 3 * py(0) - 6 * py(1) + 3 * py(2) c2 = -3 * py(0) + 3 * py(1) d2 = py(0) 然后根据三次Bezier曲线的特点来定义为以u为变量的函数,然后根据取点速率的不同来绘制相应四个顶点的曲线。 三、程序代码: Private Sub Command1_Click() Picture1.DrawWidth = 2 Picture1.FontSize = 12 '此处定义绘制坐标系时的字体大小,因为后面程序要用到字体设置,故此处字体设置要重新声明,不可用系统默认的字体,否则再次绘制图形时,坐标由于字体过大而很难看 Picture1.Scale (-300, 300)-(300, -300) '定义PictureBox坐标系 Picture1.Line (-300, 0)-(300, 0) Picture1.Line (0, 300)-(0, -300) 'VB编译系统中,其默认的是在Form(窗体)中画图,当需要在其他属性框中画图时,需要加上其对应的属性框名称 Picture1.CurrentX = 270: Picture1.CurrentY = 40: Picture1.Print "X" Picture1.CurrentX = 15: Picture1.CurrentY = 285: Picture1.Print "Y" Picture1.FontSize = 9 '坐标上的数字字体小一些 For i = -280 To 280 Step 40

曲面与空间曲线的方程

第2章 曲面与空间曲线的方程 本章教学目的:通过本章学习,使学生理解空间坐标系下曲面与空间曲线方程之定 义及表示,熟悉空间中一些特殊曲面、曲线的方程。 本章教学重点:空间坐标系下曲面与空间曲线方程的定义。 本章教学难点:(1)空间坐标系下母线平行于坐标轴的柱面方程与平面坐标系下有 关平面曲线方程的区别; (2)空间坐标系下,空间曲线一般方程的规范表示。 本章教学内容: §1 曲面的方程 一 普通方程: 1 定义:设Σ为一曲面,F (x ,y ,z )=0为一三元方程,空间中建立了坐标系以后, 若Σ上任一点P (x ,y ,z )的坐标都满足F (x ,y ,z )=0,而且凡坐标满足方程的点都在曲面Σ上,则称F (x ,y ,z )=0为Σ的普通方程,记作 Σ:F (x ,y ,z )=0. 不难看出,一点在曲面Σ上〈═〉该点的坐标满足Σ的方程,即曲面上的点与其方程的解之间是一一对应的 ∴Σ的方程的代数性质必能反映出Σ的几何性质。 2 三元方程的表示的几种特殊图形: 空间中任一曲面的方程都是一三元方程,反之,是否任一三元方程也表示空间中的 一个曲面呢?一般而言这是成立的,但也有如下特殊情况 1° 若F (x ,y ,z )=0的左端可分解成两个(或多个)因式F 1(x ,y ,z ) 与F 2(x ,y ,z )的乘积,即F (x ,y ,z )≡F 1(x ,y ,z )F 2(x ,y ,z ),则 F (x ,y ,z )=0〈═〉F 1(x ,y ,z )=0或F 2(x ,y ,z )=0,此时 F (x ,y ,z )=0表示两叶曲面1∑与2∑,它们分别以F 1(x ,y ,z )=0,F 2(x ,y ,z )=0为其方程,此时称F (x ,y ,z )=0表示的图形为变态曲面。如 0),,(=≡xyz z y x F 即为三坐标面。 20方程()()[] 0)3(21)(),,(222222=-+-+-++≡z y x z y x z y x F 仅表示坐标原点和点(1,2,3) 3°方程0),,(=z y x F 可能表示若干条曲线,如 0))((),,(2 222=++≡z y y x z y x F 即表示z 轴和x 轴 4°方程0),,(=z y x F 不表示任何实图形,如

相关主题
相关文档 最新文档