Changeset 959 for trunk/src/proj_field.m
- Timestamp:
- Jun 24, 2016, 8:49:08 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/proj_field.m
r955 r959 1653 1653 Mrot=rodrigues(PlaneAngle); 1654 1654 newsummit=zeros(3,8);% initialize the rotated summit coordinates 1655 ObjectData.Coord=[ObjectData.Coord(1,1); ObjectData.Coord(1,2); 0];%TODO: set in set_object 1655 ObjectData.Coord=ObjectData.Coord'; 1656 if size(ObjectData.Coord,2)<3 1657 ObjectData.Coord=[ObjectData.Coord; 0];%add z origin at z=0 by default 1658 end 1656 1659 for isummit=1:8% TODO: introduce a function for rotation of n points (to use also for scattered data) 1657 1660 newsummit(:,isummit)=Mrot*(summit(:,isummit)-(ObjectData.Coord)); 1658 1661 end 1659 coord_x_proj=min(newsummit(1,:)):InterpMesh: max(newsummit(1,:)); 1662 coord_x_proj=min(newsummit(1,:)):InterpMesh: max(newsummit(1,:));% set of coordinqtes in the projection plane 1660 1663 coord_y_proj=min(newsummit(2,:)):InterpMesh: max(newsummit(2,:)); 1661 coord_z_proj=-width: InterpMesh:width;1662 Mrot_inverse=rodrigues(-PlaneAngle); 1664 coord_z_proj=-width:width; 1665 Mrot_inverse=rodrigues(-PlaneAngle);% inverse rotation matrix 1663 1666 Origin=Mrot_inverse*[coord_x_proj(1);coord_y_proj(1);coord_z_proj(1)]+ObjectData.Coord; 1664 ix=Mrot_inverse*[coord_x_proj(end)-coord_x_proj(1);0;0];% unit vector along the new x coordinates 1665 iy=Mrot_inverse*[0;coord_y_proj(end)-coord_y_proj(1);0];% unit vector y coordinates 1666 iz=Mrot_inverse*[0;0;coord_z_proj(end)-coord_z_proj(1)];% x unit vector z coordinates 1667 [Grid_x,Grid_y,Grid_z]=meshgrid(1:numel(coord_x_proj),1:numel(coord_y_proj),1:numel(coord_z_proj)); 1668 if ismatrix(Grid_x) 1667 npx=numel(coord_x_proj); 1668 npy=numel(coord_y_proj); 1669 npz=numel(coord_z_proj); 1670 ix=Mrot_inverse*[coord_x_proj(end)-coord_x_proj(1);0;0]/(npx-1);% unit vector along the new x coordinates 1671 iy=Mrot_inverse*[0;coord_y_proj(end)-coord_y_proj(1);0]/(npy-1);% unit vector y coordinates 1672 iz=Mrot_inverse*[0;0;coord_z_proj(end)-coord_z_proj(1)]/(npz-1);% x unit vector z coordinates 1673 [Grid_x,Grid_y,Grid_z]=meshgrid(0:npx-1,0:npy-1,0:npz-1); 1674 if ismatrix(Grid_x)% add a singleton in case of a single z value 1669 1675 Grid_x=shiftdim(Grid_x,-1); 1670 1676 Grid_y=shiftdim(Grid_y,-1); … … 1681 1687 VarName=FieldData.ListVarName{ivar}; 1682 1688 ListVarName=[ListVarName VarName]; 1689 VarDimName=[VarDimName {{'coord_y','coord_x'}}]; 1683 1690 VarAttribute{length(ListVarName)}=FieldData.VarAttribute{ivar}; %reproduce the variable attributes 1684 1691 FieldData.(VarName)=permute(FieldData.(VarName),[2 3 1]); 1685 ProjData.(VarName)=interp3(X,Y,Z,double(FieldData.(VarName)),XI,YI,ZI); 1692 ProjData.coord_x=coord_x_proj; 1693 ProjData.coord_y=coord_y_proj; 1694 ProjData.(VarName)=interp3(X,Y,Z,double(FieldData.(VarName)),XI,YI,ZI,'*linear'); 1695 ProjData.(VarName)=nanmean(ProjData.(VarName),3); 1696 ProjData.(VarName)=squeeze(ProjData.(VarName)); 1686 1697 end 1687 1698 end
Note: See TracChangeset
for help on using the changeset viewer.