Главная страница

Отчет_геометрия_Землянова, Еременко. Отчет программа раскраски треугольника


Скачать 129.21 Kb.
НазваниеОтчет программа раскраски треугольника
Дата06.01.2023
Размер129.21 Kb.
Формат файлаodt
Имя файлаОтчет_геометрия_Землянова, Еременко.odt
ТипПрограмма
#874520

Министерство образования и науки Российской Федерации

НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ

ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ (НИ ТГУ)
Институт прикладной математики и компьютерных наук

Кафедра прикладной информатики

ОТЧЕТ

ПРОГРАММА РАСКРАСКИ ТРЕУГОЛЬНИКА

Выполнили Студентки группы № 931901

Ольга Землянова, Екатерина Еременко

Томск 2022

  1. Исходные данные для закрашивания треугольника:

    1. Вершины треугольника (x1 = 100, y1 = 100; x2 = 200, y2 = 300; x3 300, y3 200)

    2. Соответствующие вершинам цвета в RGB (255, 223, 0; 0, 183, 235; 255, 0, 255)

  2. Формула аффинного преобразования на выбранных исходных данных:







  1. Результат выполнения программы:




  1. Вывод:

С помощью аффинного преобразования можно не только поворачивать, масштабировать, перемещать фигуры, но и раскрасить треугольник.


  1. Листинг программы:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

using triangle;

namespace triangle

{

class data //создается теругольник по заданным координатам и цветам для каждой вершины

{

public static double x1 = 100;

public static double y1 = 100;
public static double x2 = 200;

public static double y2 = 300;
public static double x3 = 300;

public static double y3 = 200;
public static UInt32 colorA = 0xFF00FFFF;

public static UInt32 colorB = 0xFFFFFF00;

public static UInt32 colorC = 0xFFFF00FF;

}

}

namespace triangleRasterization

{

public partial class Form1 : Form

{

public static Bitmap image;
public Form1()

{

InitializeComponent();

}
public void Rasterization() //функция, которая будет закрашивать точки согласно вычислениям

{

for (int y = 0; y < pictureBox1.Height; y++)

for (int x = 0; x < pictureBox1.Width; x++)

image.SetPixel(x, y, Color.FromArgb((int)ShadeBackgroundPixel(x, y)));

}
public UInt32 ShadeBackgroundPixel(int x, int y) //алгоритм вычисления цвета

{

UInt32 pixelValue;
double l1, l2, l3;

pixelValue = 0xFFFFFFFF;

l1 = ((data.y2 - data.y3) * ((double)(x) - data.x3) + (data.x3 - data.x2) * ((double)(y) - data.y3)) /

((data.y2 - data.y3) * (data.x1 - data.x3) + (data.x3 - data.x2) * (data.y1 - data.y3));

l2 = ((data.y3 - data.y1) * ((double)(x) - data.x3) + (data.x1 - data.x3) * ((double)(y) - data.y3)) /

((data.y2 - data.y3) * (data.x1 - data.x3) + (data.x3 - data.x2) * (data.y1 - data.y3));

l3 = 1 - l1 - l2;

if (l1 >= 0 && l1 <= 1 && l2 >= 0 && l2 <= 1 && l3 >= 0 && l3 <= 1) //проверка точки на пренадлежность треугольнику

{

pixelValue = (UInt32)0xFF000000 |

((UInt32)(l1 * ((data.colorA & 0x00FF0000) >> 16) + l2 * ((data.colorB & 0x00FF0000) >> 16) + l3 * ((data.colorC & 0x00FF0000) >> 16)) << 16) |

((UInt32)(l1 * ((data.colorA & 0x0000FF00) >> 8) + l2 * ((data.colorB & 0x0000FF00) >> 8) + l3 * ((data.colorC & 0x0000FF00) >> 8)) << 8) |

(UInt32)(l1 * (data.colorA & 0x000000FF) + l2 * (data.colorB & 0x000000FF) + l3 * (data.colorC & 0x000000FF));

}

return pixelValue;

}
private void button1_Click(object sender, EventArgs e)

{

image = new Bitmap(pictureBox1.Width, pictureBox1.Height); //из файла data выводим заданный треугольник

Rasterization();

pictureBox1.Image = image;

}

}

}


написать администратору сайта