图形学实验五.docx

上传人:b****6 文档编号:7738023 上传时间:2023-01-26 格式:DOCX 页数:14 大小:156.26KB
下载 相关 举报
图形学实验五.docx_第1页
第1页 / 共14页
图形学实验五.docx_第2页
第2页 / 共14页
图形学实验五.docx_第3页
第3页 / 共14页
图形学实验五.docx_第4页
第4页 / 共14页
图形学实验五.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

图形学实验五.docx

《图形学实验五.docx》由会员分享,可在线阅读,更多相关《图形学实验五.docx(14页珍藏版)》请在冰豆网上搜索。

图形学实验五.docx

图形学实验五

贵州大学实验报告

学院:

计信学院专业:

计科班级:

计科101

姓名

罗琳

学号

1008060016

实验组

实验时间

2013-4-22

指导教师

吴云

成绩

实验项目名称

常用曲面和曲线的生成算法

实验目的

掌握常用曲线和曲面的生成算法,为几何造型打下基础。

实验要求

编写绘制Hermit、Bezier、B样条曲线的程序.

实验原理

三次Hermite曲线的生成:

算法原理:

给定直线的两个端点:

P0,P1,及两端点处的切线:

R0,R1,则三次Hermit曲线方程为:

例:

P0=[100,100];P1=[200,150];

Q0=[-200,100];Q1=[-100,120];

count=100;deltat=1/count;

t=0.0;

PX

(1)=P0

(1);PY

(1)=P0

(2);

fori=1:

count

t=t+deltat;

F3=2*t*t*t-3*t*t+1;

F2=-2*t*t*t+3*t*t;

F1=t*t*t-2*t*t+t;

F0=t*t*t-t*t;

PX(i+1)=F3*P0

(1)+F2*P1

(1)+F1*Q0

(1)+F0*Q1

(1);

PY(i+1)=F3*P0

(2)+F2*P1

(2)+F1*Q0

(2)+F0*Q1

(2);

end

figure;plot(PX,PY,PX,PY,'o');

title('P0=[100,100];P1=[200,150];

Q0=[-200,100];Q1=[-100,120];');

P0=[100,400];P1=[200,450];Q0=[-200,100];Q1=[-100,120];

count=1000;deltat=1/count;

t=0.0;

PX

(1)=P0

(1);PY

(1)=P0

(2);

fori=1:

count

t=t+deltat;

F3=2*t*t*t-3*t*t+1;F2=-2*t*t*t+3*t*t;

F1=t*t*t-2*t*t+t;F0=t*t*t-t*t;

PX(i+1)=F3*P0

(1)+F2*P1

(1)+F1*Q0

(1)+F0*Q1

(1);

PY(i+1)=F3*P0

(2)+F2*P1

(2)+F1*Q0

(2)+F0*Q1

(2);

end

figure;plot(PX,PY,PX,PY,'o');

title('P0=[100,400];P1=[200,450];Q0=[-200,100];Q1=[-100,120];');

Bezier曲线(以逼近为基础的参数曲线):

满足以下条件的一组折线集(Bezier特征多边形)称为Bezier曲线:

曲线的起点和终点与多边形的起点和终点重合,多边形的第一条边和最后一条边表示曲线在起点和终点的切矢量方向。

曲线的形状趋向于Bezier特征多边形的形状。

当给定Bezier特征多边形的n+1个顶点Pi时,

Bezier曲线的插值公式为:

(权Bi,n(t)i=0,1,2,3,…n+1称为基函数)

Bernstein(伯恩斯坦)基函数:

三次Bezier曲线矩阵表示:

调合函数:

 

例:

P0=[100,100];P1=[200,450];

P2=[400,600];P3=[500,150];

count=100;deltat=1/count;t=0.0;

PX

(1)=P0

(1);PY

(1)=P0

(2);

fori=1:

count

t=t+deltat;

B0=1-3*t+3*t*t-*t*t*t;

B1=3*t-6*t*t+3*t*t*t;

B2=3*t*t-3*t*t*t;

B3=t*t*t;

PX(i+1)=B0*P0

(1)+B1*P1

(1)+B2*P2

(1)+B3*P3

(1);

PY(i+1)=B0*P0

(2)+B1*P1

(2)+B2*P2

(2)+B3*P3

(2);

end

figure;plot(PX,PY,PX,PY,'o');

title('P0=[100,100];P1=[200,150];

P2=[-200,100];P3=[-100,120];');

B样条曲线:

当给定特征多边形的n+1个顶点Pi(i=0,1,2,..,n)时,K次B样条曲线的插值公式为:

(权Ni,k(u)i=0,1,2,3,…n+1称为基函数,即调合函数)

三次B样条曲线矩阵表示:

例:

%三次均匀B样条曲线.

clear;

clc;

P1=[0,0];P2=[1,1];P3=[2,2];P4=[4,0];

P5=[6,-4];P6=[8,-5];P7=[10,2];

t=0.0;

count=1000;

deltat=1/count;

%绘制第一段曲线

fori=1:

count+1

B0=(-t*t*t+3*t*t-3*t+1)/6;

B1=(3*t*t*t-6*t*t+4)/6;

B2=(-3*t*t*t+3*t*t+3*t+1)/6;

B3=t*t*t/6;

PX(i)=B0*P1

(1)+B1*P2

(1)

+B2*P3

(1)+B3*P4

(1);

PY(i)=B0*P1

(2)+B1*P2

(2)

+B2*P3

(2)+B3*P4

(2);

t=t+deltat;

end

figure;plot(PX,PY,‘blue’);函数holdon;

PXX=[P1

(1),P2

(1),P3

(1),P4

(1)];

PYY=[P1

(2),P2

(2),P3

(2),P4

(2)];

plot(PXX,PYY,':

red',PXX,PYY,'o');

%绘制第2段曲线

t=0.0;

fori=1:

count+1

B0=(-t*t*t+3*t*t-3*t+1)/6;

B1=(3*t*t*t-6*t*t+4)/6;

B2=(-3*t*t*t+3*t*t+3*t+1)/6;

B3=t*t*t/6;

PX(i)=B0*P2

(1)+B1*P3

(1)+B2*P4

(1)+B3*P5

(1);

PY(i)=B0*P2

(2)+B1*P3

(2)+B2*P4

(2)+B3*P5

(2);

t=t+deltat;

end

plot(PX,PY,'red');

PXX=[P2

(1),P3

(1),P4

(1),P5

(1)];

PYY=[P2

(2),P3

(2),P4

(2),P5

(2)];

holdon;

plot(PXX,PYY,':

red',PXX,PYY,'o');

%绘制第3段曲线

t=0.0;

fori=1:

count+1

B0=(-t*t*t+3*t*t-3*t+1)/6;

B1=(3*t*t*t-6*t*t+4)/6;

B2=(-3*t*t*t+3*t*t+3*t+1)/6;

B3=t*t*t/6;

PX(i)=B0*P3

(1)+B1*P4

(1)+B2*P5

(1)+B3*P6

(1);

PY(i)=B0*P3

(2)+B1*P4

(2)+B2*P5

(2)+B3*P6

(2);

t=t+deltat;

end

plot(PX,PY,'blue');

PXX=[P3

(1),P4

(1),P5

(1),P6

(1)];

PYY=[P3

(2),P4

(2),P5

(2),P6

(2)];

holdon;

plot(PXX,PYY,':

red',PXX,PYY,'o');

%绘制第4段曲线

t=0.0;

fori=1:

count+1

B0=(-t*t*t+3*t*t-3*t+1)/6;

B1=(3*t*t*t-6*t*t+4)/6;

B2=(-3*t*t*t+3*t*t+3*t+1)/6;

B3=t*t*t/6;

PX(i)=B0*P4

(1)+B1*P5

(1)+B2*P6

(1)+B3*P7

(1);

PY(i)=B0*P4

(2)+B1*P5

(2)+B2*P6

(2)+B3*P7

(2);

t=t+deltat;

end

plot(PX,PY,'red');

PXX=[P4

(1),P5

(1),P6

(1),P7

(1)];

PYY=[P4

(2),P5

(2),P6

(2),P7

(2)];

holdon;

plot(PXX,PYY,':

red',PXX,PYY,'o');

实验环境

硬件平台:

PC

软件(推荐):

Windows平台,VisualC++,matlab

实验步骤

1.掌握算法原理;

2.依据算法,编写源程序并进行调试;

3.对运行结果进行保存与分析;

4.把源程序以文件的形式提交;

5.按格式书写实验报告。

实验内容

1、通过实验,进一步理解和掌握生成Hermit、Bezier和B样条曲线及Bezier曲面的生成算法

2、掌握Hermit、Bezier、B样条曲线及Bezier曲面的基本生成过程

3、通过编程,会在一种语言环境下编程实现三次Hermit、Bezier曲线的绘制

实验结果

1、在VC中建立工程,设计界面并给控件添加代码,主界面运行显示如下:

 

(1)Hermit曲线

(2)三次B样条曲线

 

 

(3)Bezier曲线

一次Bezier曲线

二次Bezier曲线

三次Bezier曲线

 

四次Bezier曲线

(4)Bezier曲面

运行程序的主界面(坐标系):

绘制曲面:

2、程序主要的代码:

(1)Hermit曲线

inta[4][4]={{2,-2,1,1},{-3,3,-2,-1},{0,0,1,0},{1,0,0,0}};//Mh矩阵系数

intb[4][2];//边界点

for(inti=0;i<8;i++)

{

b[0][0]=p1[i][0];b[0][1]=p1[i][1];//起点的坐标

b[1][0]=p1[i+1][0];b[1][1]=p1[i+1][1];//终点的坐标

b[2][0]=p2[i][0];b[2][1]=p2[i][1];//起点的导数

b[3][0]=p2[i+1][0];b[3][1]=p2[i+1][1];//终点的导数

MultiMatrix(a,b);

CPenMyPen,*pOldPen;

MyPen.CreatePen(PS_SOLID,1,RGB(255,0,0));

pOldPen=pDC->SelectObject(&MyPen);

pDC->MoveTo(p1[i][0],p1[i][1]);

for(doublet=0.0;t<=1;t+=1.0/400)

{

intx=ROUND(pow(t,3)*result[0][0]+pow(t,2)*result[1][0]

+t*result[2][0]+result[3][0]);

inty=ROUND(pow(t,3)*result[0][1]+pow(t,2)*result[1][1]

+t*result[2][1]+result[3][1]);

pDC->LineTo(x,y);

}

pDC->SelectObject(pOldPen);

MyPen.DeleteObject();

}

(2)三次B样条曲线

inti,rate=10;//rate是平滑程度

longlx,ly;

doubleF03,F13,F23,F33;

lx=ROUND((xq[0][0]+4.0*xq[1][0]+xq[2][0])/6.0);//t=0的起点x坐标

ly=ROUND((xq[0][1]+4.0*xq[1][1]+xq[2][1])/6.0);//t=0的起点y坐标

pDC->MoveTo(lx,ly);

CPenMyPen2(PS_SOLID,3,RGB(255,0,0));//红笔画B样条

CPen*POldPen2=pDC->SelectObject(&MyPen2);

for(i=1;i<7;i++)//6段样条曲线

{

for(doublet=0;t<=1;t+=1.0/rate)

{

F03=(-t*t*t+3*t*t-3*t+1)/6;//计算F0,3(t)

F13=(3*t*t*t-6*t*t+4)/6;//计算F1,3(t)

F23=(-3*t*t*t+3*t*t+3*t+1)/6;//计算F2,3(t)

F33=t*t*t/6;//计算B3,3(t)

lx=ROUND(xq[i-1][0]*F03+xq[i][0]*F13+xq[i+1][0]*F23+xq[i+2][0]*F33);

ly=ROUND(xq[i-1][1]*F03+xq[i][1]*F13+xq[i+1][1]*F23+xq[i+2][1]*F33);

pDC->LineTo(lx,ly);

}

}

pDC->SelectObject(POldPen2);

MyPen2.DeleteObject();

实验总结

通过这次实验体会到了生活中的曲线是与学习中的曲线息息相关的,明确了学习与实践是应当有效结合的,此次实验加深了对Bezier,三次均匀B样条曲线的了解。

因为曲面由曲线所生成,线由点所生成,它们是环环相扣的,通过控制顶点生成曲线,通过曲线生成曲面。

所以画曲线,的关键在于将它们之间的关系理清楚。

指导教师意见

 

签名:

年月日

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1