2015-02-17 6 views
1

Я пытаюсь сделать гексагональную решетку 19x19, и каждая решетка содержит цилиндр разных цветов, обозначаемый как «hexagon.dat».Как сохранить и получить доступ к элементам матрицы в gnuplot?

2-> Cylinder окрашен красным

1-> Cylinder окрашенного зеленого

hexagon.dat

2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 
2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 2 
2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 2 
2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 2 
2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 2 
2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 2 
2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 
2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 
2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 
2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 
2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 
2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 
2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 
2 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 
2 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 
2 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 
2 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 
2 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 

Но в настоящее время, так как я не знаю, как хранить и доступ матричные данные hexagon.dat, Есть только зеленые цилиндры Это мой сценарий для gnuplot

сценарий

set term X11 persist title "test" size 1000, 1000 

P = 0.78 
pin_id = 0 

do for [pin_ix=-9:9]{ 
do for [pin_iy=-9:9]{ 

cx = pin_ix*P + pin_iy*(-P/2) 
cy = pin_iy*sqrt(3)/2*P 
pin_id = pin_id + 1 
set object pin_id poly from cx-P/2, cy+P/2/sqrt(3) \ 
         to cx, cy+P/sqrt(3) \ 
         to cx+P/2, cy+P/2/sqrt(3) \ 
         to cx+P/2, cy-P/2/sqrt(3) \ 
         to cx, cy-P/sqrt(3) \ 
         to cx-P/2, cy-P/2/sqrt(3) \ 
         to cx-P/2, cy+P/2/sqrt(3) \ 
fs solid fc rgb "red" 


pin_id = pin_id + 1 
set object pin_id circle at cx, cy size 0.3275 \ 
fs solid fc rgb "green" 
} 
} 

set size ratio 1.0 
set xr [-11:11] 
set yr [-11:11] 


plot 1/0 

Жду ваших помощи.

ответ

0

Вы можете использовать plot ... with circles для изготовления цилиндров. После этого вы можете выбрать цвет с lc variable:

P = 0.78 
pin_id = 0 

do for [pin_ix=-9:9]{ 
do for [pin_iy=-9:9]{ 

cx = pin_ix*P + pin_iy*(-P/2) 
cy = pin_iy*sqrt(3)/2*P 
pin_id = pin_id + 1 
set object pin_id poly from cx-P/2, cy+P/2/sqrt(3) \ 
         to cx, cy+P/sqrt(3) \ 
         to cx+P/2, cy+P/2/sqrt(3) \ 
         to cx+P/2, cy-P/2/sqrt(3) \ 
         to cx, cy-P/sqrt(3) \ 
         to cx-P/2, cy-P/2/sqrt(3) \ 
         to cx-P/2, cy+P/2/sqrt(3) \ 
fs solid fc rgb "red" 


pin_id = pin_id + 1 
} 
} 

set size ratio 1.0 
set xr [-11:11] 
set yr [-11:11] 

set style fill solid noborder 
set linetype 1 lc rgb 'red' 
set linetype 2 lc rgb 'green' 
plot 'hexagon.dat' matrix using (($1-9)*P + ($2-9)*(-P/2)):(($2-9)*sqrt(3)/2 * P):(0.3275):3 with circles lc variable 

enter image description here

С версии 5.0 можно использовать stats извлечь размерность матрицы:

stats 'hexagon.dat' matrix 
N = int(STATS_size_x) 
do for [pin_ix=-(N/2):((N-1)/2)] { 
... 
0

NewHexData

2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 
2 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 
2 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 
2 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 
2 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 
2 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 
2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 
2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 
2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 
2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 
2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 
2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 
2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 
2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 2 
2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 2 
2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 2 
2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 2 
2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 2 
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 

сценария

set term X11 persist title "test" size 1000, 1000 
P = 0.78 
pin_id = 0 

do for [pin_ix=-9:9]{ 
do for [pin_iy=-9:9]{ 

cx = pin_ix*P + pin_iy*(-P/2) 
cy = pin_iy*sqrt(3)/2*P 
pin_id = pin_id + 1 
set object pin_id poly from cx-P/2, cy+P/2/sqrt(3) \ 
         to cx, cy+P/sqrt(3) \ 
         to cx+P/2, cy+P/2/sqrt(3) \ 
         to cx+P/2, cy-P/2/sqrt(3) \ 
         to cx, cy-P/sqrt(3) \ 
         to cx-P/2, cy-P/2/sqrt(3) \ 
         to cx-P/2, cy+P/2/sqrt(3) \ 
fs solid fc rgb "red" 


pin_id = pin_id + 1 
} 
} 

set size ratio 1.0 
set xr [-11:11] 
set yr [-11:11] 

set style fill solid noborder 
set linetype 1 lc rgb 'green' 
set linetype 2 lc rgb 'red' 
plot 'NewHexData' matrix using (($1-9)*P + ($2-9)*(-P/2)):(($2-9)*sqrt(3)/2 * P):(0.3275):3 with circles lc variable 

Поскольку у меня недостаточно репутации, я не могу загрузить полученное изображение. Так или иначе, я получил эту цифру.

http://imgur.com/vEpjdll

Я действительно спасибо Кристофу!

Смежные вопросы