假设我们知道圆柱面上的“N”个数字点,那么如何找出最大内接圆柱体,即圆柱体的半径和中心线
答案 0 :(得分:3)
首先让我们创建圆柱的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
与计算结果几乎相同。当然,这只有在圆柱体朝向坐标系的轴线时才有效,但根据评论情况就是这样。