Pertama - saya tahu saya sangat padat di sini.
Dengan itu, saya mencoba untuk menulis implementasi C # dari algoritma ini:
var results = []
for each -N ≤ dx ≤ N:
for each max(-N, -dx-N) ≤ dy ≤ min(N, -dx+N):
var dz = -dx-dy
results.append(cube_add(center, Cube(dx, dy, dz)))
Saya telah mengambil ini dari sumber yang luar biasa ini .
Masalah saya adalah bahwa setiap implementasi yang telah saya coba sejauh ini memiliki hasil gila. Misalnya, kode yang ditunjukkan di bawah saat ini menghasilkan ini:
dan ini:
Kode saya saat ini duduk seperti ini:
for (int x = this.CellPositionX - distance; x <= this.CellPositionX + distance; x++)
{
for (int y = this.CellPositionY - Math.Max(-distance, -x - distance); y <= this.CellPositionY + Math.Min(distance, -x + distance); y++)
{
HexPosition rangePosition = new HexPosition(x, y);
range.Add(rangePosition);
}
}
Adakah yang bisa melihat sesuatu yang salah di sini? Semua saran diterima. Saya telah membenturkan kepala saya pada yang satu ini sekarang.
Terima kasih!
Catatan yang diperbarui: Saya menggunakan koordinat Aksial dalam kisi. Perbarui # 2: seperti yang ditunjukkan di bawah ini, saya punya for..each loop salah dan tidak menggunakan delta untuk bekerja. Terima kasih untuk bantuannya!
Saat ini saya memiliki masalah seperti yang ditunjukkan di bawah ini dengan implementasi dari jawaban:
Saya akan terus menyelidiki - jika saya mengetahuinya saya akan memposting hasil lengkap di sini. Terima kasih semuanya!