Краткие теоретические сведения. Один из методов разложения отрезка в растр состоит в решении дифференциального уравнения, описывающего этот процесс
Работа №1
Один из методов разложения отрезка в растр состоит в решении дифференциального уравнения, описывающего этот процесс, Для прямой линии имеем или Решение представляется в виде (1) где , и , — концы разлагаемого отрезка — начальное знамение для очередного шага вдоль отрезка, Фактически уравнение (1) представляет собой рекуррентноесоотношение для последовательных значений вдоль нужного отрезка. Этот метод, используемыйдля разложения в растр отрезков, называется цифровым дифференциальным анализатором (ЦДА), В простом ЦДА. либо , либо (большее из приращений) выбирается вкачестве единицы растра. Ниже приводится простой алгоритм, работающий во всех квадрантах. Алгоритм работы программы Private void button1_Click(object sender, EventArgs e) { Double x1 = (Convert.ToDouble(this.textBox1.Text) + this.pictureBox1.Width / 2); Double y1 = (Convert.ToDouble(this.textBox2.Text) * (-1) + this.pictureBox1.Height / 2); Double x2 = (Convert.ToDouble(this.textBox3.Text) + this.pictureBox1.Width / 2); Double y2 = (Convert.ToDouble(this.textBox4.Text) * (-1) + this.pictureBox1.Height / 2); Double L; if ((Math.Abs(x2 - x1) > Math.Abs(y2 - y1)) || (Math.Abs(x2 - x1) == Math.Abs(y2 - y1))) { L = Math.Abs(x2 - x1); } else { L = Math.Abs(y2 - y1); } Double dx = (x2 - x1) / L; Double dy = (y2 - y1) / L; Double x = x1 + 0.5 * sign(dx); Double y = y1 + 0.5 * sign(dy); Int32 i = 1; while ((i < L) || (i == L)) {
|