Uniformly distributed points generation inside quadrilateral with given points

16 ビュー (過去 30 日間)
NKM
NKM 2020 年 5 月 11 日
編集済み: Rena Berman 2020 年 5 月 14 日
I have a quadrilaterla with vertices (1,0),(1,2),(2,1) and (3,4). How can I generate uniformly distributed points inside it along with plot?
  2 件のコメント
John D'Errico
John D'Errico 2020 年 5 月 11 日
Is this a one time problem with this specific quad? Or tomorrow will you have some different quadrilateral? Or will you have a more general polygon? The reason I ask is the solution would depend on what you really need to do next.
The simple solution would be to triangulate the quadrilateral. Then generate points randomly inside the triangles, based on their area. Not difficult.
Rena Berman
Rena Berman 2020 年 5 月 14 日
(Answers Dev) Restored edit

サインインしてコメントする。

採用された回答

Ameer Hamza
Ameer Hamza 2020 年 5 月 11 日
編集済み: Ameer Hamza 2020 年 5 月 11 日
One of the way can be to find a rectangle enclosing all the vertices, create uniformly distributed random points inside the rectangle and then filter out the points using inpolygon()
x = [2 2 3 4];
y = [1 3 2 5];
% sort the vertices to create a convex polygon
X = [x.' y.'];
idx = convhull(X);
X = X(idx, :);
% find enclosing rectangle
ll_corner = [min(x) min(y)]; % lower_left corner
tr_corner = [max(x) max(y)]; % top_right corner
points = rescale(rand(10000, 2), ll_corner, tr_corner); % scale the random number
% to be inside the rectangle
idx = inpolygon(points(:,1), points(:,2), X(:,1), X(:,2));
points = points(idx, :);
figure();
ax = axes();
plot(X(:,1), X(:,2), 'LineWidth', 1)
hold on
plot(points(:,1), points(:,2), '.')

その他の回答 (1 件)

Matt J
Matt J 2020 年 5 月 11 日
I haven't used it, but this FEX tool claims to be able to do it:

カテゴリ

Help Center および File ExchangeSurface and Mesh Plots についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by