| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- package math
- import (
- "f1-game/internal/types"
- "math"
- )
- func Max[E types.Ordered](val E, others ...E) E {
- maxVal := val
- for _, v := range others {
- if v > maxVal {
- maxVal = v
- }
- }
- return maxVal
- }
- func Min[E types.Ordered](val E, others ...E) E {
- minVal := val
- for _, v := range others {
- if v < minVal {
- minVal = v
- }
- }
- return minVal
- }
- func Round[E types.FloatType, T types.Number](val E) T {
- return T(math.Round(float64(val)))
- }
- func Ceil[E types.FloatType, T types.Number](val E) T {
- return T(math.Ceil(float64(val)))
- }
- func Floor[E types.FloatType, T types.Number](val E) T {
- return T(math.Floor(float64(val)))
- }
- // GetPointDistance 获取两点之间的距离(格子数)
- // 采用odd-q offset坐标系(奇数列向下偏移)
- // 使用cube坐标计算六边形网格距离
- func GetPointDistance(x1, y1, x2, y2 int32) int32 {
- // 转换为cube坐标
- // cube.x = offset.x
- // cube.z = offset.y - (offset.x + (offset.x&1)) / 2
- // cube.y = -cube.x - cube.z
- c1x := x1
- c1z := y1 - (x1+(x1&1))/2
- c1y := -c1x - c1z
- c2x := x2
- c2z := y2 - (x2+(x2&1))/2
- c2y := -c2x - c2z
- // cube坐标下的距离公式: (|dx| + |dy| + |dz|) / 2
- dx := c1x - c2x
- dy := c1y - c2y
- dz := c1z - c2z
- if dx < 0 {
- dx = -dx
- }
- if dy < 0 {
- dy = -dy
- }
- if dz < 0 {
- dz = -dz
- }
- return (dx + dy + dz) / 2
- }
|