function w = PrecomputeWeights(p,v,a)
a=2;
w = zeros(size(p,2),size(v,2));
for i=1:size(p,2)
norms_2 = sum((repmat(p(:,i),[1,size(v,2)])-v).^2,1);
w(i,:) = 1./(norms_2.^a+1e-8);
end
上述函数带到主函数中的结果:
四个控制点,十五个平面上的点。每个点对应15个权,那么一共有4*15个权。
clear all;
mesh_source = ‘C:\Users\lixiaohu\Desktop\101028\101028_l\TOOTH_0.obj’;
[v,F] = load_mesh(mesh_source);
vv=v’;
v=vv(1:2,1:15);
p = [-1.0843 -1.2803 -1.5304 -1.4777 ;
-3.1908 -3.1335 -3.0674 -3.0253];
plotpoints(p,‘b.’);hold on;
q = [ -1.7849 -1.4677 -1.4553 -1.1406 ;-2.9599 -2.9778 -2.9399 -3.0429];
PrecomputeWeights(p,v,2)
ans =
0.002295 0.0022236 0.0022512 0.0023375 0.0023902 0.0024005 0.0022846 0.002182 0.0021212 0.0020845 0.0021584 0.002226 0.00223 0.0022163 0.0022649
0.0022142 0.0021535 0.0021693 0.0022431 0.0022999 0.0023162 0.0022124 0.0021322 0.0020773 0.0020477 0.0021076 0.0021574 0.0021505 0.0021259 0.0021727
0.0020831 0.0020358 0.0020383 0.0020966 0.0021562 0.0021788 0.0020909 0.0020377 0.0019909 0.00197 0.0020125 0.0020411 0.0020226 0.0019869 0.0020304
0.0022004 0.0021488 0.0021527 0.002216 0.0022793 0.0023028 0.0022079 0.0021486 0.002098 0.0020748 0.0021218 0.0021544 0.0021357 0.0020988 0.0021453
四个大黑块是控制点,其他十五个点,
其中:
repmat(p(:,1),[1,size(v,2)])
repmat(p(:,2),[1,size(v,2)])
repmat(p(:,3),[1,size(v,2)])
repmat(p(:,4),[1,size(v,2)])
运行结果是:每个点重复了十五次,为了都跟v的十五个点完成一一对应相减。
ans =
-1.0843 -1.0843 -1.0843 -1.0843 -1.0843 -1.0843 -1.0843 -1.0843 -1.0843 -1.0843 -1.0843 -1.0843 -1.0843 -1.0843 -1.0843
-3.1908 -3.1908 -3.1908 -3.1908 -3.1908 -3.1908 -3.1908 -3.1908 -3.1908 -3.1908 -3.1908 -3.1908 -3.1908 -3.1908 -3.1908
ans =
-1.2803 -1.2803 -1.2803 -1.2803 -1.2803 -1.2803 -1.2803 -1.2803 -1.2803 -1.2803 -1.2803 -1.2803 -1.2803 -1.2803 -1.2803
-3.1335 -3.1335 -3.1335 -3.1335 -3.1335 -3.1335 -3.1335 -3.1335 -3.1335 -3.1335 -3.1335 -3.1335 -3.1335 -3.1335 -3.1335
ans =
-1.5304 -1.5304 -1.5304 -1.5304 -1.5304 -1.5304 -1.5304 -1.5304 -1.5304 -1.5304 -1.5304 -1.5304 -1.5304 -1.5304 -1.5304
-3.0674 -3.0674 -3.0674 -3.0674 -3.0674 -3.0674 -3.0674 -3.0674 -3.0674 -3.0674 -3.0674 -3.0674 -3.0674 -3.0674 -3.0674
ans =
-1.4777 -1.4777 -1.4777 -1.4777 -1.4777 -1.4777 -1.4777 -1.4777 -1.4777 -1.4777 -1.4777 -1.4777 -1.4777 -1.4777 -1.4777
-3.0253 -3.0253 -3.0253 -3.0253 -3.0253 -3.0253 -3.0253 -3.0253 -3.0253 -3.0253 -3.0253 -3.0253 -3.0253 -3.0253 -3.0253