图形学实验.doc
文本预览下载声明
贵州大学实验报告
学院: 计信学院 专业: 计算机科学与技术 班级:软工102
姓名 学号 实验组 实验时间 2013-6-2 指导教师 成绩 实验项目名称 常用曲面和曲线的生成算法 实验目的 掌握常用曲线和曲面的生成算法,为几何造型打下基础。
实验要求 编写绘制Hermit、Bezier、B样条曲线的程序。
实验原理 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);
for i=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;
%绘制第一段曲线
for i=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’);函数hold on;
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;
for i=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)];
hold on;
plot(PXX,PYY,:red,PXX,PYY,o);
%绘制第3段曲线
t=0.0;
for i=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
显示全部