⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 plot_bezier.m

📁 matlab例子
💻 M
字号:
function plot_Bezier(object_cells)
%用来绘制Bezier曲线。object_cells是一个行元胞数组,存放运算后曲线上的点。
temp_size_object_cells=size(object_cells);
cells_num=temp_size_object_cells(1,2);
object=[];
for i=1:cells_num;
    object=[object;object_cells{1,i}];
end
plot(object(:,1),object(:,2));


function flag=judge(object);
%这个函数用在判断指定的点所组成的折线能否代替真实的Bezier曲线,即控制点到端点
%直线的距离能否满足给定误差。
%object,包含一个point_num*2的矩阵,矩阵的每一行代表一个点
%的坐标;point_num为点的数目,决定了Bezier曲线的阶数(point_num-1)阶;error为
%给定的误差;flag为输出,flag为1时,表示满足条件;为0时不满足。
global error;%希望使用全局变量的函数,脚本必须声明global。
temp_size=size(object);
point_num=temp_size(1);
p_first=object(1,:);
p_last=object(end,:);
flag=1;
for i=2:point_num-1;
    d=abs((p_last(2)-p_first(2))*object(i,1)-(p_last(1)-p_first(1))*object(i,2)-(p_last(2)*p_first(1)-p_first(2)*p_last(1)))/sqrt((p_last(2)-p_first(2))^2+(p_last(1)-p_first(1))^2);
    if d>error;
        flag=0;
        break;
    end
end
        

function new_cells=evolve_cells(old_cells)
%输入为一个元胞数组old_cells,输出为一个新的元胞数组new_cells
temp_size_old_cells=size(old_cells);
old_cells_num=temp_size_old_cells(1,2);
new_cells=[];
for i=1:old_cells_num;
    flag=judge(old_cells{1,i});
    if flag==0;
        [temp_left,temp_right]=creat_2new(old_cells{1,i});
        new_cells=[new_cells,{temp_left},{temp_right}];
    else
        new_cells=[new_cells,{old_cells{1,i}}];
    end
end


function eq=equal(old_cells,new_cells);
eq=1;
temp_size_old_cells=size(old_cells);
temp_size_new_cells=size(new_cells);
if temp_size_old_cells(1,2)~=temp_size_new_cells(1,2);
    eq=0;
end


function [left,right]=creat_2new(object)
%但object中的点不能满足误差要求是,需要对他在分解。分解成的两个
%left,right。
temp_size=size(object);
point_num=temp_size(1);
operate_cell=cell(point_num,point_num);
for i=1:point_num;
    operate_cell{i,1}=object(i,:);
end
for j=2:point_num;
    for i=j:point_num;
        operate_cell{i,j}=(operate_cell{i,j-1}+operate_cell{i-1,j-1})/2;
    end
end
left=[];
right=[];
for i=1:point_num;
    left=[left;operate_cell{i,i}];
    right=[right;operate_cell{point_num,point_num-i+1}];
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -