绘制摆线曲线

Draw a curve of the Cycloid

一天中的好时光。需要绘制摆线图,半径由用户指定。设法只画了一半的时期,我不明白那是什么。

代码正在应用。

我的函数:

return r * Math.Acos((r - y) / r) - Math.Sqrt(2 * r * y - Math.Pow(y, 2)); 

我的主要部分:

GraphPane pane = zedGraph.GraphPane;

            pane.CurveList.Clear();

            PointPairList list = new PointPairList();

            double r = 20;
            double xmax = 50;

            for (double y = 0; y < xmax; y+=0.5)
            {

                list.Add(CountIt(y, r), y);
            }

            LineItem myCurve = pane.AddCurve("Cycloid", list, Color.Red, SymbolType.None);

            zedGraph.AxisChange();

            zedGraph.Invalidate();

看来是要考虑y>2r的情况,或者说应该有几种可能的x?我不知道如何摆脱困境。

使用参数方程更简单(t=0..2*Pi一个周期):

x = r * (t - sin(t))
y = r * (1 - cos(t))

如果您想继续使用笛卡尔方程 x(y) - 更改 y 的限制以更正值 2 * r 并像这样镜像第二部分:

 for (double y = 0; y < 2 * r; y+=0.5)
        {
            list.Add(CountIt(y, r), y);
        }
 for (double y = 2 * r; y >= 0; y-=0.5)
        {
            list.Add(2 * Pi * r - CountIt(y, r), y);
        }

如果需要画几个句点,限制xmax:

 p = 0;
 while true do
 {
     for (double y = 0; y < 2 * r; y+=0.5)
            {   x = 2 * Pi * r * p + CountIt(y, r);
                if (x > xmax)
                    break; 
                list.Add(x, y);
            }
     for (double y = 2 * r; y >= 0; y-=0.5)
            {
               x =   2 * Pi * r * (p + 1) - CountIt(y, r);
                if (x > xmax)
                    break; 
               list.Add(x, y);
            }
     p++;
 }