【问题标题】:spring like drawing in c#春天喜欢在c#中绘图
【发布时间】:2010-08-05 06:15:42
【问题描述】:

如何使用c#绘图类绘制弹簧状的形状

alt text http://img812.imageshack.us/img812/373/spring.jpg

【问题讨论】:

  • 您遇到的任何特定部分有问题吗?
  • 不,我不知道如何开始以及从哪里开始。

标签: c# math drawing system.drawing shape


【解决方案1】:

首先,您需要想出一个代表春天的公式。你可以画一个圆圈,当你绕着它走的时候,让 X 增加一点。例如:

        for (double i = 0; i < 50; i += 0.01)
        {
            int x = (int)(Math.Sin(i) * 10 + i * 3);
            int y =(int)(Math.Cos(i) * 10 + 50);
        }

查看i变量作为时间,结果xy绘制坐标;你会小步穿过春天的路径。

然后您可以创建一个新的Bitmap 并在这些坐标上使用SetPixel 方法,并在表单的OnPaint 方法中在其上绘制位图。

如果您对数学有任何好处(我不是:P),您可能只能在位图中绘制像素 - 上面的示例不能解决i 的最小值和最大值的问题.

【讨论】:

  • 使用 setPixel 方法,步骤必须非常小才能创建连续绘图(弹簧),并且需要进行一些调整以避免像素艺术 :) 使用 drawlines 方法(参见我的回答)更大的步骤足以产生令人信服的形状。
  • 同意 :] 有很多东西可以玩,我可以想象只计算一个“圆圈”并复制它来加快速度。
【解决方案2】:

这更像是一道数学题,而不是 C# 题。你想要的是为你想要绘制的曲线派生一个Parametric equation

这样,使用参数方程的值在一定间隔内以一定的步长填充一个 Point 对象数组(步长越小,最终绘图看起来越像实际形状)。然后您可以使用 g.DrawLines (MSDN: DrawLines) 在曲面上绘制实际曲线。

可以通过修改Pen对象的参数来编辑线条的宽度、颜色等属性。

您的实际代码如下所示:

void DrawSpring (Graphics g)
{
    List<Point> points = new List<Point>();

    double step = 0.01;
    for(double t = -2; t < 2; t += step)
    {
        Point p = new Point();
        p.X = XPartOfTheEquation(t);
        p.Y = YPartOfTheEquation(t);

        points.Add(p);
     }

    g.DrawLines(new Pen(new SolidBrush(Color.Black), 2f), points.ToArray());
}

【讨论】:

    猜你喜欢
    • 2012-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-08
    相关资源
    最近更新 更多