@vladis222
Ответсвенный,трудолюбивый парень, 25 лет

Как правильно реализовать приложение с использованием алгоритмов Брезенхема и Люка для решения задачи отрисовки букв?

Здравствуйте! Есть задание:
Выполнить отрисовку первой буквы фамилии студента с использованием процедур генерации отрезков по методу Люка.
Выполнить отрисовку последней буквы имени студента с использованием процедур генерации отрезков по методу Брезенхэма.
Буквы задать координатами концов отрезков, их образующих, в символьных матрицах 50х80 точек.
Буквы отобразить горизонтально, рядом, в центре экрана, через «пробел» (пустая символьная матрица). Для этого использовать процедуру пересчета координат концов отрезков символьных матриц в экранные координаты в зависимости от используемого видеорежима. Цвета отображения букв – разные (любые).
Написал часть кода на C#, отрисовал букву Й. Посмотрите, пожалуйста, правильно ли? смущает условие о процедуре пересчета координат концов отрезков символьных матриц в экранные координаты в зависимости от видеорежима...
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        //Метод, устанавливающий пиксел на форме с заданными цветом и прозрачностью
        private static void PutPixel(Graphics g, Color col, int x, int y, int alpha)
        {
            g.FillRectangle(new SolidBrush(Color.FromArgb(alpha, col)), x, y, 1, 1);
        }

        //Статический метод, реализующий отрисовку 4-связной линии по алгоритму Брезенхема
        static public void Bresenham4Line(Graphics g, Color clr, int x0, int y0, int x1, int y1)
        {
            //Изменения координат
            int dx = (x1 > x0) ? (x1 - x0) : (x0 - x1);
            int dy = (y1 > y0) ? (y1 - y0) : (y0 - y1);
            //Направление приращения
            int sx = (x1 >= x0) ? (1) : (-1);
            int sy = (y1 >= y0) ? (1) : (-1);

            if (dy < dx)
            {
                int d = (dy << 1) - dx;
                int d1 = dy << 1;
                int d2 = (dy - dx) << 1;
                PutPixel(g, clr, x0, y0, 255);
                int x = x0 + sx;
                int y = y0;
                for (int i = 1; i <= dx; i++)
                {
                    if (d > 0)
                    {
                        d += d2;
                        y += sy;
                    }
                    else
                        d += d1;
                    PutPixel(g, clr, x, y, 255);
                    x++;
                }
            }
            else
            {
                int d = (dx << 1) - dy;
                int d1 = dx << 1;
                int d2 = (dx - dy) << 1;
                PutPixel(g, clr, x0, y0, 255);
                int x = x0;
                int y = y0 + sy;
                for (int i = 1; i <= dy; i++)
                {
                    if (d > 0)
                    {
                        d += d2;
                        x += sx;
                    }
                    else
                        d += d1;
                    PutPixel(g, clr, x, y, 255);
                    y++;
                }
            }
        }
        

        private void button1_Click(object sender, EventArgs e)
        {
            Graphics g = pictureBox1.CreateGraphics();
            Bresenham4Line(g, Color.Black, Width/2-25,Height/2-40, Width/2-25, Height / 2 + 40);
            Bresenham4Line(g, Color.Black, Width / 2 + 25, Height / 2 - 40,
                Width / 2 - 25, Height / 2 + 40);
            Bresenham4Line(g, Color.Black, Width / 2 + 25, Height / 2 - 40,
                Width / 2 + 25, Height / 2 + 40);
            Bresenham4Line(g, Color.Black, Width / 2 - 25, Height / 2 - 60,
                Width / 2 , Height / 2 - 50);
            Bresenham4Line(g, Color.Black, Width / 2, Height / 2 - 50,
                Width / 2 + 25, Height / 2 - 60);

        }
    }
}

5e01fccab421a810662710.png
  • Вопрос задан
  • 290 просмотров
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Но вот вопрос - что имеется ввиду в задаче, что координаты концов отрезков, образующих буквы должны отображаться в символьных матрицах 50*80 точек?
Значит, что каждая буква рисуется в прямоугольнике 50x80 точек. Соответственно, координаты концов отрезков будут в диапазоне 0-49 по горизонтали и 0-79 по вертикали.
И что означает то,что буквы отобразить горизонтально, рядом в центре экрана, через "пробел" (пустую символьную матрицу), это как?
А вот прямо так: буква пробел буква. Центр пробела должен совпадать с центром экрана.
А вообще, такие вопросы лучше задавать своему преподавателю.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы