весна, как рисование в C # - PullRequest
       49

весна, как рисование в C #

1 голос
/ 05 августа 2010

Как нарисовать форму пружины, используя класс рисования c #

альтернативный текст http://img812.imageshack.us/img812/373/spring.jpg

Ответы [ 2 ]

2 голосов
/ 05 августа 2010

Прежде всего вам нужно подумать о формуле, которая будет представлять весну. Вы можете нарисовать круг и, когда вы обойдете его, пусть 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 там как время, а результат x и y координаты для рисования; Вы должны пройти путь весны маленькими шагами.

Затем можно создать новый Bitmap и использовать метод SetPixel для этих координат, а в методе OnPaint вашей формы нарисовать растровое изображение на нем.

Если вы хорошо разбираетесь в математике (я не: P), вы можете построить только пиксели внутри растрового изображения - приведенный выше пример не решает проблему минимальных и максимальных значений для i ,

0 голосов
/ 05 августа 2010

Это больше математическая задача, чем проблема C #. Вам нужно вывести Параметрическое уравнение для кривой, которую вы хотите нарисовать.

После этого перейдите и заполните массив объектов 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());
}
...