0

レミスケートを描こうとしています。コードが曲線を正しく描画していません。線が点 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 に答える