www.gusucode.com > Arduino_Engineering_Kit_Project_Files工具箱matlab程序 > Arduino_Engineering_Kit_Project_Files/DrawingRobot/Solutions/transformPixelsToMeters.m

    function segmentsMeters = transformPixelsToMeters(segmentsPix,xLim,yLim,xLimPix,yLimPix,fraction)
% Copyright 2018 The MathWorks, Inc.

xMinM = xLim(1);
yMinM = yLim(1);
xRangeM = diff(xLim);
yRangeM = diff(yLim);

% Determine the range of the coordinates to draw
xMinPix = xLimPix(1);
yMinPix = yLimPix(1);
xRangePix = diff(xLimPix);
yRangePix = diff(yLimPix);

% Scale from pixels to real world units (Mes)
xScaleFactor = fraction * xRangeM/xRangePix;
yScaleFactor = fraction * yRangeM/xRangePix;

% Pick the smaller scale factor. If both are NaN, pick 0.
pix2M = min(xScaleFactor,yScaleFactor);
if isnan(pix2M)
    pix2M = 0;
end

% Identify origin position of scaled drawing
centerMeters = [xMinM yMinM] + [xRangeM yRangeM]/2;
drawingOriginM = centerMeters - pix2M*[xRangePix yRangePix]/2;

segmentsMeters = cell(size(segmentsPix));
nSegments = length(segmentsPix);
for ii = 1:nSegments
    % Scale all segments by the computed scaling factor
    coordsPix = segmentsPix{ii};
    coordsPix = fliplr(coordsPix); %Convert from row,col to x,y
    coordsMeters = pix2M*(coordsPix-[xMinPix yMinPix]) + drawingOriginM;
    segmentsMeters{ii} = coordsMeters;
end