2011-08-22 65 views
7

Tôi đã đọc bài viết này: generating/creating hexagon grid in C. Nhưng trông giống như cả tác giả và người trả lời đã từ bỏ nó.Làm cách nào để vẽ/quản lý lưới hình lục giác?

√(hexagonSide - hexagonWidth * hexagonWidth): HexagonSide và hexagonWidth là gì? Không phải là nó sẽ < 0 (vì vậy căn bậc hai không thể được tính toán).

Và, tôi có thể đặt hình lục giác vào hình chữ nhật không? Tôi cần phải tạo ra một mạng lưới như thế này:

điều

Source:Wikipedia

Một hơn, làm thế nào tôi có thể sắp xếp mảng của tôi để lưu trữ dữ liệu, cũng như nhận được tế bào bên cạnh một tế bào?

Tôi chưa bao giờ được dạy về hình lục giác, vì vậy tôi không biết gì về nó, nhưng tôi có thể dễ dàng học điều mới, vì vậy nếu bạn có thể giải thích hoặc cho tôi biết, tôi có thể tự làm.

+0

Việc làm này sẽ đòi hỏi gì hơn là một hình học nhỏ/lượng giác. Các góc ở đỉnh của hình lục giác đều là 360/3 độ hoặc 120 độ. Với thông tin này và sử dụng các phương thức thư viện Java Math (mặc dù cẩn thận khi thay đổi độ thành radian), bạn sẽ có thể rút ra điều này dễ dàng mà không cần sử dụng mã khác. Làm việc với sơ đồ trên giấy trước khi cam kết mã cho IDE. Tôi tìm thấy nó tốt nhất để nghĩ về một hình lục giác như sáu hình tam giác đều, nhưng làm bất cứ điều gì làm việc tốt nhất cho bạn. Sau đó, trở lại với mã của bạn nếu bạn đang mắc kẹt, và chúng tôi sẽ rất vui mừng được giúp đỡ! –

+0

Tôi không chắc chắn anh chàng trong liên kết đang nói về cái gì, nhưng lượng giác cơ bản sẽ cho bạn biết rằng cạnh của hình lục giác, s, có liên quan đến chiều cao của nó bằng s * căn bậc hai của 3 hoặc trong Java 's * Math.sqrt (3); ' –

+1

Xem bài đăng này về cách tìm hàng xóm http://stackoverflow.com/questions/6661169/finding-adjacent-neighbors-on-a-hexagonal-grid – Buhb

Trả lời

4

Đây là cách tôi vẽ hình lục giác:

public Hexagon(float pX, float pY, float pSize) { 
     super(pX, pY, pSize, pSize); 
//  setColor(1, 0, 0); 
     setAlpha(0); 

     float x1, x2, y1, y2; 
     float lineWidth = 3; 

     x1 = 0; y1 = pSize/2; 
     x2 = pSize/4; y2 = (pSize * ((2 - (float)Math.sqrt(3))/4)); // Done 
     Line line = new Line(x1, y1, x2, y2); 
     line.setLineWidth(lineWidth); 
     attachChild(line); 

     x1 = x2; y1 = y2; 
     x2 = pSize * .75f; // Done 
     line = new Line(x1, y1, x2, y2); 
     line.setLineWidth(lineWidth); 
     attachChild(line); 

     x1 = x2; y1 = y2; 
     x2 = pSize; y2 = pSize/2; // Done 
     line = new Line(x1, y1, x2, y2); 
     line.setLineWidth(lineWidth); 
     attachChild(line); 

     x1 = x2; y1 = y2; 
     x2 = pSize * .75f; y2 = pSize - (pSize * ((2 - (float)Math.sqrt(3))/4)); // Done 
     line = new Line(x1, y1, x2, y2); 
     line.setLineWidth(lineWidth); 
     attachChild(line); 

     x1 = x2; y1 = y2; 
     x2 = pSize/4; // Done 
     line = new Line(x1, y1, x2, y2); 
     line.setLineWidth(lineWidth); 
     attachChild(line); 

     x1 = x2; y1 = y2; 
     x2 = 0; y2 = pSize/2; // Done 
     line = new Line(x1, y1, x2, y2); 
     line.setLineWidth(lineWidth); 
     attachChild(line); 

     touchableArea = new Rectangle(pSize/4, pSize/4, pSize * .75f, pSize * .75f); 
     touchableArea.setAlpha(0); 
     attachChild(touchableArea); 
    } 
+0

những gì bạn mở rộng? ...không phải là một TextView? –

+0

Đó là một lớp hình chữ nhật của 'AndEngine'. Bạn có thể đạt được kết quả tương tự với chế độ xem Canvas của Android bằng cách vẽ các đường như đã đề cập. –

+0

Vì vậy, điều này vẽ một hình lục giác? Vui lòng xem [câu hỏi của tôi] (http://stackoverflow.com/questions/30241050/how-to-draw-a-hexagon-map-in-libgdx-using-the-polygon-class?noredirect=1). Có lẽ bạn có thể giúp tôi giải quyết vấn đề của mình. –

9

Một cách để đại diện cho dữ liệu sẽ được nghĩ về nó như thế này:

a-b-c-d-e- 
-f-g-h-i-j 
k-l-m-n-o- 
-p-q-r-s-t 
u-v-w-x-y- 

Các dấu gạch ngang là địa điểm null - chúng tồn tại trong mảng, nhưng không đại diện cho bất kỳ hình lục giác nào. Ở đây, hình lục giác m được kết nối với hình lục giác c, g, h, q, r, w. Khi bạn là ok với đại diện đó, bạn có thể làm cho nó nhỏ gọn hơn bằng cách loại bỏ các địa điểm null:

abcde 
fghij 
klmno 
pqrst 
uvwxy 

lục giác m vẫn còn kết nối với hình lục giác c, g, h, q, r, w, nó chỉ là một chút khó thấy hơn.

Cập nhật đọc này: http://www-cs-students.stanford.edu/~amitp/game-programming/grids/

Các vấn đề liên quan