矩阵权(Matrix weighted)Bezier三角(曲面)片
来源:互联网 发布:js url encode 中文 编辑:程序博客网 时间:2024/04/29 23:09
参考文献仍然是杨老师的这篇
Matrix weighted rational curves and surfaces
文章,结合上篇博文中的算法,再次将其引申到三角面片上
算法描述
假设
其中
代码实现
用matlab编写的如下程序为实现函数wm_tri.m
function trepBer = wm_tri( controls,num,M,N )%WM_TRI Summary of this function goes here% Detailed explanation goes herepoints=cell(num,num);for i=1:num for j=1:i points{i,j}=[(j-1)*(1/(num-1)),1-(i-1)*(1/(num-1)),(i-j)*(1/(num-1))]; endendn=size(controls,1);Bpoints=cell(num,num);for i=1:num for j=1:i Bpoints{i,j}=[0;0;0]; tempM=zeros(3); for u=1:n for v=1:u %i=v-1;j=n-u;k=u-v tempM=tempM+M{u+v-1}*factorial(n-1)/(factorial(v-1)*factorial(n-u)*factorial(u-v))*(points{i,j}(1)^(v-1)*points{i,j}(2)^(n-u)*points{i,j}(3)^(u-v)); Bpoints{i,j}=Bpoints{i,j}+M{u+v-1}*controls{u,v}'*factorial(n-1)/(factorial(v-1)*factorial(n-u)*factorial(u-v))*(points{i,j}(1)^(v-1)*points{i,j}(2)^(n-u)*points{i,j}(3)^(u-v)); end end Bpoints{i,j}=(tempM\Bpoints{i,j})'; endendtriConPoi=zeros(n*(n+1)/2,3);temp=1;for i=1:n for j=1:i triConPoi(temp,:)=controls{i,j}; temp=temp+1; endendtriConSur=zeros((n-1)^2,3);temp=1;for i=2:n%the first in the i-th line is n(n-1)/2 for j=1:i-1 %Counter clockwise order,up triangle triConSur(temp,:)=[i*(i-1)/2+j,i*(i-1)/2+j+1,i*(i-1)/2+j+1-i]; temp=temp+1; endendfor i=2:n-1%the first in the i-th line is n(n-1)/2 for j=1:i-1 %Counter clockwise order,down triangle triConSur(temp,:)=[i*(i-1)/2+j+1,i*(i-1)/2+j,i*(i-1)/2+j+1+i]; temp=temp+1; endendtrepCon=triangulation(triConSur,triConPoi); triBezPoi=zeros(n*(n+1)/2,3);temp=1;for i=1:num for j=1:i triBezPoi(temp,:)=Bpoints{i,j}; temp=temp+1; endendtriBerSur=zeros((num-1)^2,3);temp=1;for i=2:num%the first in the i-th line is n(n-1)/2 for j=1:i-1 %Counter clockwise order,up triangle triBerSur(temp,:)=[i*(i-1)/2+j,i*(i-1)/2+j+1,i*(i-1)/2+j+1-i]; temp=temp+1; endendfor i=2:num-1%the first in the i-th line is n(n-1)/2 for j=1:i-1 %Counter clockwise order,down triangle triBerSur(temp,:)=[i*(i-1)/2+j+1,i*(i-1)/2+j,i*(i-1)/2+j+1+i]; temp=temp+1; endendtrepBer=triangulation(triBerSur,triBezPoi); trisurf(trepCon,'edgecolor','k','FaceColor', 'interp');alpha(.2);axis equal;hold on;trisurf(trepBer,'edgecolor','none','FaceColor', 'interp');alpha(.9);hold on;for i=1:3quiver3(triConPoi(i,1),triConPoi(i,2),triConPoi(i,3),N(i,1),N(i,2),N(i,3),'r','filled','LineWidth',2);hold on;endend
示例
下面绘制一个瞅瞅哈
controls = cell(2,2);controls{1,1}=[0,0,0];controls{2,1}=[0.5,1,-0.2];controls{2,2}=[-0.4,0.9,0.1];N=[0.1,-0.3,0.6;0.4,0.3,0.6;-0.3,0.4,0.4];omega=ones(3,1);niu=ones(3,1);M=cell(3,1);for i=1:3S=sqrt(N(i,1)^2+N(i,2)^2+N(i,3)^2);N(i,1)=N(i,1)/S;N(i,2)=N(i,2)/S;N(i,3)=N(i,3)/S;endI=[1 0 0;0 1 0;0 0 1];for i=1:3M{i}=omega(i)*(I+niu(i)*N(i,:)'*N(i,:));endtrepBer = wm_tri( controls,30,M,N);
结果如下图
再来一个例子
来一整个模型瞅瞅,比如说人脸的例子
老铁没毛病
阅读全文
1 0
- 矩阵权(Matrix weighted)Bezier三角(曲面)片
- MATLAB绘制矩阵权(Matrix weighted)有理Bezier曲线
- 矩阵权(Matrix weighted)的LOOP细分实现
- 绘制Bezier三角面片
- (28)Bezier曲线和曲面
- 计算机图形学 学习笔记(十):曲线曲面(二):Bezier 曲线与曲面
- bezier曲线和bezier曲面
- NURBS曲面显示Bezier曲面
- Q99:当Bezier曲面(Utah Teapot)同时遇上“噪声纹理”和“Phong反射模型”
- Matrix(矩阵操作)
- 矩阵(Matrix)
- 问题五十四:怎么用ray tracing画参数方程表示的曲面(2)—— bezier surface
- Q98:三角形网格细分Bezier曲面时,注意三角形顶点的顺序(确保其对应的法向量向外)
- Bezier曲线与曲面(1)
- Bezier曲线与曲面(2)
- Bezier曲线与曲面(1)
- Bezier曲线与曲面(1)
- Bezier曲线与曲面(2)
- 五分钟学GIS | 大数据之分布式空间分析服务
- java调用WebService接口的几种方法
- C++中的基础相关知识之预处理,const,sizeof
- 桌面应用程序与web应用程序
- MyEclipse WebSphere开发教程:安装和更新WebSphere 6.1, JAX-WS, EJB 3.0(四)
- 矩阵权(Matrix weighted)Bezier三角(曲面)片
- 关于viewpager与fragment需要刷新数据的bug,解决办法。
- 苹果APP定制开发
- TensorFlow学习--图graph/会话Session
- Ubuntu 16.04 几个国内更新源
- IPv6 地址类型
- [Asp.net]引用System.Data.OraclieClient.dll
- 人生选择点的思考
- lambda表达式