1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 | % 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
|