怎么画最大内接圆柱
How to draw Maximum inscribed cylinder
假设我们知道圆柱表面的 "N" 个点,那么如何找出最大内切圆柱,即圆柱的半径和中心线
首先让我们创建圆柱体的 n
点。在此示例中使用带有 h=4
和 r=1
的圆柱体。圆柱体的体积为 ,在本例中为
n = 1000;
h = 4;
r = 1;
r1 = r*rand(n/4,1);
theta1 = 2*pi*rand(n/4,1);
h1 = zeros(n/4,1);
r2 = r*rand(n/4,1);
theta2 = 2*pi*rand(n/4,1);
h2 = h.*ones(n/4,1);
r3 = r.*ones(n/2,1);
theta3 = 2*pi*rand(n/2,1);
h3 = h.*rand(n/2,1);
x = [ r1.*sin(theta1), r1.*cos(theta1), h1 ; ... % bottom area
r2.*sin(theta2), r2.*cos(theta2), h2 ; ... % top area
r3.*sin(theta3), r3.*cos(theta3), h3 ]; % side area
我们可以通过找到每个维度的最小值和最大值来估计r
和h
x1 = max(x(:,1)) - min(x(:,1));
x2 = max(x(:,2)) - min(x(:,2));
x3 = max(x(:,3)) - min(x(:,3));
要获得半径,我们必须找到最匹配的两个维度。我们可以通过取这些的平均值来估计半径。当我们从最大值中减去最小值时,我们得到了直径,所以我们需要除以 2 得到半径。
d = [abs(x2-x1), abs(x3-x2), abs(x3-x1)];
c = find(d==min(d));
if c==1
rhat = mean([x1,x2]) ./ 2;
hhat = x3;
elseif c==2
rhat = mean([x2,x3]) ./ 2;
hhat = x1;
else
rhat = mean([x1,x3]) ./ 2;
hhat = x2;
end
现在我们可以轻松计算出预估体积
Vhat = 2 * pi * rhat^2 * hhat
Vhat =
25.1318
与计算结果几乎一致。当然,这仅在圆柱体在坐标系的轴上定向时才有效,但根据评论,情况确实如此。
假设我们知道圆柱表面的 "N" 个点,那么如何找出最大内切圆柱,即圆柱的半径和中心线
首先让我们创建圆柱体的 n
点。在此示例中使用带有 h=4
和 r=1
的圆柱体。圆柱体的体积为
n = 1000;
h = 4;
r = 1;
r1 = r*rand(n/4,1);
theta1 = 2*pi*rand(n/4,1);
h1 = zeros(n/4,1);
r2 = r*rand(n/4,1);
theta2 = 2*pi*rand(n/4,1);
h2 = h.*ones(n/4,1);
r3 = r.*ones(n/2,1);
theta3 = 2*pi*rand(n/2,1);
h3 = h.*rand(n/2,1);
x = [ r1.*sin(theta1), r1.*cos(theta1), h1 ; ... % bottom area
r2.*sin(theta2), r2.*cos(theta2), h2 ; ... % top area
r3.*sin(theta3), r3.*cos(theta3), h3 ]; % side area
我们可以通过找到每个维度的最小值和最大值来估计r
和h
x1 = max(x(:,1)) - min(x(:,1));
x2 = max(x(:,2)) - min(x(:,2));
x3 = max(x(:,3)) - min(x(:,3));
要获得半径,我们必须找到最匹配的两个维度。我们可以通过取这些的平均值来估计半径。当我们从最大值中减去最小值时,我们得到了直径,所以我们需要除以 2 得到半径。
d = [abs(x2-x1), abs(x3-x2), abs(x3-x1)];
c = find(d==min(d));
if c==1
rhat = mean([x1,x2]) ./ 2;
hhat = x3;
elseif c==2
rhat = mean([x2,x3]) ./ 2;
hhat = x1;
else
rhat = mean([x1,x3]) ./ 2;
hhat = x2;
end
现在我们可以轻松计算出预估体积
Vhat = 2 * pi * rhat^2 * hhat
Vhat =
25.1318
与计算结果几乎一致。当然,这仅在圆柱体在坐标系的轴上定向时才有效,但根据评论,情况确实如此。