资源简介

MATLAB 透镜成像 Optometrika,此程序是模拟透镜等一系列光学元件成像的MATLAB代码,使用MATLAB面向对象的程序设计方法,用户可以自行调用类来获得想要的模拟效果。

资源截图

代码片段和文件信息

classdef Aperture < Surface
    % APERTURE defines a circular opening
    %
    % Member functions:
    %
    % a = Aperture( r D ) - object constructor
    % INPUT:
    % r - 1x3 position vector
    % D - 2x1 vector (inner diameter outer diameter)
    % OUTPUT:
    % a - aperture object
    %
    % a.display() - displays the aperture a information
    %
    % draw() - draws the aperture a in the current axes
    % 
    % a.rotate( rot_axis rot_angle ) - rotate the aperture
    % INPUT:
    %   rot_axis - 1x3 vector defining the rotation axis
    %   rot_angle - rotation angle (radians)
    % 
    % Copyright: Yury Petrov 2016
    %
    
    properties
        D = [ 1; 2 ]
    end
    
    methods
        function self = Aperture( ar aD )
            self.glass = { ‘air‘ ‘soot‘ };
            if nargin == 0
                return;
            end
            self.r = ar;
            if size( aD 1 ) < size( aD 2 )
                aD = aD‘;
            end
            self.D = aD;
            if size( self.D 1 ) == 1 || self.D(2) < self.D(1)
                error( ‘Outer radius has to be larger than the inner radius‘ );
            end
        end
        
        function display( self )
            fprintf( ‘Position:\t [%.3f %.3f %.3f]\n‘ self.r );
            fprintf( ‘Orientation:\t [%.3f %.3f %.3f]\n‘ self.n );
            fprintf( ‘Diameter in:\t %.3f\n‘ self.D(1) );
            fprintf( ‘Diameter out:\t %.3f\n‘ self.D(2) );
        end
        
        function h = draw( self color )
            nrad = 2;
            rad = linspace( self.D(1) / 2 self.D(2) / 2 nrad );
            nang = 100;
            ang = linspace( 0 2 * pi nang );
            [ ang rad ] = meshgrid( ang rad );
            
            y = rad .* cos( ang );
            z = rad .* sin( ang );
            x = zeros( size( y ) );
            S = [ x(:) y(:) z(:) ];
            
            % rotate and shift
            if self.rotang ~= 0
                S = rodrigues_rot( S self.rotax self.rotang );
            end
            x(:) = S( : 1 ) + self.r( 1 );
            y(:) = S( : 2 ) + self.r( 2 );
            z(:) = S( : 3 ) + self.r( 3 );
            
            % draw
            c = 0.25 * ones( size( x 1 ) size( x 2 ) 3 );
            h = surf( x y z c ‘EdgeColor‘ ‘none‘ ‘FaceLighting‘‘phong‘ ‘FaceColor‘ ‘interp‘ ...
                ‘AmbientStrength‘ 0.25 ‘SpecularStrength‘ 0.25 );
        end
    end
    
end


 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2017-04-21 09:02  Optometrika\
     目录           0  2017-04-21 09:03  __MACOSX\Optometrika\
     目录           0  2017-04-21 09:03  __MACOSX\
     文件       15408  2017-03-26 17:40  Optometrika\说明.docx
     文件        1343  2016-11-30 22:55  Optometrika\license.txt
     文件         216  2016-11-30 22:55  Optometrika\__MACOSX\Optometrika\._surface_sag.m
     文件         216  2016-11-30 22:55  Optometrika\__MACOSX\Optometrika\._rodrigues_rot.m
     文件         216  2016-11-30 22:55  Optometrika\__MACOSX\Optometrika\._refrindx.m
     文件         216  2016-11-30 22:55  Optometrika\__MACOSX\Optometrika\._lensmakers_formula.m
     文件         216  2016-11-30 22:55  Optometrika\__MACOSX\Optometrika\._lens_dims.m
     文件         216  2016-11-30 22:55  Optometrika\__MACOSX\Optometrika\._hist2.m
     目录           0  2017-03-26 17:35  Optometrika\Optometrika\
     文件        6148  2016-11-30 22:55  Optometrika\Optometrika\.DS_Store
     文件        2479  2016-11-30 22:55  Optometrika\Optometrika\Aperture.m
     文件        3257  2016-11-30 22:55  Optometrika\Optometrika\AsphericLens.m
     文件       11112  2017-03-28 20:47  Optometrika\Optometrika\Bench.m
     文件        3296  2016-11-30 22:55  Optometrika\Optometrika\ConeLens.m
     文件        2843  2016-11-30 22:55  Optometrika\Optometrika\CylinderLens.m
     文件       12094  2016-11-30 22:55  Optometrika\Optometrika\Eye.m
     文件        7091  2016-11-30 22:55  Optometrika\Optometrika\FresnelLens.m
     文件        3438  2016-11-30 22:55  Optometrika\Optometrika\GeneralLens.m
     文件        3880  2016-11-30 22:55  Optometrika\Optometrika\Lens.m
     文件        4016  2016-11-30 22:55  Optometrika\Optometrika\Plane.m
     文件        3062  2016-11-30 22:55  Optometrika\Optometrika\README.txt
     文件       53504  2016-11-30 22:55  Optometrika\Optometrika\Rays.m
     文件        3797  2016-11-30 22:55  Optometrika\Optometrika\Retina.m
     文件        3883  2016-11-30 22:55  Optometrika\Optometrika\Screen.m
     文件       11063  2016-11-30 22:55  Optometrika\Optometrika\Sellmeier.glass.refr
     文件        1920  2016-11-30 22:55  Optometrika\Optometrika\Surface.m
     文件         756  2016-11-30 22:55  Optometrika\Optometrika\aspheric.m
     文件        1675  2016-11-30 22:55  Optometrika\Optometrika\asphlens.m
............此处省略180个文件信息

评论

共有 条评论