矢量方向的六边形顶点

时间:2015-09-17 02:50:44

标签: c# loops optimization

我试图从六边形的中心到它的顶点获取方向。但是我无法通过for循环弄清楚如何做到这一点,所以我只是做了一个switch语句和一堆案例。

也许是因为我累了,也许是因为我是一个相对新手......原因并不重要。

有人可以帮我正确地制定这段代码吗?

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坐标。 如果这样的话甚至可能。

由于dir赋值后的代码,for循环是必要的。

3 个答案:

答案 0 :(得分: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)
            };

答案 1 :(得分:1)

您可以通过删除for和switch来简化该代码,如下所示:

2015-09-17 09:00:00

顺便说一下,这不是正常的六角形,我相信你知道。

答案 2 :(得分:0)

  

在这种情况下,如果您的第一个点位于(x,y),则相邻点(60度距离)位于x'= xSin60-yCos60且y'= xCos60 + ySin60。要获得下一个点使用120度。 - 格雷厄姆

解决了它。我完全忘记了三角函数...谢谢:)