Рисование полярной кривой Lemiscate bug

Я пытаюсь нарисовать лемискату. Мой код неправильно рисует кривую. Почему линия начинается или заканчивается в точке 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;
}

person user1097772    schedule 10.06.2012    source источник


Ответы (1)


Вы должны выяснить, какой элемент p равен (0, 0). Вы можете использовать отладчик, чтобы проверить его, или использовать цикл, чтобы найти его и распечатать, какие индексы имеют (0, 0).

Подсказка: подумайте, как if (r > 0) continue; влияет на ваш результат.

person Gabe    schedule 10.06.2012