Как генерировать случайные точки внутри цилиндра - PullRequest
0 голосов
/ 24 июня 2019

как генерировать равномерно распределенные точки внутри цилиндров, задавая эти параметры, центральная точка обозначается как 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;

Ответы [ 2 ]

1 голос
/ 24 июня 2019

Похоже, что вы делаете точную работу по отбору образцов цилиндра, ориентированного по оси, с центром одного конца в начале координат.

Но ваш целевой цилиндр не выровнен по оси и не прибит к исходной точке.

Вам необходимо преобразовать создаваемые точки в соответствующую область в пространстве.

Построить единичный вектор в направлении от C1 до C2 и две взаимно перпендикулярные единичные нормали к нему. 1 Эти три вектора (которые я назову b1, b2 и b3) образуют основу, а преобразованная точка -

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

где я назвал единичный вектор вдоль оси b3.


1 Какую пару из них вы построите, совершенно произвольно, и наивным способом было бы взять перекрестное произведение b3 с любым вектором, не (анти) параллельным ему, чтобы получить первое нормальное направление (b1) и затем b3 cross b1, чтобы получить второе нормальное направление. Единственная складка - это выбор исходного вектора, не параллельного b3.

0 голосов
/ 24 июня 2019

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

...