Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.03.2019, 18:18   #1
jOBER
Пользователь
 
Регистрация: 02.09.2018
Сообщений: 32
По умолчанию b spline C#. Не корректно рисует

Здравствуйте делаю это windows form. Сделал другие виды сплайнов, а вот Б-сплайн, рисуется не верно. Можете поправить формулу, я уверен что в ней ошибка, так другие рисуются верно.
Код:

{
    public partial class Form1 : Form
    { 
        public Form1()
    {
        InitializeComponent();

    }

    Graphics G;
    PointF[] Arr = new PointF[]
    {
            new PointF(10, 100),
            new PointF(100, 10),
            new PointF(150, 150),
            new PointF(200, 100)

      };


        void DrawSpline(string name)
        {

            float step = 0.01f;
            int p = 0;
            for (int k = 0; k < Arr.Length - 3; k += p)
            {
                int i = k;
                int j = 0;
                PointF[] result = new PointF[101];
                for (float t = 0; t < 1; t += step)
                {
                    float y = 0;
                    float x = 0;
                    if (name == "b-spline")
                    {
                        p = 1;
                        x += ((float)Math.Pow(1 - t, 3) * Arr[i].X + (3 * t * t * t - 6 * t * t + 4) * Arr[i + 1].X + (-3 * t * t * t + 3 * t * t + 3 * t + 1) * Arr[i + 2].X + (t * t * t) * Arr[i + 3].X) / 6;
                        y += ((float)Math.Pow(1 - t, 3) * Arr[i].Y + (3 * t * t * t - 6 * t * t + 4) * Arr[i + 1].Y + (-3 * t * t * t + 3 * t * t + 3 * t + 1) * Arr[i + 2].Y + (t * t * t) * Arr[i + 3].Y) / 6;
                    }


                    result[j] = new PointF(x, y);
                    j++;
                }
                G.DrawLines(new Pen(Color.Red), result);

            }
        }


        private void button1_Click(object sender, EventArgs e)
        {
            Pen pen = new Pen(Color.Blue, 2);
            Pen pen_line = new Pen(Color.Blue, 1);
            Graphics point = pictureBox1.CreateGraphics();

            point.DrawLine(pen_line, Arr[0], Arr[1]);
            point.DrawLine(pen_line, Arr[Arr.Length - 1], Arr[Arr.Length - 2]);

            // point = pictureBox2.CreateGraphics();
            for (int i = 0; i < Arr.Length - 1; i += 2)
                point.DrawLine(pen_line, Arr[i], Arr[i + 1]);


            PictureBox[] picture_box = { pictureBox1 };
            string[] name = { "b-spline" };

            for (int i = 0; i < 1; i++)
            {
                for (int j = 0; j < 1; j++)
                {
                    point = picture_box[i].CreateGraphics();
                    point.DrawEllipse(pen, Arr[j].X, Arr[j].Y, 2, 2);
                }
                G = Graphics.FromHwnd(picture_box[i].Handle);
                G.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
                DrawSpline(name[i]);
            }
        }

    }
}
jOBER вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа рисует фио в с# Дана188 Помощь студентам 1 13.11.2014 18:36
Почему не рисует??? ser70 Qt и кроссплатформенное программирование С/С++ 1 17.04.2013 12:03
FillRgn не рисует Jugger Win Api 4 23.05.2012 17:14
directdraw не рисует... ros.pro Мультимедиа в Delphi 5 01.06.2011 19:58
Паскаль не рисует! fire_on Паскаль, Turbo Pascal, PascalABC.NET 26 11.08.2009 18:20