Advertisement
Guest User

Untitled

a guest
Oct 21st, 2014
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 1.95 KB | None | 0 0
  1. function [x y z] = egg(top,bottom,dt,mode)
  2.  
  3. %
  4. % Auteur: Simon Demaré
  5. % Date: 27/10/2014
  6. % Description: Produit une sphère ou la dérivée d'une sphère en fonction
  7. % des valeurs de top et bottom sachant que:
  8. % top = 1 et bottom = 1 donne une sphère
  9. % top = 2 et bottom = 1 donne un oeuf
  10. % top = 1 et bottom = 2 donne un oeuf inversé
  11. % etc. Le programme est basé sur l'utilisation de NURBS.
  12. % Merci à Paul Decroes pour l'aide à la compréhension
  13.  
  14.  
  15.  
  16. T = [0,0,0,1,1,2,2,3]; %n=7 car 8 noeuds (donnée)
  17. S = [0,0,0,1,1,2,2,3,3,4,4,5]; %m=11 car 12 noeuds(donnée)
  18.  
  19. tp=top+bottom;
  20. %R et H pour sphère valent [0 2 2 2 0] et [0 0 1 2 2]
  21. %Bel oeuf H = [0 0 1 4 4]
  22. R= [0 2 2 2 0]; %Rayons des différents cercles
  23. Premier = 0;
  24. Dernier = top*2;
  25. %H = [Premier Premier 1 Dernier Dernier] %Hauteurs des couches constructrices
  26. H = [-bottom -bottom 0 top top]
  27. %middle = 0
  28.  
  29.  % La forme de base est un carré de 2 de coté. Les points sont ceux
  30.  % du périmètre du carré avec un pas de 1 (c/2). Les Xc et Yc sont donc
  31.  % correspondants à ces points
  32. p = 2; %degré des surfaces (donnée)
  33. Xc =[0 0 1 2 2 2 1 0 0]./2;
  34. Yc =[1 2 2 2 1 0 0 0 1]./2;
  35. Xc = Xc - mean(Xc);
  36. Yc = Yc - mean(Yc);
  37. Zc = ones(size(Xc));
  38. a=sqrt(2)/2;
  39. Wc = [1 a 1 a 1 a 1 a 1] ;
  40. X = Xc' * R;
  41. Y = Yc' * R;
  42. Z = Zc' * H;
  43. W = Wc' * [1 a 1 a 1];
  44.  
  45.  
  46.  
  47. nt = length(T) - 1;
  48. t = [T(p+1):dt:T(nt-p+1)];
  49. for i=0:nt-p-1
  50.   Bt(i+1,:) = b(t,T,i,p);
  51. end
  52.  
  53. ns = length(S) - 1;
  54. s = [S(p+1):dt:S(ns-p+1)];
  55. for i=0:ns-p-1
  56.  Bs(i+1,:) = b(s,S,i,p);
  57. end
  58.  
  59. w = Bs' * W * Bt;
  60. x = Bs' * (W .* X) * Bt ./ w;
  61. y = Bs' * (W .* Y) * Bt ./ w;
  62. z = Bs' * (W .* Z) * Bt ./ w;
  63. end
  64.  
  65.  
  66. function u = b(t,T,j,p) %calcul des splines
  67. i = j+1;
  68. if p==0
  69.     u = (t>= T(i) & t < T(i+p+1)); return
  70. end
  71.  
  72. u = zeros(size(t));
  73. if T(i) ~= T(i+p)
  74.     u = u + ((t-T(i)) / (T(i+p) -T(i))) .* b(t,T,j,p-1);
  75. end
  76. if T(i+1) ~= T(i+p+1)
  77.     u = u + ((T(i+p+1)-t) ./ (T(i+p+1) -T(i+1))) .* b(t,T,j+1,p-1);
  78. end
  79. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement