如何在给出这些参数的圆柱体内生成均匀分布的点,中心点表示为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;
答案 0 :(得分:1)
您似乎做得很好,以一端为中心的轴对齐圆柱体为采样。
但是目标圆柱体既未对齐轴也未钉在原点上。
您需要将生成的点转换为空间中的适当区域。
在从C1
到C2
的方向上构造一个单位向量,并构造两个相互垂直的单位法线。 1 这三个向量(我将其称为{{ 1}},b1
和b2
)构成基础,并且转换后的点是
b3
我沿轴p = C1 + (b1 * x + b2 * y + b3 * z)
称单位矢量。
1 构造哪对是任意的,天真的方法是取b3
与任何不(反)平行的向量的叉积。得到第一个法线方向(b3
),然后b1
越过b3
得到第二个法线方向。唯一的麻烦是选择不平行于b1
的初始向量。
答案 1 :(得分:0)
在3D对象(例如球体或圆柱体)中生成均匀分布的点的最简单方法是在立方体内生成均匀分布的点,并丢弃位于所需形状之外的任何点。