我正在尝试通过生成像框一样的中心点来创建紧密填充图层,然后剪切该点以创建紧密堆积的圆圈。 more info can be found here
但是我遇到了一些困难..到目前为止,我的代码是
%% Trying out the shear function
rad=2; n=3;
[X,Y] = meshgrid(0 : rad*2 : rad*(n-1)*2 , ...
0 : sqrt(2*(2*rad)^2)/2 : sqrt(2*(2*rad)^2)/2*(n-1));
xyBox = [reshape(X,1,numel(X)) ; reshape(Y,1,numel(Y))];
Sh = @(m) [1 m; 0 1]; % horizontal shear - slope is qual to 1/m
slope = sqrt(3);
shearedCoordinates = Sh(1/slope) * xyBox;
figure; plot(xyBox(1,:),xyBox(2,:),'k.');
for i= 1:(numel(shearedCoordinates)/2)
hold on;
circle(shearedCoordinates(1,i),shearedCoordinates(2,i),rad)
plot(shearedCoordinates(1,i),shearedCoordinates(2,i),'bx')
hold off;
end
axis equal
不要真正理解Sh背后的数学,但可以看出它在扭曲(剪切)点上做得非常好。我计算出平方根3的斜率应该给出正确的位置,但是看起来我的y距离有问题......
圆圈功能
function circle(x,y,r)
angle=0:0.01:2*pi;
xp=r*cos(angle);
yp=r*sin(angle);
plot(x+xp,y+yp,'r');
end
*解决方案*
%% Trying out the shear function
rad=2; n=3;
[X,Y] = meshgrid(0 : rad*2 : rad*(n-1)*2 , ...
0 : sqrt(3)*rad : sqrt(3)*rad*(n-1));
xyBox = [reshape(X,1,numel(X)) ; reshape(Y,1,numel(Y))];
Sh = @(m) [1 m; 0 1]; % horizontal shear - slope is qual to 1/m
slope = sqrt(3);
shearedCoordinates = Sh(1/slope) * xyBox;
figure; plot(xyBox(1,:),xyBox(2,:),'k.');
for i= 1:(numel(shearedCoordinates)/2)
hold on;
circle(shearedCoordinates(1,i),shearedCoordinates(2,i),rad)
plot(shearedCoordinates(1,i),shearedCoordinates(2,i),'bx')
hold off;
end
axis equal
(如果发现它有用,别忘了投票)
答案 0 :(得分:0)
我还没有机会在Matlab中查看代码,但只要查看你发布的数字我就同意剪切工作正常。然而,即使您使用预剪切中心,这些圆也会重叠。这是你的意思吗?
答案 1 :(得分:0)
通过我的估算你的错误(或者也许只是我能看到的第一个)是在圆心的直线间距。你有表达式
0 : sqrt(2*(2*rad)^2)/2 : sqrt(2*(2*rad)^2)/2*(n-1)
用于布置圆心。我认为垂直步幅(或步长值)应该是rad*sqrt(3)/2
,它会给你:
0 : rad*sqrt(3)/2 : sqrt(2*(2*rad)^2)/2*(n-1)
除非我犯了一个错误(完全可能),单位等边三角形的高度为sqrt(3)/2
,这应该是你的y间距。