贝塞尔曲线.B样条曲线.cadcam实验报告

时间:2024.4.8

C

学院:机电工程学院班级:机制10-01 姓名:范同梁

学号:541002010109 A D 实 验 报 告

一、 实验一

二、 实验二 年 月 日 目 录 二维图形复合变换编程三次B样条曲线生成

1

南昌大学实验报告

学生姓名: 学 号: 专业班级: 实验类型:□ 验证 □ 综合 □ 设计 □ 创新 实验日期: 实验成绩:

实验一 二维图形复合变换编程

一、实验目的:

1.掌握CAD二维图形处理的原理和方法。

2.理解CAD对二维图形进行复合变换的过程。

二、实验要求

在二维模式下,将三角形绕任意点旋转θ角。三角形三点的坐标、旋转点坐标和旋转角度可由用户任意输入。原图形和变换后的图形必须同时显示在显示器上。

三、实验设备

1.计算机系统

2.安装Turbo C或其他C语言集成开发工具

四、实验原理

1、变换原理

基本旋转矩阵是相对坐标原点的,为了满足这一要求,必须先将旋转点和需要处理的图形向原点平移,使旋转点与原点重合,然后对图形进行旋转变换。旋转变换后,再将旋转点和旋转后的图形平移到旋转点。基本变换矩阵如下:

根据上述图形变换原理,对二维图形绕任意点(旋转点)旋转的复合变换矩平移T= 1 0 0 0 1 0 l m 1 旋转T= cosθ sinθ 0 -sinθ cosθ 0 0 0 1

2

贝塞尔曲线B样条曲线cadcam实验报告

阵M为

1 0 0

M= 0 1 0

-x -y 1 cosθ sinθ 0 -sinθ cosθ 0 0 0 1 1 0 0 0 1 0 x y 1

2、编程基本要领

1)、将显卡设置为图形模式函数为 #include(graphics.h)

#include(conio.h)

main( )

{ int driver,mode;

driver=VGA; mode=VGAMED; initgraph(&driver,& mode,””); }

2) 画直线函数为 line(x1,y1, x2,y2)

3) 4*4界矩阵相乘函数

float py[4][4],xz[4][4];m[4][4] float xc(a,b)

float a[4][4],b[4][4];

{ int i , j,k;

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

for (j=0;j<=3;j++)

for(k=0;k<=3;k++)

3

m[i][j]= m[i][j]+ a[i][k]* b[k][j];

}

五、实验步骤

1、在C语言集成开发工具的编辑器中输入源程序

2、利用编译器编译源程序

3、连接生成执行文件

4、运行程序

六、实验数据及处理结果

#include <graphics.h>

#include <conio.h>

#include <stdio.h>

#include <string.h>

#include <math.h>

#include<mem.h>

#include<ctype.h>

#include<alloc.h>

#include<stdlib.h>

#define PI 3.1415926

float AX,AY,BX,BY,CX,CY;

float X1,Y1,X2,Y2,X3,Y3;

float x,y,a;

4

void getin()

{printf("input point ax and ay:\n");

}

void putout(float a,float b ,float c,float d,float e,float f) {int driver,mode;

driver=VGA; mode=VGAMED;

registerbgidriver(EGAVGA_driver);

initgraph(&driver,&mode,"c:\tc");

setcolor(BLUE); line(AX,AY,BX,BY); line(BX,BY,CX,CY); line(CX,CY,AX,AY); scanf("%f %f",&AX,&AY); printf("input point bx and by:\n"); scanf("%f %f",&BX,&BY); printf("input point cx and cy:\n"); scanf("%f %f",&CX,&CY); printf("input the xuanzhuan point and the jiaodu\n"); scanf("%f %f %f",&x,&y,&a);

setcolor(RED);

line(a,b,c,d); 5

} line(c,d,e,f); line(e,f,a,b);

void chang()

{float T1[3][3]={{1,0,0},{0,1,0},{0,0,1}};

float T3[3][3]={{1,0,0},{0,1,0},{0,0,1}};

float T2[3][3]={{1,0,0},{0,1,0},{0,0,1}};

float

T[3][3]={{0,0,0},{0,0,0},{0,0,0}},TT[3][3]={{0,0,0},{0,0,0},{0,0,0}}; float NEW1[3][3]={{0,0,0},{0,0,0},{0,0,0}},NEW[3][3];

int i,j,k,ii,jj,kk;

int i1,j1,k1;

/*a=-a; */

T1[2][0]=(-x);T1[2][1]=(-y);

T3[2][0]=(x);T3[2][1]=(y);

T2[0][0]=cos(a*PI/180.0);T2[0][1]=-sin(a*PI/180.00);

T2[1][0]=sin(a*PI/180.0);T2[1][1]=cos(a*PI/180.0);

for(i1=0;i1<3;i1++)

NEW[i1][2]=1;

NEW[0][0]=AX;

6

NEW[0][1]=AY;

NEW[1][0]=BX;

NEW[1][1]=BY;

NEW[2][0]=CX;

NEW[2][1]=CY;

{

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

for (j=0;j<3;j++)

for(k=0;k<3;k++)

T[i][j]+=T1[i][k]*T2[k][j]; }

{

for(ii=0;ii<3;ii++)

for (jj=0;jj<3;jj++)

for(kk=0;kk<3;kk++)

TT[ii][jj]+=T[ii][kk]*T3[kk][jj];

}

{for(i1=0;i1<3;i1++)

for(j1=0;j1<3;j1++)

for(k1=0;k1<3;k1++)

7

NEW1[i1][j1]+=NEW[i1][k1]*TT[k1][j1]; }

X1=NEW1[0][0];

Y1=NEW1[0][1];

X2=NEW1[1][0];

Y2=NEW1[1][1];

X3=NEW1[2][0];

Y3=NEW1[2][1];

}

void main()

{

getin();

chang();

putout(X1,Y1,X2,Y2,X3,Y3);

}

8

B(4,5)

贝塞尔曲线B样条曲线cadcam实验报告

旋转

贝塞尔曲线B样条曲线cadcam实验报告

30

贝塞尔曲线B样条曲线cadcam实验报告

贝塞尔曲线B样条曲线cadcam实验报告

9

南昌大学实验报告

学生姓名: 学 号: 专业班级: 实验类型:□ 验证 □ 综合 □ 设计 □ 创新 实验日期: 实验成绩:

实验二 B样条曲线的生成

一、实验目的:

1、掌握参数化曲线曲面的原理和方法。

2、理解参数化曲线曲面的基本性质,特别是B样条曲线的基本性质。

3、掌握型值点和控制顶点以及控制多边形的概念,理解控制点对曲线的控制作用。

二、实验要求

在二维模式下,用自编程序生成三次B样条曲线。四个控制顶点的坐标可由用户任意输入。三次B样条曲线和控制多边形必须同时显示在显示器上。用户改变控制点后,曲线应同时得到调整。

三、实验设备

1、计算机系统

2、安装Turbo C或其他C语言集成开发工具

四、实验原理

1、B样条曲线原理

B样条曲线是一种基函数为B样条基函数的参数曲线,三次B样条参数方

程如下:

10

贝塞尔曲线B样条曲线cadcam实验报告

?p0???13?3????p1??3?63P(t)=(J0,3(t) J1,3(t) J2,3(t) J3,3(t))??=(t3 t2 t 1)?p?330?2???1?p?00??3?1??p0????0??p1? ???0p2?????0???p3?

其中参数t∈[0,1]

P0、P1、P2、P3为四个控制顶点。B样条曲线是一种逼近曲线,曲线并不过任一个控制顶点。

2、编程基本要领

1)、将显卡设置为图形模式函数为 #include(graphics.h)

#include(conio.h)

main( )

{ int driver,mode;

driver=VGA; mode=VGAMED; initgraph(&driver,& mode,””); }

2) 画直线函数为 line(x1,y1, x2,y2)

3) 1*4界矩阵相乘函数

float py [4],xz[4][4];m [4] float xc(a,b)

float a [4],b[4][4];

{ int i , j,k;

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

for (j=0;j<=3;j++)

11

m[i] = m[i] + a[j] * b[j][i];

}

4)参数取值

参数步长一般采用等步长,取1/n ,n为正整数。N的大小与显卡和显示精度有关。一般可取50。

五、实验步骤

1、在C语言集成开发工具的编辑器中输入源程序

2、利用编译器编译源程序

3、连接生成执行文件

4、运行程序

六、实验数据及处理结果

#include <graphics.h>

#include <conio.h>

#include <stdio.h>

#include <string.h>

#include <math.h>

int q;

float AX,AY,BX,BY,CX,CY,DX,DY;

double XX[1001],YY[1001];

void getin()

{printf("input point ax and ay:\n");

scanf("%f %f",&AX,&AY); 12

} printf("input point bx and by:\n"); scanf("%f %f",&BX,&BY); printf("input point cx and cy:\n"); scanf("%f %f",&CX,&CY); printf("input point dx and dy:\n"); scanf("%f %f",&DX,&DY);

void putout(int a)

{int driver,mode;

int m;

driver=VGA; mode=VGAMED; registerbgidriver(EGAVGA_driver); initgraph(&driver,&mode,"c:\tc");

13 setcolor(YELLOW); line(AX,AY,BX,BY); line(BX,BY,CX,CY); line(CX,CY,DX,DY); setcolor(BLUE); for(m=0;m<a-2;m++) line(XX[m],YY[m],XX[m+1],YY[m+1]); }

void main()

{ int a;

float T,TT; float x[4],y[4]; double t[4],sub1[4]; int m[4][4]={{-1,3,-3,1},{3,-6,3,0},{-3,0,3,0},{1,4,1,0}}; int i,j,k; M:printf("input a number from 50--1000:\n"); scanf("%d",&a); getin(); TT=1/(a*1.0); x[0]=AX;x[1]=BX;x[2]=CX;x[3]=DX; y[0]=AY;y[1]=BY;y[2]=CY;y[3]=DY; for(j=0,T=TT;j<a;j++,T=j*TT) { t[0]=T*T*T;t[1]=T*T;t[2]=T;t[3]=1; sub1[0]=0;sub1[1]=0;sub1[2]=0;sub1[3]=0; {

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

for (k=0;k<=3;k++)

sub1[i]+=t[k]*m[k][i]; } 14

for(k=0;k<=3;k++)

{ XX[j]+=sub1[k]*x[k]/6.0;

YY[j]+=sub1[k]*y[k] /6.0;

} }

putout(a);

} /*scanf("%d",&q); if(q) goto M;*/ system("pause");

贝塞尔曲线B样条曲线cadcam实验报告

B样条曲线 15

贝塞尔曲线

贝塞尔曲线B样条曲线cadcam实验报告

16


第二篇:贝塞尔曲线和B样条曲线


§4.3 贝塞尔曲线和B样条曲线

在前面讨论的抛物样条和三次参数样条曲线,他们的共同特点是:生成的曲线通过所有给定的型值点。我们称之为“点点通过”。但在实际工作中,往往给出的型值点并不是十分精确,有的点仅仅是出于外观上的考虑。在这样的前提下,用精确的插值方法去一点点地插值运算就很不合算;另外,局部修改某些型值点,希望涉及到曲线的范围越小越好,这也是评价一种拟合方法好坏的指标之一。

针对以上要求,法国人Bezier提出了一种参数曲线表示方法,称之为贝塞尔曲线。后来又经Gorgon, Riesenfeld和Forrest等人加以发展成为B样条曲线。

一、     贝塞尔曲线

贝塞尔曲线是通过一组多边折线的各顶点来定义。在各顶点中,曲线经过第一点和最后一点,其余各点则定义曲线的导数、阶次和形状。第一条和最后一条则表示曲线起点和终点的切线方向。

1.数学表达式

n+1个顶点定义一个n次贝塞尔曲线,其表达式为:

     

为各顶点的位置向量,为伯恩斯坦基函数

2.二次贝塞尔曲线

需要3个顶点,即,将其代入曲线表达式:

         

   

    

时:

3.三次贝塞尔曲线

三次贝塞尔曲线需要4个点,即

其中:

              

贝塞尔曲线特点:

1.n个顶点定义n-1次曲线,当顶点数较大时,拟合的曲线阶次太高。

2.任一顶点对整条曲线的形状都有关系,不利于局部修改。

二、B样条曲线

用B样条曲线基函数替代伯恩斯坦基函数。

1.数学表达式

通常,给定m+n+1个顶点可以定义m+1段n次参数函数为:

            (),

其中为B样条分段混合函数,形式为:

? 段数、次数  段数=节点数-次数,每段曲线与n+1个点有关;

?

2.二次B样条曲线

n=2,k=0,1,2

                    

3.三次B样条曲线

n=3, k=0, 1, 2, 3

其中称为特征多边形。

            

例: 设,用以上四个点构造2次B样条曲线。

由B样条的定义可知,4个点可定义2次B样条曲线2段:

m+n+1=4  n=2  m+1=2

更多相关推荐:
cadcam实验报告

实实验课程学生姓名学号专业班级验报告计算机辅助设计与制造钱志伟5901108126机制083班20xx年12月30日0目录一实验一二维图形复合变换编程二实验二三次贝赛尔曲线生成三实验三三次B样条曲线生成1南昌大...

cadcam实验报告

实实验课程学生姓名学号专业班级验报201年月告南昌大学实验报告学生姓名学号专业班级实验类型验证综合设计创新实验日期实验成绩实验一二维图形复合变换编程一实验目的1掌握CAD图形处理的原理和方法2理解CAD对图形进...

cadcam标准实验报告

实验报告实验课程CADCAM学生姓名学号专业班级20xx年12月23日目录一实验一三次B样条曲线生成二实验二CADCAM集成1南昌大学实验报告学生姓名学号专业班级实验类型验证综合设计创新实验日期实验成绩实验一B...

CAD design实验报告

制造科学与工程学院实验报告ExperimentReportSchoolofManufacturingScienceampEngineering制造科学与工程学院实验报告二实验记录及数据处理RecordsofEx...

cad-5实验报告完整版

实验53D建模11工管02班20xx0620薛茹玉实验53D建模实验成绩一实验目的1掌握物体的标高和厚度3维坐标2掌握3维视图的两种坐标系统3掌握3D对象的一般编辑命令二实验项目内容1将图幅设置成3号图纸放大1...

cad-4实验报告完整版

实验4尺寸标注实验11工管02班20xx0620薛茹玉实验4尺寸标注实验成绩一实验目的1掌握使用尺寸样式定义的方法2掌握线性标注的方法3掌握角度圆和弧的标注二实验项目内容1将图幅设置成3号图纸放大100倍单位为...

cad实习报告

CAD实习报告经过这学期的理论和上机学习使我们对有了基本掌握对于CAD这个课程学习也有了一个系统的学习和掌握我学到的东西很多首先对于电脑绘图不熟悉的我有很大的帮助现在的我用AutoCAD绘图的速度快了很多而且知...

cad实验报告3

太原理工大学现代科技学院课程实验报告专业班级学号姓名指导教师太原理工大学现代科技学院实验报告实验三Protel99SE印刷电路板的设计一实验目的1了解有关印刷电路板的基础知识和对PCB编辑器的初步认识2掌握PC...

cad实验报告

CAD实验报告实验编号项目一AutoCAD基础2学时一实验目的了解AuotCAD的发展历史主要内容及特性二实训内容1AuotCAD的发展与应用2AUTOCAD的主要功能3AutoCAD20xx工作界面4坐标与坐...

3DS Max 开放实验报告

浙江工商大学信息学院开实验名称学号姓名班级指导教师日期放实验报告3DSMax9学习与实践09919xx122傅麒楠商务09甲彭浩宇20xx11一实验目的通过该开放实验学生熟悉3DSMax9的原理功能特性和操作方...

3Dmax课程设计报告书

南开大学滨海学院课程设计报告课程名称动画课程设计专业学号10990021姓名黄子豪完成日期20xx0627南开大学滨海学院计算机系课程设计报告作品简介1作品主题反动理学应用抽油机2开发环境3DMAX20xxph...

3d实验报告

实验报告实验报告院系信息科学与技术学院课程名称三维动画设计日期实验报告九江学院实验报告实验报告实验报告实验报告实验报告实验报告院系信息科学与技术学院课程名称三维动画设计日期九江学院3D王燕信A1131实验报告

cadcam实验报告(4篇)