Açıklama: Köşe noktaları verilen bir şeklin dışbükey çokgeninin (convex hull) içinde istenilen sayıda rastgele nokta oluşturma ve bunları çizdirme.

Şekil bilgisine sahip olduğumuz ve içinde örnek noktalar oluşturmak istediğimiz bir alanda kullanılabilir. Örneğin, genelde renk veya deri sezimi yaparken önce resimlerde rengi/cildi kapsayan köşegenler bulunur, daha sonra içindeki tüm noktalar işleme tabi tutulur. Bu zaman açısından çok masraflı olur. Onun yerine bu kod ile rastgele noktalar bulunup onlarla eğitim yapılabilir. Tabii rand(1,1) kısmının şeklin içinde olması ihtimalini arttırmak için o değeri şeklin en alçak ve en yüksek koordinat değerlerinin arasına taşımak gerekli.

English description: Finding the convex hull of the given vertices and creating sample points inside this convex hull.

Kaynak kod

% createRandomPointsInsideAPolygon.m: Köşe noktaları verilen bir şeklin
% dışbükey çokgeninin (convex hull) içinde istenilen sayıda rastgele nokta
% oluşturma ve bunları çizdirme
 
 
clear, clc
 
% Şeklin köşelerinin x ve y koordinatlarini belirleyelim.
xVertices = rand(20,1);
yVertices = rand(20,1);
 
% Kaç tane rastgele nokta istiyoruz
numPoints = 1000;
 
% Verdiğimiz noktaların dışbükey çokgenini bulalım
k = convhull(xVertices,yVertices);
xPolygonVertices = xVertices(k);
yPolygonVertices = yVertices(k);
 
% 'numPoints' kadar noktanın x ve y koordinatlarını bulacağız
x = zeros(numPoints,1);
y = zeros(numPoints,1);
for i = 1:numPoints
    isIn = 0;
    while ~isIn % Çokgenin içine düşene kadar dene
        x(i) = rand(1,1);
        y(i) = rand(1,1);
        isIn = inpolygon(x(i),y(i),xPolygonVertices,yPolygonVertices);
        % Kullanım: inpolygon(noktanın x koordinatı, y koordinatı,0 ...
        %              çokgenin köşelerinin x koordinatları, y koordinatları)
    end
end
 
plot(xVertices, yVertices, 'o', 'Linewidth',2)
hold on
plot(xPolygonVertices,yPolygonVertices,x,y,'r+')
hold off
legend('Şekil noktaları','Dışbükey çokgen', 'Rastgele bulunan noktalar')
shg % Çizim penceresini göster