繪製蜂窩狀六角網格

2021-09-05 16:17:00 字數 1459 閱讀 7057

很多研究已經證明,將網格點排列成六角網格的形式是一種最佳排列,在目前使用的四角網格顯示器中,很容易出現鋸齒,而六角因為在數學上和物理上的特性,理論上更適合作為座標系統。

比如一些更加講究策略的遊戲多就使用六角網格座標系統,如英雄無敵3,輻射,大航海時代,大菠蘿1似乎也是。

這裡要做的就是使用 gdi+ 繪製乙個六角網格,網上關於這方面的資料很少。

例項圖 :

計算採用六角網格的類直角邏輯座標

///

///生成指定大小的六角網格

/// ///

六角格的大小(水平直徑和垂直直徑)

///六角網格的大小

///六角網格的路徑

public

graphicspath buildhexes(size gridsize, size mapsize)

//儲存六角格的六個角的位置

lines 

=new

list

<

pointf

>(6

);//北

pointf start 

=new

pointf(cx, cy 

- hrad);

lines.add(start);

//東北

lines.add(

newpointf(cx 

+wline, cy 

-hrad /2

));//東南

lines.add(

newpointf(cx 

+wline, cy 

+hrad /2

));//南

lines.add(

newpointf(cx, cy 

+ hrad));

//西南

lines.add(

newpointf(cx 

-wline, cy 

+hrad /2

));//西北

lines.add(

newpointf(cx 

-wline, cy 

-hrad /2

));//回到起點:北

lines.add(start);

result.addlines(lines.toarray());

result.closefigure();}}

return

result;}

然後隨便建乙個 form,覆寫其 onpaint 方法,如下:

protected

override

void

onpaint(painteventargs e)

這樣你就能見到乙個蜂窩狀的六角網格了。

參考文獻 :

六角網格上的圖象演算法及幾何量定義

ps:

Matlab繪製六邊形蜂窩網路並編號

核心說明 clear clc rc 4 dy 2 rc dx rc sqrt 3 a pi 3 1 7 rol 50 cow 50 colorsize 216 num 0 for yk 0 dy 100,0 dy 100 yfun inline sqrt 3 x 3 num2str yk for x...

FPS之遊戲繪製(六)

1.gdi外部繪製 這種繪製方式最為常見,遊戲也不容易檢測出,建立gdi裝置在指定的視窗控制代碼上繪製,占用cpu很小,但是繪製到遊戲裡面會閃爍,原因是遊戲fps重新整理頻率與gdi繪製頻率不同導致畫出的方框會閃爍。2.gdi雙緩衝 這種繪製方式有一部分和外部繪製相同,但是又不同,這種繪製方式不會使...

canvas學習總結六 繪製矩形

在第三章中 canvas學習總結三 繪製路徑 線段 我們提高canvas繪圖環境中有些屬於立即繪製圖形方法,有些繪圖方法是基於路徑的。立即繪製圖形方法僅有兩個strokerect fillrect 兩個方法都是用來繪製矩形的。canvas的api提供了如下三個方法,分別用於矩形的清除,描邊與填充 我...