六边形顶点的矢量方向



我正在尝试从六边形的中心到它的顶点的方向。但是我不知道如何通过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度角。——格雷厄姆

这就解决了。我完全忘记了三角函数…谢谢:)

最新更新