• 大小: 3KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-03
  • 语言: Matlab
  • 标签: MATLAB  三维  选点  

资源简介

选择三维点云的点,返回坐标: H = CLICKA3DPOINT(POINTCLOUD) shows a 3D point cloud and lets the user % select points by clicking on them. The selected point is highlighted % and its index in the point cloud will is printed on the screen. % POINTCLOUD should be a 3*N matrix, represending N 3D points. % Handle to the figure is returned. % % other functions required: % CALLBACKCLICK3DPOINT mouse click callback function % ROWNORM returns norms of each row of a matrix % % To test this function ... % pointCloud = rand(3,100)*100; % h = clickA3DPoint(pointCloud); % % now rotate or move the point cloud and try it again. % (on the figure View menu, turn the Camera Toolbar on, ...) % % To turn off the callback ... % set(h, 'WindowButtonDownFcn','');

资源截图

代码片段和文件信息

function callbackClickA3DPoint(src eventData pointCloud)
% CALLBACKCLICK3DPOINT mouse click callback function for CLICKA3DPOINT
%
%   The transformation between the viewing frame and the point cloud frame
%   is calculated using the camera viewing direction and the ‘up‘ vector.
%   Then the point cloud is transformed into the viewing frame. Finally
%   the z coordinate in this frame is ignored and the x and y coordinates
%   of all the points are compared with the mouse click location and the 
%   closest point is selected.
%
%   Babak Taati - May 4 2005
%   revised Oct 31 2007
%   revised Jun 3 2008
%   revised May 19 2009

point = get(gca ‘CurrentPoint‘); % mouse click position
camPos = get(gca ‘CameraPosition‘); % camera position
camTgt = get(gca ‘CameraTarget‘); % where the camera is pointing to

camDir = camPos - camTgt; % camera direction
camUpVect = get(gca ‘CameraUpVector‘); % camera ‘up‘ vector

% build an orthonormal frame based on the viewing direction and the 
% up vector (the “view frame“)
zAxis = camDir/norm(camDir);    
upAxis = camUpVect/norm(camUpVect); 
xAxis = cross(upAxis zAxis);
yAxis = cross(zAxis xAxis);

rot = [xAxis; yAxis; zAxis]; % view rotation 

% the point cloud represented in the view frame
rotatedPointCloud = rot * pointCloud; 

% the clicked point represented in the view frame
rotatedPointFront = rot * point‘ ;

% find the nearest neighbour to the clicked point 
pointCloudIndex = dsearchn(rotatedPointCloud(1:2:)‘ ... 
    rotatedPointFront(1:2));

h = findobj(gca‘Tag‘‘pt‘); % try to find the old point
selectedPoint = pointCloud(: pointCloudIndex); 

if isempty(h) % if it‘s the first click (i.e. no previous point to delete)
    
    % highlight the selected point
    h = plot3(selectedPoint(1:) selectedPoint(2:) ...
        selectedPoint(3:) ‘r.‘ ‘MarkerSize‘ 20); 
    set(h‘Tag‘‘pt‘); % set its Tag property for later use   

else % if it is not the first click

    delete(h); % delete the previously selected point
    
    % highlight the newly selected point
    h = plot3(selectedPoint(1:) selectedPoint(2:) ...
        selectedPoint(3:) ‘r.‘ ‘MarkerSize‘ 20);  
    set(h‘Tag‘‘pt‘);  % set its Tag property for later use

end

fprintf(‘you clicked on point number %d\n‘ pointCloudIndex);

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        2361  2009-11-10 14:54  callbackClickA3DPoint.m
     文件        1600  2009-11-10 14:52  clickA3DPoint.m
     文件        1332  2009-11-10 15:00  license.txt
     文件         338  2009-11-10 14:51  rowNorm.m

评论

共有 条评论