Altıgen ızgara oluşturma
Açıklama: Altıgen ızgara oluşturma.
Girdiler: xStepSize -> Izgaranın x yönündeki artış miktarı (y buna bağımlıdır), axesBounds -> [minX maxX minY maxY] olarak sınırlar
Çıktılar : X -> Izgaranın x koordinatları. Y -> Izgaranın y koordinatları
Örnek:
minX = 100; minY = 250; maxX = 640; maxY = 480; [X,Y] = makeHexGrid(20, [minX maxX minY maxY]); plot(X,Y,'r.') axis([minX-50 maxX+50 minY-50 maxY+50]) axis equal
Not: MATLAB’da meshgrid komutu ile kare veya dikdörtgen ızgaralar oluşturulabilir.
English description: Creating hexagonal grid within the given bounds and step size on x axis.
Kaynak kod
% makeHexGrid.m: Altıgen ızgara oluşturma
%
% Girdiler: xStepSize -> Izgaranın x yönündeki artış miktarı (y buna bağımlıdır)
% axesBounds -> [minX maxX minY maxY] olarak sınırlar
%
% Çıktılar : X -> Izgaranın x koordinatları
% Y -> Izgaranın y koordinatları
%
% Örnek:
% minX = 100; minY = 250; maxX = 640; maxY = 480;
% [X,Y] = makeHexGrid(20, [minX maxX minY maxY]);
% plot(X,Y,'r.')
% axis([minX-50 maxX+50 minY-50 maxY+50])
% axis equal
%
function [X,Y] = makeHexGrid(xStepSize, axesBounds)
% Eger sadece x artış miktarı verilirse çizim sınırlarını varsayılanlara
% atayalım
if nargin < 2
axesBounds = [0 0 10 10];
end
minX = axesBounds(1);
maxX = axesBounds(2);
minY = axesBounds(3);
maxY = axesBounds(4);
X = []; Y = []; % çıktılar
% Altıgen ızgara yapacağımız için y eksenindeki artış miktarı x' e bağımlı
% olacak ve cos(pi/6) katı olacak
yStepSize = xStepSize * cos(pi/6);
row = 1;
for yVal = minY:yStepSize:maxY
isOddRow = mod(row,2);
if isOddRow
xStart = minX;
else
% Çift satırlarda x değerleri artış miktarının sin(pi/6),
% yani 0.5 katı içerisinden başlar
xStart = minX + xStepSize / 2;
end
xList = xStart:xStepSize:maxX;
yList = yVal * ones(size(xList)); % Her x değerine karşılık bir y değeri
X = [X; xList(:)];
Y = [Y; yList(:)];
row = row + 1;
end

