Программирование - это просто
Advertisement
Главная arrow Биржевые роботы arrow Теория и практика компьютерной графики. arrow Теория и практика компьютерной графики. Урок 5. Векторные примитивы. Прямая.
02.05.2024 г.
Главное меню
Главная
Интернет магазин
Программные продукты
Биржевые роботы
Искусственный интеллект
Математика и информатика
1С:Предприятие
Уроки C#
Уроки Delphi
Уроки программирования
Web-программирование
Дизайн и графика
Компьютер для блондинок
Исходники
Статьи
Платный раздел
Рассказы про компьютеры
Хитрости и секреты
Системный подход
Размышления
Наука для чайников
Друзья сайта
Excel-это не сложно
Все о финансах
.
Теория и практика компьютерной графики. Урок 5. Векторные примитивы. Прямая. Печать E-mail
Автор megabax   
10.05.2023 г.
New Page 1

Теория и практика компьютерной графики. Урок 5. Векторные примитивы. Прямая.

Чтобы смотреть урок полностью, подпишитесь на платный раздел.

В платном разделе статья находится здесь.


Сегодня мы начнем практическое программирование векторной графики. Для того, чтобы программировать векторную графику, векторные примитивы надо как-то задать. С точкой все понятно. Она задается координатами. Поэтому начнем сразу с прямой (не с отрезка, а именно с прямой).

Как можно задать прямую? Существует ряд способов:

  • По двум точкам, через которые проходит эта прямая.

  • Уравнением y=kx+b.

  • Проходящая через точку и параллельную(перпендикулярную) другой прямой.

  • И многие другие.

Если мы будем писать программу векторной графики, то, скорее всего, придется программировать различные способы задания прямой. Но хранить в памяти компьютера этот примитив придется в каком то одном определенном виде, при необходимости рассчитывая его из других способов задания прямой. Но в каком же виде лучше всего хранить описание прямой в памяти компьютера? Напрашивается форма  y=kx+b, так как в этом случае мы сможет легко вычислить как y по x, так и x по y.  Правда, если линия параллельна оси Oy, то k у нас будет ∞. Можно, конечно, предусмотреть какое-то условие, но как быть, если у нас угол между Oy и прямой просто очень маленький. Тут хуже. Коэффициент k при этом может оказаться очень большим, и при чем настолько большим, что таких чисел в формате представления чисел с плавающей точкой будет просто не предусмотрено. Как быть?

Выход, на самом деле есть. ...

...

... И смотрим результат:

Теория и практика компьютерной графики. Урок 5. Векторные примитивы. Прямая.

Что еще можно сделать с этим классом (Line)? Можно построить ее по двум точкам ....

...

...Протестируем:

        private void button1_Click(object sender, EventArgs e)

        {

            pbImage.Image = new Bitmap(pbImage.Width, pbImage.Height);

            Graphics gr = Graphics.FromImage(pbImage.Image);

            Pen pen = new Pen(new SolidBrush(Color.Red), 3);

            Pen pen1 = new Pen(new SolidBrush(Color.Black), 1);

 

            for (int i = 1; i <= 21; i++)

            {

                gr.DrawLine(pen1,i*20,0,i*20,pbImage.Height);

            }

 

            for (int i = 1; i <= 14; i++)

            {

                gr.DrawLine(pen1, 0, i * 20, pbImage.Width, i * 20);

            }

 

            Line line = new Line();

 

            line.from_to_points(0, 0, 40, 40);

 

            float x1 = 0;

            float y1 = (float)line.get_y(0);

            float x2 = pbImage.Width;

            float y2 = (float)line.get_y(x2);

            if (float.IsNaN(y1))

            {

                y1 = 0;

                y2 = pbImage.Height;

                x1 = (float)line.r;

                x2 = (float)line.r;

            }

 

            gr.DrawLine(pen, x1, y1, x2, y2);

            pbImage.Invalidate();

        }

Результат:

Теория и практика компьютерной графики. Урок 5. Векторные примитивы. Прямая.

Можно написать вычисление x по y:...

....

....Результат теста:

Теория и практика компьютерной графики. Урок 5. Векторные примитивы. Прямая.

Последнее обновление ( 10.08.2023 г. )
 
« След.   Пред. »
 
© 2024 Программирование - это просто
Joomla! - свободное программное обеспечение, распространяемое по лицензии GNU/GPL.
Русская локализация © 2005-2008 Joom.Ru - Русский Дом Joomla!
Design by Mamboteam.com | Powered by Mambobanner.de
Я принимаю Яндекс.Деньги