Как найти точки внутри, где сфера пересекается с цилиндром в MATLAB?

Я пытаюсь определить точки сферы, которые находятся внутри объединения сферы и цилиндра, я создал случайные точки внутри цилиндра, как показано ниже.

pts = 3000;
r= 3*((rand(pts,1)).^(1/3));
theta = 2*pi*rand(pts,1);
x= r.*cos(theta);
y= r.*sin(theta);
z=50*rand(size(x));

и сгенерированные случайные точки внутри сферы, как показано ниже

radius=10;
rvals = (2)*rand(pts,1)-(1);
elevation = asin(rvals);
azimuth = 2*pi*rand(pts,1);
radii =(rand(pts,1).^(1/3))*radius;
[point_x,point_y,point_z] = sph2cart(azimuth,elevation,radii);

Результат будет следующим:

Мне нужно найти точки сферы, которые пересекаются с точками цилиндра и цилиндра, которые пересекаются со сферой.

Есть ли какой-либо общий метод определения точек внутри пересечения разных объемов??

Может кто-нибудь мне помочь? Заранее спасибо, Ману


person manoos    schedule 15.11.2017    source источник


Ответы (1)


По-видимому, у вас есть сфера с центром в (0, 0, 0) и радиусом 10. Чтобы проверить, находятся ли точки цилиндра в сфере, вы можете использовать:

cylinder_in_sphere = (x.^2 + y.^2 + z.^2) < 100

Ваш цилиндр имеет радиус 3 и высоту 50, поэтому, чтобы проверить, находятся ли точки сферы в цилиндре, вы можете использовать:

sphere_in_cylinder = ((points_x.^2 + points_y.^2) < 9) & (points_z >= 0) & (points_z < 50)

Обратите внимание, что в этом конкретном случае points_z < 50 всегда выполняется, поэтому вы можете удалить его в этом конкретном случае.

person EdG    schedule 16.11.2017
comment
Спасибо вам большое за ваш ответ. Он работает правильно - person manoos; 16.11.2017