de Casteljau算法的matlab实现

一直在写c++程序,不过对于一些作图程序来说,还是MATLAB比较实在。

de Casteljau算法是作贝塞尔曲线的一种高效的算法,其思想就是对[0,1]区间中所有的t,通过n个控制顶点不断递推得到一个顶点:下面是我的代码实现:

function   deCasteljau(P,Q)
%P is 1*n matrix for X
%Q is 1*n matrix for Y
m=size(P);
n=m(2);
x=zeros(1,101);
y=zeros(1,101);
p=zeros(n);
q=zeros(n);
plot(P,Q,‘r‘);
hold on
for i=1:n
    p(i,1)=P(i);
    q(i,1)=Q(i);
end
k=1;
for t=0:0.01:1
  for j=2:n
   for i=j:n
       p(i,j)=t*p(i,j-1)+(1-t)*p(i-1,j-1);
       q(i,j)=t*q(i,j-1)+(1-t)*q(i-1,j-1);
   end
  end
  x(k)=p(n,n);
  y(k)=q(n,n);
  k=k+1;
end
plot(x,y,‘b-‘)

下面是测试数据

x=[1,2,3];

y=[3,1,6];

deCasteljau(x,y)

结果为:

de Casteljau算法的matlab实现

时间: 2024-10-25 09:07:05

de Casteljau算法的matlab实现的相关文章

Bezier曲线的实现——de Casteljau算法

这学期同时上了计算机图形学和计算方法两门课,学到这部分的时候突然觉得de Casteljau递推算法特别像牛顿插值,尤其递推计算步骤很像牛顿差商表. 一开始用伯恩斯坦多项式计算Bezier曲线的时候,由于其多项式的计算十分不利于计算机实现,还会出现数值不稳定的情况 所以后来出现了de Casteljau算法,以下PPT截图来自北京化工大学李辉老师  实现代码(六个顶点): import numpy as np import matplotlib.pyplot as plt #B = (1-t)*

【最短路】求两点间最短路的Floyd算法及其matlab实现

代码来源:<图论算法及其matlab实现>(北京航空航天出版社) P22 此代码返回第一个点和最后一个点之间最短路径,以及最短路径的长度. 代码如下: 1 function [P,u ] = Floyd(W) 2 %W表示权值矩阵 3 %P表示最短路径 4 %u表示最短路的权和 5 n=length(W); 6 U=W; 7 m=1; 8 9 while m<=n %判断是否满足停止条件 10 for i=1:n 11 for j=1:n 12 if U(i,j)>U(i,m)+U

【最短路】求两点间最短路径的改进的Dijkstra算法及其matlab实现

代码来源:<图论算法及其matlab实现>(北京航空航天出版社) P18 书中提出了基于经典Dijkstra算法改进的两种算法. 其中算法Ⅱ的效率较高. 代码如下: 1 function a=Dijk(a) 2 %a(输入量)表示图的邻接矩阵 3 %a(输出量)表示所求最短路径的距离矩阵 4 5 %建立邻接矩阵,若不还是对称矩阵,则变为对称矩阵 6 n=length(a); 7 for i=2:n 8 for j=1:(i-1) 9 a(i,j)=a(j,i); 10 end 11 end 1

群智能优化算法-测试函数matlab源码

群智能优化算法测试函数matlab源代码 global M; creatematrix(2); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %画ackley图. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % ackley x from[-5 5] % x=-5:0.01:5; % [x,y]=meshgrid(x); % temp1=x.^2+y.^2; % temp2=cos(2*pi*x)+cos(2*pi*y); % z=20+

【最短路】求最大可靠路的算法及其matlab实现

内容来源:<图论算法及其matlab实现>(北京航空航天出版社) P34 [算法用途] 求图中两顶点间的最大可靠路. 代码如下: 1 %最大可靠路的算法 2 %调用Floyd文件 3 function [P p f]=p_pathf(A) 4 %f=0表示找到路,否则f=1 5 %初始化 6 7 [m n]=size(A); 8 f=0; 9 B=zeros(m,n); 10 %对原矩阵进行转换 11 for i=1:m 12 for j=1:n 13 if A(i,j)>0&A

【最短路】必须通过两个指定点的最短路径算法及其matlab实现

代码来源:<图论算法及其matlab实现>(北京航空航天出版社) P25 首先,函数n2shorf用来计算任意两点之间最短路径长度及最短路经过的节点 需输入起点.终点 1 function [ P u] = n2shorf( W,k1,k2) 2 3 %W表示权值矩阵 4 %k1表示始点,k2表示终点 5 %P表示两顶点之间最短路,u表示最短路的距离 6 7 8 %初始化 9 n=length(W); 10 U=W; 11 m=1; 12 %Floyd算法思想 13 while m<=n

FCM算法的matlab程序(初步)

FCM算法的matlab程序 在https://www.cnblogs.com/kailugaji/p/9648430.html文章中已经介绍了FCM算法,现在用matlab程序实现它. 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1.采用iris数据库 iris_data.txt 5.1 3.5 1.4 0.2 4.9 3 1.4 0.2 4.7 3.2 1.3 0.2 4.6 3.1 1.5 0.2 5 3.6 1.4 0.2 5.4 3.

GMM算法的matlab程序(初步)

GMM算法的matlab程序 在https://www.cnblogs.com/kailugaji/p/9648508.html文章中已经介绍了GMM算法,现在用matlab程序实现它. 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1.采用iris数据库 iris_data.txt 5.1 3.5 1.4 0.2 4.9 3 1.4 0.2 4.7 3.2 1.3 0.2 4.6 3.1 1.5 0.2 5 3.6 1.4 0.2 5.4 3.

K-means算法的matlab程序(初步)

K-means算法的matlab程序 在https://www.cnblogs.com/kailugaji/p/9648369.html 文章中已经介绍了K-means算法,现在用matlab程序实现它. 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1.采用iris数据库 iris_data.txt 5.1 3.5 1.4 0.2 4.9 3 1.4 0.2 4.7 3.2 1.3 0.2 4.6 3.1 1.5 0.2 5 3.6 1.4 0