很多研究已經證明,將網格點排列成六角網格的形式是一種最佳排列,在目前使用的四角網格顯示器中,很容易出現鋸齒,而六角因為在數學上和物理上的特性,理論上更適合作為座標系統。
比如一些更加講究策略的遊戲多就使用六角網格座標系統,如英雄無敵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提供了如下三個方法,分別用於矩形的清除,描邊與填充 我...