C#DirectX Circle绘图无法正常工作

时间:2015-10-12 23:23:40

标签: c# directx

我一直在尝试将C ++ DirectX代码重新编码为C#,这将有助于我绘制一个完美的圆圈。目前我有这个代码,我自己翻译:

 private void Circle(int X, int Y, int radius, int numSides, Color color)
    {

        Vector2[] Line = new Vector2[128];
        float Step = (float)(Math.PI * 2.0 / numSides);
        int Count = 0;
        for (float a = 0; a < Math.PI * 2.0; a += Step)
        {

            float X1 = (float)(radius * Math.Cos(a) + X);
            float Y1 = (float)(radius * Math.Sin(a) + Y);
            float X2 = (float)(radius * Math.Cos(a + Step) + X);
            float Y2 = (float)(radius * Math.Sin(a + Step) + Y);
            Line[Count].X = X1;
            Line[Count].Y = Y1;
            Line[Count + 1].X = X2;
            Line[Count + 1].Y = Y2;
            Count += 2;
        }
        line.Begin();
        line.Draw(Line, color);
        line.End();               
    }

问题在于绘制了圆形,但也是从圆形中的一个点到左上角的直线,就像这样。

enter image description here

1 个答案:

答案 0 :(得分:1)

不要使用浮点变量进行迭代。它们可能在迭代期间变得不精确。在你的情况下,最后一步可能非常接近上限(而不是完全击中它)。因此它不会被计算并保留为默认(0, 0)

所以使用整数迭代变量:

for (int i = 0; i < numSides; ++i)
{
    float a = i * Step;
    ...
}

然后,你也可以摆脱Count

此外,您应该使坐标缓冲区动态化:

Vector2[] Line = new Vector2[2 * numSides];