Dışbükey çokgen (convex hull) bulma ve çokgenin içinde noktalar oluşturma
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


2 yorum
ismail abi verilen bir şekli çevreleyen polygon’u noktalar oluşturarak nasıl bulabiliriz ?
Bu konuda taze bir bilgim yok. Fakat hullfit örneğinden bakılabilir.