gpt4 book ai didi

c++ - 简化一段代码—— vector 旋转一圈

转载 作者:行者123 更新时间:2023-12-02 15:57:20 25 4
gpt4 key购买 nike

给定以下代码模式,其中我试图在整数 int x 上以 45 度的增量声明 vector 方向和 int y , 位于原点的圆圈内

// x == 0 && y == 0 case is already taken cared of 

if(x > 1) {
if(y == 0) {
// horizontal right
m_rotation = 0;
}else if(y < 1) {
// diagonal down right
m_rotation = 315;
} else if(y > 1) {
// diagonal up right
m_rotation = 45;
}
} else if(x == 0) {
if(y < 1) {
// vertical down
m_rotation = 270;
} else if(y > 1) {
// vertical up
m_rotation = 90;
}
} else if(x < 1){
if(y == 0) {
// horizontal left
m_rotation = 180;
}else if(y < 1) {
// diagonal down left
m_rotation = 225;
} else if(y > 1) {
// diagonal up left
m_rotation = 135;
}
}

我正在寻找一种优雅的方式来使它紧凑。我知道有宇宙飞船运算符(operator) <=> ,但我需要限制自己使用 C++17

我尝试过的事情

  • 使用 m_rotation = x > 1? (y < 1? (y == 0? 0: 315): 45): (x == 0? (y < 1? 270: 90): (y < 1? (y == 0? 180: 225): 135)); 嵌套三元运算符, 但这看起来很奇怪
  • 我试着把 x == 0箱内x < 1 case 并将 later 转换为 else,但这并不足以简化代码
  • 使用绝对值比较xy , 但我很快就迷路了
  • 真的没有别的了,我不知道还能尝试什么

最佳答案

有点像

constexpr int rotation[3][3] = {
{225, 180, 135},
{270, 0, 90},
{315, 0, 45},
};
if (x != 0 || y != 0) // if (!(x == 0 && y == 0))
m_rotation = rotation[1 + sign(x)][1 + sign(y)];

关于c++ - 简化一段代码—— vector 旋转一圈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71289889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com