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