Matlab,生成并绘制分布在三角形内的点云

Jos*_*ino 6 random matlab uniform

我正在尝试生成一个二维点(均匀)在三角形内分布的云.到目前为止,我已经实现了以下目标:

Matlab图

我使用的代码是这样的:

N = 1000;
X = -10:0.1:10;
for i=1:N
    j = ceil(rand() * length(X));
    x_i = X(j);
    y_i = (10 - abs(x_i)) * rand;

    E(:, i) = [x_i y_i];
end
Run Code Online (Sandbox Code Playgroud)

然而,这些点不是均匀分布的,如在左右角中清楚地看到的那样.我该如何改善这一结果?我一直在努力寻找不同的形状,没有运气.

Eit*_*n T 9

你应该首先问自己什么会使三角形内的点均匀分布.

总而言之,给定三角形的所有三个顶点,您需要转换两个均匀分布的随机值,如下所示:

N = 1000;                    % # Number of points
V = [-10, 0; 0, 10; 10, 0];  % # Triangle vertices, pairs of (x, y)
t = sqrt(rand(N, 1));
s = rand(N, 1);
P = (1 - t) * V(1, :) + bsxfun(@times, ((1 - s) * V(2, :) + s * V(3, :)), t);
Run Code Online (Sandbox Code Playgroud)

这将生成一组均匀分布在指定三角形内的点:

scatter(P(:, 1), P(:, 2), '.')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

请注意,此解决方案不涉及对随机数的重复条件操作,因此它不可能陷入无限循环.

如需进一步阅读,请查看本文.