comparison scripts/plot/appearance/diffuse.m @ 18399:6c090b42068b

diffuse.m: Overhaul function. * diffuse.m: Improve documentation string. Validate light vector input is a vector. Use standard format for error() messages.
author Rik <rik@octave.org>
date Wed, 22 Jan 2014 15:34:20 -0800
parents d63878346099
children 4197fc428c7d
comparison
equal deleted inserted replaced
18370:c3f3fa5a5db5 18399:6c090b42068b
16 ## along with Octave; see the file COPYING. If not, see 16 ## along with Octave; see the file COPYING. If not, see
17 ## <http://www.gnu.org/licenses/>. 17 ## <http://www.gnu.org/licenses/>.
18 18
19 ## -*- texinfo -*- 19 ## -*- texinfo -*-
20 ## @deftypefn {Function File} {} diffuse (@var{sx}, @var{sy}, @var{sz}, @var{lv}) 20 ## @deftypefn {Function File} {} diffuse (@var{sx}, @var{sy}, @var{sz}, @var{lv})
21 ## Calculate diffuse reflection strength of a surface defined by the normal 21 ## Calculate the diffuse reflection strength of a surface defined by the normal
22 ## vector elements @var{sx}, @var{sy}, @var{sz}. 22 ## vector elements @var{sx}, @var{sy}, @var{sz}.
23 ## 23 ##
24 ## The light source location vector @var{lv} can be given as 2-element vector 24 ## The light source location vector @var{lv} can be given as a 2-element vector
25 ## [azimuth, elevation] in degrees or as 3-element vector [lx, ly, lz]. 25 ## [azimuth, elevation] in degrees or as a 3-element vector [x, y, z].
26 ## @seealso{specular, surfl} 26 ## @seealso{specular, surfl}
27 ## @end deftypefn 27 ## @end deftypefn
28 28
29 ## Author: Kai Habel <kai.habel@gmx.de> 29 ## Author: Kai Habel <kai.habel@gmx.de>
30 30
32 32
33 if (nargin != 4) 33 if (nargin != 4)
34 print_usage (); 34 print_usage ();
35 endif 35 endif
36 36
37 ## check for normal vector 37 ## Check normal vectors
38 if (!size_equal (sx, sy, sz)) 38 if (! size_equal (sx, sy, sz))
39 error ("diffuse: SX, SY, and SZ must have same size"); 39 error ("diffuse: SX, SY, and SZ must be the same size");
40 endif 40 endif
41 41
42 ## check for light vector (lv) argument 42 ## Check light vector (lv) argument
43 if (length (lv) < 2 || length (lv) > 3) 43 if (! isvector (lv) || length (lv) < 2 || length (lv) > 3)
44 error ("diffuse: light vector LV must be a 2- or 3-element vector"); 44 error ("diffuse: light vector LV must be a 2- or 3-element vector");
45 elseif (length (lv) == 2) 45 elseif (length (lv) == 2)
46 [lv(1), lv(2), lv(3)] = sph2cart (lv(1) * pi/180, lv(2) * pi/180, 1.0); 46 [lv(1), lv(2), lv(3)] = sph2cart (lv(1) * pi/180, lv(2) * pi/180, 1.0);
47 endif 47 endif
48 48
49 ## Normalize view and light vector. 49 ## Normalize view and light vector.
50 if (sum (abs (lv)) > 0) 50 if (sum (abs (lv)) > 0)
51 lv /= norm (lv); 51 lv /= norm (lv);
52 endif 52 endif
53 53
54 ns = sqrt (sx.^2 + sy.^2 + sz.^2); 54 ns = sqrt (sx.^2 + sy.^2 + sz.^2);
55 retval = (sx * lv(1) + sy * lv(2) + sz * lv(3)) ./ ns; 55 retval = (sx * lv(1) + sy * lv(2) + sz * lv(3)) ./ ns;
56 retval(retval < 0) = 0; 56 retval(retval < 0) = 0;