如何在MATLAB中找到球体与圆柱相交的内部点?

时间:2017-11-15 23:54:00

标签: matlab cartesian-coordinates cylindrical

我正在尝试识别球体和圆柱体内部的球体点,我在圆柱体侧面生成随机点,如下所示

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);

结果如下

我需要找到与圆柱体相交的圆柱点和与圆球相交的圆柱点。

是否有任何通用的方法来识别不同体积交叉点内的点?

任何人都可以帮助我吗?提前致谢, 马努

1 个答案:

答案 0 :(得分: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始终满足,因此您可以在此特定情况下将其删除。