我正在尝试从六边形的中心到它的顶点的方向。但是我不知道如何通过for循环来实现,所以我只写了一个switch语句和一堆case。
也许是因为我累了,也许是因为我是一个相对的新手……原因不重要。
有谁能帮我正确地表述这段代码吗?
Vector2 dir;
for(int i = 0; i < 6; i++) {
switch (i) {
case 0:
dir = new Vector2(0, 3);
break;
case 1:
dir = new Vector2(0, -3);
break;
case 2:
dir = new Vector2(2, 1);
break;
case 3:
dir = new Vector2(2, -1);
break;
case 4:
dir = new Vector2(-2, -1);
break;
case 5:
dir = new Vector2(-2, 1);
break;
}
}
多谢了!
编辑:澄清
谢谢你的建议,但我真正想找的是这样的东西:
for(int i = 0; i < 6; i++){
dir = new Vector2(f(i), g(i));
//Code
}
其中f(i)是给出所需x坐标的函数,g(i)给出所需y坐标。如果这样的事情是可能的。
for循环是必要的,因为dir赋值后的代码
您可以通过删除for和开关来简化代码,如下所示:
Vector2 dir;
dir = new Vector2(0, 3);
dir = new Vector2(0, -3);
dir = new Vector2(2, 1);
dir = new Vector2(2, -1);
dir = new Vector2(-2, -1);
dir = new Vector2(-2, 1);
这不是一个正六边形,顺便说一下,我相信你知道。
半径为2,边长为2,上下各为平边的六边形
List<Vector> vertices = new List<Vector>() {
new Vector(-1,Math.Sqrt(3)),
new Vector(1, Math.Sqrt(3)),
new Vector(2, 0),
new Vector(1, -1 * Math.Sqrt(3)),
new Vector(-1, -1 * Math.Sqrt(3)),
new Vector(-2, 0)
};
在这种情况下,如果你的第一个点是在(x,y),邻近的点,60度,是在x'=xSin60-yCos60和y'=xCos60+ySin60。下一个点用120度角。——格雷厄姆
这就解决了。我完全忘记了三角函数…谢谢:)