0

如何在给定这些参数的圆柱体内生成均匀分布的点,中心点表示为 C,C1 是底部,C2 是顶部,R 是半径。C1=[5.697592e-01, 3.159923e-01, 1.037074e+00];C2=[4.211637e-01, 5.624242e-01, 7.937364e-02];R=5.000000e-01;

%the cordinate 
        C1=[5.697592e-01, 3.159923e-01, 1.037074e+00];
        C2=[4.211637e-01, 5.624242e-01, 7.937364e-02];
        N=600;
        CylinderX = rand(1,N);
        CylinderY = rand(1,N);
        CylinderZ = rand(1,N);
        CylinderHeight = norm(C1 - C2);

        for i = 1 : N
            A = [0 0 0 1];
            x = rand;
            y = rand;
            Px = sqrt(x)*R*cos(2*pi*y);
            Py = sqrt(x)*R*sin(2*pi*y);
            Pz = CylinderHeight * rand;
            %I need the coordinate transformation  logic here

            CylinderX(i) = A(1);
            CylinderY(i) = A(2);
            CylinderZ(i) = A(3);
        end
        plot3(CylinderX , CylinderY , CylinderZ ,'G.');hold on;
4

2 回答 2

1

看起来您在采样一个轴对齐的圆柱体方面做得很好,其中一端的中心位于原点。

但是您的目标圆柱体既不是轴对齐的,也不是钉在原点上的。

您需要将生成的点转换为空间中的适当区域。

C1在从到的方向上构造一个单位向量C2,以及两个相互垂直的单位法线。1这三个向量(我将称之为b1b2b3)构成一个基,变换后的点为

p = C1 + (b1 * x + b2 * y + b3 * z)

我在其中调用了沿轴的单位向量b3


1你构造的这对是相当随意的,天真的方法是对b3任何不(反)平行的向量进行叉积以获得第一个法线方向(b1),然后b3交叉b1以获得第二个法线方向。唯一的问题是选择一个不平行于 的初始向量b3

于 2019-06-24T18:07:41.267 回答
0

在 3D 对象(如球体或圆柱体)内生成均匀分布的点的最简单方法是在立方体内生成均匀分布的点,并丢弃位于所需形状之外的任何点。

于 2019-06-24T17:58:29.583 回答