根据百分比制作更大或更小的六边形(MATLAB)

时间:2017-02-01 22:04:28

标签: matlab plot

我有六角形点如下:

Points =
2.0000    3.0000
1.1340    2.5000
1.1340    1.5000
2.0000    1.0000
2.8660    1.5000
2.8660    2.5000

然后我将这些观点绘制如下: Hexagonal

现在,我希望将它缩小80%并将较小的一个放入具有不同颜色的原始六边形中。

同样,我想重复这个原始的六边形,尺寸大140%。

MATLAB中有没有这样的功能呢?

3 个答案:

答案 0 :(得分:1)

据我所知,没有缩放点的功能,但这很容易通过减去中心,然后缩放点,然后将中心重新加入来手动完成。

示例:

points = [ ...
    2.0000    3.0000
    1.1340    2.5000
    1.1340    1.5000
    2.0000    1.0000
    2.8660    1.5000
    2.8660    2.5000];

% Translate so center is at 0,0
centerx = mean(points(:,1));
centery = mean(points(:,2));

points0 = points;
points0(:,1) = points0(:,1) - centerx;
points0(:,2) = points0(:,2) - centery;

% Scale
points1 = points0 * 0.80;
points2 = points0 * 1.40;

% Translate back to original center
points1(:,1) = points1(:,1) + centerx;
points1(:,2) = points1(:,2) + centery;
points2(:,1) = points2(:,1) + centerx;
points2(:,2) = points2(:,2) + centery;

% Plot results
figure(); hold on;
plot(points([1:end 1],1), points([1:end 1],2), '-b');
plot(points1([1:end 1],1), points1([1:end 1],2), '-r');
plot(points2([1:end 1],1), points2([1:end 1],2), '-k');

答案 1 :(得分:1)

你的六边形似乎以[2,2]为中心。所以你可以减去中心,缩放,然后加回中心,如下所示:

center = ones(6,1)*[2,2];
Points_scaled = (Points - center) * scale + center;

其中scale = 0.8缩小,1.4缩放。 Plot Points_scaled与绘制点的方式相同。要更改颜色,请使用例如plot(..., 'Color',the_color)其中the_color可以是characer('r','k','g',...)或RGB三元组([0,0] ,1],...)。

答案 2 :(得分:1)

您可以使用shrinkfaces

% the original patch:
p1 = patch(Points(:,1),Points(:,2),'w','EdgeColor','b')
% reduce p1 by 80%:    
p2 = shrinkfaces(p1,0.2)
patch(p2,'FaceColor','none','EdgeColor','g')
% enlarge p1 by 140%:
p3 = shrinkfaces(p1,1.4)
patch(p3,'FaceColor','none','EdgeColor','r')

ShrinkPatch