Altıgen alanında spiral hücreleri oluşturmak için algoritma

3 Cevap php

Altıgen alanında spiral hücreleri oluşturmak için bir algoritma bulmak için yardımcı olur.

Görüntü bakmak:

alt text

Let's imagine an dimensionless 2d array. The X axis is the blue line, Y is horizontal, spiral is red.

Ben spiral N noktasına merkez noktası x0y0 hücreleri eklemeniz gerekir

Tell me the way to solve the problem, please. Thank you!

3 Cevap

, Kareler yerine altıgenlerle normal bir ızgara vardı düşünün ki ızgara kullanarak spirali oluşturmak, daha sonra m piksel sola, diyelim ki garip her y kaydırarak bunu çizmek, bu sana bu efekti vereceğiz.

Bir önceki turda seçilen Hex altı-henüz-seçilmiş bitişik onaltılarını iyi seçmek için uygun bir skor işlevini kullanarak bir defada onaltılarını birini seçebilirsiniz. I (1,0) en yakın seçerek bağları kırarak, (bir defada bir "kabuk" in onaltılarını seçerek kuvvetleri) (tutarlı bir spiral yön zorlar çalışan bir skor fonksiyonu (0,0) en yakın almak için olduğunu düşünüyorum Yeni kabuk). Altıgen ızgara mesafe aşağıdaki işlevi kullanılarak hesaplanabilir:

double grid_distance(int dx, int dy) {
  double real_dx = dx + y/2.0;
  double real_dy = dy * sqrt(3)/2.0;
  return sqrt(real_dx * real_dx + real_dy * real_dy);
}

YOu yön simüle bunu yapabilirdi. Senin tarifi "0 puan yukarı" Eğer saat-bilge gitmek, sonra 1 ile artırmak, şu yapmalıdır:

Pick a centre cell.
Pick the second cell (ideally in direction 0).
Set direction to 2.

While you have more cells to mark:
  if the cell in (direction+1)%6 is free:
    set direction = (direction+1)%6
  mark current cell as used
  go to cell in direction