Рассчитать объем полого наклонного цилиндра внутри куба, без сетки - PullRequest
0 голосов
/ 07 мая 2018

У меня есть полый цилиндр с внутренним радиусом r1 и внешним радиусом r2. Этот цилиндр наклоняется от оси Z к оси X, затем вращается вокруг оси Z и затем перемещается вдоль X и вдоль Y. У меня также есть куб между диапазоном значений X и Y. Затем я хочу вычислить, насколько велик объем полого цилиндра внутри куба.

%set variables
r1 = 0.9; r2 = 1.0;
z1 =-1.0; z2 = 1.0;
beta = pi/4; gamma = pi/8;

%create inner surface 
[X,Y,Z] = cylinder(r1, 100);
%outer surface
[Xx,Yy,Zz] = cylinder(r2, 100);

%fix coordinates
X = [X,Xx]; Y = [Y,Yy]; Z = [Z,Zz];
Z(1,:) = z1; Z(2,:) = z2;

%elongate in first rotation direction
X = X/cos(beta);
%shift top and bottom accordingly
X(1,:) = X(1,:) + z2/tan(beta);
X(2,:) = X(2,:) + z1/tan(beta);

%also perform another rotation in XY plane
Xnu = X*cos(gamma) + -Y*sin(gamma);
Y = X*sin(gamma) + Y*cos(gamma);
X = Xnu;
%translation not included for this example

surf(X,Y,Z); axis equal

%try to make a cube from its nodes/corners
ix=-1;iy=-1;dx=0.5;dy=dx;
[X,Y,Z] = ndgrid( ix*dx+[-dx/2, dx/2] , iy*dy+[-dy/2, dy/2] , [z1, z2] );
X = reshape(X, 2, []);Y = reshape(Y, 2, []);Z = reshape(Z, 2, []);
%failed
surf(X,Y,Z); axis equal

Полый цилиндр кажется нормальным. Просто нет «кепки» в верхней части края.

hollow tube

Куб выглядит совсем не так, как куб, но по крайней мере объем между углами должен быть правильным.

У меня вопрос, как мне получить пересечение этих двух форм и затем вычислить объем?

Мне действительно нужно перебрать многие из этих трубок и кубов, но как только я исправлю этот единственный случай, это будет легко. Каждый куб представляет собой измеренный пиксель из эксперимента, а каждый полый цилиндр - физический объект, который был в эксперименте. При моделировании этого на самой сетке я очень быстро сталкиваюсь с проблемами памяти.

...