2014-04-02 2 views
1

난 16 진수 격자에 대한 이러한 기능이 있습니다. 그들은 정규 육각형 그리드에 잘 작동합니다. 이러한 함수는 누적 된 16 진수 격자에 대해 무엇입니까? 찌그러진 헥스 그리드 란 각 헥스가 키가 큰 그리드를 의미합니다.헥스 그리드를 스퀘어 헥스 그리드로 변환하는 방법은 무엇입니까?

coordinates_to_pixel = function(x, y) { 
    var pixel_x = s_hex_size * 3/2 * x 
    var pixel_y = s_hex_size * Math.sqrt(3) * (y + x/2) 
    return { x: pixel_x, y: pixel_y } 
} 

pixel_to_coordinates = function(x, y) { 
    var q = 2/3 * x/s_hex_size 
    var r = (1/3 * Math.sqrt(3) * y - 1/3 * x)/s_hex_size 
    var cube = convert_axial_to_cube_coordinates(q,r) 
    var round = round_cube_coordinates(cube.x, cube.y, cube.z) 
    var axial = convert_cube_to_axial_coordinates(round.x, round.y, round.z) 
    return { x:axial.x, y:axial.y } 
} 

hex_points = function(x, y) { 
    var pixel = coordinates_to_pixel(x,y) 

    var points = '' 
    for (var i = 0; i < 6; i++) { 
     var angle = 2 * Math.PI/6 * i 

     var point_x = (hex_size * Math.cos(angle)) + pixel.x + canvas_width/2 
     var point_y = (hex_size * Math.sin(angle)) + pixel.y + canvas_height/2 

     if (i != 0) { points = points + ' '; } 
     points = points + point_x.toString() + ',' + point_y.toString() 
    } 
    return points 
}) 

다음은 뾰족한 16 각형 그리드의 이미지입니다. hex grid image

다음은 변환 및 반올림 기능입니다.

convert_axial_to_cube_coordinates = function(q,r) { 
    return { 
     x: q, 
     y: -1 * q - r, 
     z: r 
    } 
} 


convert_cube_to_axial_coordinates = function(x,y,z) { 
    return {x: x, y: z} 
} 


round_cube_coordinates = function(x,y,z) { 
    var rx = Math.round(x) 
    var ry = Math.round(y) 
    var rz = Math.round(z) 

    var x_diff = Math.abs(rx - x) 
    var y_diff = Math.abs(ry - y) 
    var z_diff = Math.abs(rz - z) 

    if (x_diff > y_diff && x_diff > z_diff) { 
     rx = -1 * ry - rz 
    } else if (y_diff > z_diff) { 
     ry = -1 * rx - rz 
    } else { 
     rz = -1 * rx - ry 
    } 

    return {x: rx, y: ry, z: rz} 
} 
+0

이것은'convert_axial_to_cube_coordinates'가 어떻게 작동하는지에 달려 있지만'Math.sqrt (3)'의 두 인스턴스를'Math.sqrt (3) * squish_factor'로 대체하는 것이 좋은 시작이 될 수 있습니다. 'squish_factor'는 물론 squishing의 경우 0과 1 사이의 실제 숫자이거나 스트레칭의 경우 1보다 큰 숫자 일 것입니다. –

+0

Math.sqrt (3)을 (Math.sqrt (3) * squish_factor)로 대체하려고 시도했지만 pixel_to_coordinate의 y가 잘못되었습니다. 16 진수 20, -20에서 20, -16 이상이라고 생각합니다. 또한 도움이된다면 변환 기능으로 게시물을 업데이트했습니다. – Dan

답변

1

알아 냈어. coordinates_to_pixel은 Math.sqrt (3) * squish factor입니다. Pixel_to_coordinates는 Math.sqrt (3)/squish_factor입니다. 하나는 곱하기 다른 하나는 나눕니다.

관련 문제