Как бы я изменить это?

1

У меня есть этот код:

public static final BlockFace[] axis = {BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST};
public static final BlockFace[] radial = {BlockFace.NORTH, BlockFace.NORTH_EAST, BlockFace.EAST, BlockFace.SOUTH_EAST, BlockFace.SOUTH, BlockFace.SOUTH_WEST, BlockFace.WEST, BlockFace.NORTH_WEST};

public static BlockFace yawToFace(float yaw, boolean useSubCardinalDirections) {
    if (useSubCardinalDirections) {
        return radial[Math.round(yaw / 45f) & 0x7];
    } else {
        return axis[Math.round(yaw / 90f) & 0x3];
    }
}

Как я мог бы обратить вспять это в эффективном вопросе? Я могу думать о нескольких грубо-сильных способах, но они кажутся очень неэффективными.

Итак, у меня есть метод yawToFace(), я хочу создать метод faceToYaw().

Любая помощь будет очень признательна. Спасибо! :)

  • 0
    для начала вы можете получить только приблизительное направление, так как некоторая информация теряется при округлении
  • 0
    @KevinL Да, конечно. Я хочу только приблизительное направление.
Показать ещё 4 комментария
Теги:
reverse

1 ответ

3

Я думаю, что сохранение степеней в перечислении BlockFace было бы вполне приемлемым. В противном случае вам нужно будет искать массивы, найти соответствующий индекс, а затем умножить на 45 или 90.

  • 1
    Наличие углов, BlockFace значениям, соответствующим каждому BlockFace означает, что вы можете просто выполнить простую приведение типов, чтобы получить угол. +1
  • 0
    Это было бы хорошим решением. Однако у меня нет доступа к BlockFace.java. Однако я мог бы сделать свой собственный enum.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню