0

我正在尝试绘制lemiscate。我的代码没有正确绘制曲线。为什么线在点 0,0(左角)开始或结束?

在此处输入图像描述

private void drawLemiscate(Graphics g, int a, int Sx,int Sy) 
{
    int x, y;


    Point[] p = new Point[720];
    for (int phi = 0; phi < 720; phi++)
    {
        int r = (int)(a * Math.Cos(2 * degreeToRadians(phi)));
        if (r > 0)
            continue;
        x = (int)Math.Round((r * Math.Sin(degreeToRadians(phi)) + Sx));
        y = (int)Math.Round((r * Math.Cos(degreeToRadians(phi)) + Sy));
        p[phi] = new Point(x, y);
    }
    Pen pen = new Pen(Color.Red, 1);
    g.DrawLines(pen, p);
    canvas.Invalidate();
}

private double degreeToRadians(double angle)
{
    return Math.PI * angle / 180.0;
}
4

1 回答 1

1

您应该调查哪个元素p是 (0, 0)。您可以使用调试器检查它或使用循环来查找它并打印出哪些索引具有 (0, 0)。

提示:考虑if (r > 0) continue;对你的输出有什么影响。

于 2012-06-10T15:18:55.430 回答