Программа вывода текста вдоль кривой линии

Автор: Пользователь скрыл имя, 15 Декабря 2010 в 18:21, курсовая работа

Описание работы

Для разработки программы использован язык программирования высокого уровня: С#.

В первом разделе работы описаны методы и модели отображения кривых и текста средствами векторной графики.

Во втором разделе приведено описание метода представления траектории, вдоль которой выводится текст на экран.

Третий раздел посвящён разработке программы вывода текста вдоль кривой на языке C#.

Результатом работы стала программа, которая выводит строку текста вдоль кривой, которая задана мышкой.

Работа содержит 1 файл

Программа вывода текста вдоль кривой линии.doc

— 71.00 Кб (Скачать)

Программа вывода текста вдоль  кривой линии

Введение:

Изображение текста вдоль кривой может применяться  в рекламе,

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

Для разработки программы использован язык программирования высокого уровня: С#.

В первом разделе  работы описаны методы и модели отображения  кривых и текста средствами векторной графики.

Во втором разделе приведено описание метода представления  траектории, вдоль которой выводится текст на экран.

Третий раздел посвящён разработке программы вывода текста вдоль кривой на языке C#.

Результатом работы стала программа, которая выводит строку текста вдоль кривой, которая задана мышкой.   
 

Методы и  модели отображения кривых и текста средствами векторной графики

Двумерная компьютерная графика классифицируется по типу представления графической  информации, и следующими из этого алгоритмами обработки изображений. Обычно компьютерную графику разделяют на векторную и растровую.

Векторная графика представляет изображение  как набор геометрических примитивов. Обычно в качестве них выбираются точки, прямые, окружности, прямоугольники, а также, как общий случай, сплайны некоторого порядка. Объектам присваиваются некоторые атрибуты, например, толщина линий, цвет заполнения. Рисунок хранится как набор координат, векторов и других чисел, характеризующих набор примитивов. При воспроизведении перекрывающихся объектов имеет значение их порядок.

Изображение в векторном формате даёт простор  для редактирования. Изображение  может без потерь масштабироваться, поворачиваться, деформироваться. Имитация трёхмерности в векторной графике  проще, чем в растровой. Дело в том, что каждое такое преобразование фактически выполняется так: старое изображение (или фрагмент) стирается, и вместо него строится новое. Математическое описание векторного рисунка остаётся прежним, изменяются только значения некоторых переменных, например, коэффициентов. При преобразовании растровой картинки исходными данными является только описание набора пикселей, поэтому возникает проблема замены меньшего числа пикселей на большее (при увеличении), или большего на меньшее (при уменьшении). Простейшим способом является замена одного пикселя несколькими того же цвета (метод копирования ближайшего пикселя: Nearest Neighbour). Более совершенные методы используют алгоритмы интерполяции, при которых новые пиксели получают некоторый цвет, код которого вычисляется на основе кодов цветов соседних пикселей.

Растровая графика всегда оперирует двумерным  массивом (матрицей) пикселов. Каждому  пикселю сопоставляется значение — яркости, цвета, прозрачности — или комбинация этих значений. Растровый образ имеет некоторое число строк и столбцов.

Без особых потерь растровые изображения можно  только лишь уменьшать, хотя некоторые  детали изображения тогда исчезнут навсегда, что иначе в векторном  представлении. Увеличение же растровых  изображений оборачивается красивым видом на увеличенные квадраты того или иного цвета, которые раньше были пикселями.

В растровом  виде представимо любое изображение, однако этот способ хранения имеет  свои недостатки: больший объём памяти, необходимый для работы с изображениями, потери при редактировании.

Уточненная  постановка задачи:  

На языке C# в среде Visual Studio 2008 разработать  программу, которая выводит на экран  текст вдоль кривой, заданной мышью.

Сначала при  помощи мыши задаётся произвольная кривая.

Далее программа  должна реагировать на нажатие клавиш, вводя и одновременно отображая последовательность символов вдоль нарисованной кривой.

Расстояние  между отображаемыми символами  рассчитывается автоматически, в соответствии с размером шрифта.

В случае когда  количество символов превышает длину кривой, текст не отображается.  

2. Задание  кривой и вывода текста на  экран

2.1 Структура  данных для построения кривой  и вывода текста на экран     

 В разрабатываемой  программе фигурируют следующие  компоненты: графическое окно (окно формы) для отображения вводимого текста; кривая, вдоль которой выводится текст; текстовое окно для контрольного отображения текста (окно редактирования), и динамически размещаемая вдоль кривой метка, для вывода очередного символа.     

 Основой  всего дальнейшего построения будет кривая, по координатам которой мы в дальнейшем будем вычислять координаты каждого нового символа выводимого на экран. В нашей программе координаты задаются нажатием кнопки мыши и дальнейшем перемещением мыши. При нажатие на кнопку мыши в классe записываются координаты точки нажатия и то, какая кнопка мыши была нажата. Координаты нажатия записываются в массив, откуда потом у будут выбираться координаты для отображения символов.При дальнейшем движении мыши координаты точки нажатия записываются в numpoint это объект класс Point. Это класс точек в библиотеке Drawing. Координаты имеют тип int(integer - целочисленный). Кривая задайтся при помощи построения прямых между точек нажатия мыши на экране. Для того чтобы нарисовать кривую нужна 2 точки al[numpoint-2], al[numpoint-1] которые хранят предыдущие расположения курсора.  Для того чтобы нарисовать линию, так же нужна «ручка». Создаем объект класса Pen.      

 Элемент  управления Label предназначен для  создания подписей к другим  элементам управления или для вывода информационных сообщений прямо на поверхности формы. Label имеет тип sting, она может менять размер шрифта символа выводимого на экран, по умолчанию у меня стоит AutoSize. При изменение содержания текстовой панели меняется и содержания текста метки. Мы могли выводить текст не только при помощи метки, это можно была сделать при помощи MessageBox или при помощи методов Graphics. Я решил воспользоваться меткой так как посчитал его наиболее лёгким в реалезации.

label.Text = txtbox.Text[index++].ToString(); // в Label заносится последний вводимый символ.       

 Текстовая  панель имеет тип string. TextBox –  этот элемент управления является  основным среди полей ввода  и списков, предназначенным для  ввода пользователем текстовых  данных. Использовать TextBox можно в однострочном или многострочном режиме. Однако данный элемент управления имеет ограничение — до 64 кбт текста.  

private void txtbox_TextChanged(object obj, EventArgs e)

{

TextBox txtbox = (TextBox)obj; //запоминается вводимый текст.

 

2.2 Алгоритм  отображения символов вдоль кривой  

 Трудность  выбора следующей точки, где  будет отображаться символ, заключается  в том, что символы могут  налаживаться  друг на друга. Я пришел к двум возможным способам решения этой проблемы: 

 Во-первых,  мы можем просто установить через сколько точек будет выводиться следующий символ. Этот способ не совсем подходит ведь мы не мы не можем быть уверенны что мышь всё время двигалась плавно, а следовательно что расстояние между точками одинаковое. Также мы не можем быть уверены, что линия прямая, ведь это может быть петля. 

 Во-вторых, мы также как и в первом  случае выбираем через, сколько  точек будет выводиться следующий  символ, но на этот рас проверяем  подходит эта точка нам или  нет.      

while (true)               

{                   

temp = (Point)al[numsim];                    

if (temp.X == 0 && temp.Y == 0)                       

MessageBox.Show("Error");                    

if (Math.Abs(pr.X - temp.X) > 10 && Math.Abs(pr.Y - temp.Y) > 3)                   

{                       

break;                   

}                   

numsim++;               

 

Мы проверяем  разницу между предыдущими координатами. Если она меньше заданному значению(3 по X, 9 по Y) то берётся следующая точка, в таком случае мы можем быть уверены, что соседние символы не будут  налаживаться друг на друга. Также мы выдаём сообщение об ошибке если следующая точка вывода текста находится не на прямой(то есть её координаты (0;0)).           

 Этот  способ не решает всех проблем,  ведь он не гарантирует равномерный  вывод текста вдоль кривой.  

3. Разработка  программы вывода текста вдоль  кривой на языке C#

3.1. Возможности  применения языка C# для вывода  текста вдоль кривой

Созданный компанией Microsoft для поддержки среды .NET Framework, язык C# опирается на богатое  наследие в области программирования. Его главным архитектором был  ведущий специалист в этой области – Андерс Хейлсберг. C# - прямой потомок двух самых успешных в мире компьютерных языков: C и С++. От С он унаследовал синтаксис, ключевые слова и операторы. Он позволяет построить и усовершенствовать объектную модель, определенную в С++. Кроме того, С# близко связан с другим очень успешным языком: Java. Опираясь на мощный фундамент, который составляют унаследованные характеристики, C# содержит ряд важных новшеств, поднимающих искусство программирования на новую ступень.

На протяжении всей истории развития вычислительной техники эволюция языков программирования означала изменение вычислительной среды, способа мышления программистов и самого подхода к программированию. Язык C# не является исключением. В непрекращающемся процессе усовершенствования, адаптации и внедрения нововведений C# в настоящее время находится на переднем крае. Это – язык, игнорировать существование которого не может ни один профессиональный программист.  

В языке  программирования C# есть много инструментов для описания графических фигур. Например, класс Graphics, который  является стандартным классом в библиотеке System.Drawing. Создав объект этого класса, нам открывается множество методов. Вот пример создания объекта упомянутого класса: Graphics g = Graphics.FromHwnd(this.Handle);

В нашей  программе нам понадобится один основной метод этого класса. Это  метод, который рисует линию.

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

Для того чтобы  нарисовать линию нам понадобятся две точки (al[numpoint - 2], al[numpoint - 1]). Вот пример создание точки al[numpoint++] = new Point(e.X, e.Y); где e.X и e.Y координаты точки где бала нажата кнопка мыши. Далее для нашей программы понадобится «ручка». Вот пример создание объекта «ручка»: Pen blackPen = new Pen(Color.Red, 1);где Color.Red цвет ручки, а 1 толщина пера.

Теперь когда  всё на своих полках раскроем мутод  который рисует линию.

g.DrawLine(blackPen, al[numpoint - 2], al[numpoint - 1]);

Результатом этого метода станет лини от точкт al[numpoint - 2] до al[numpoint - 1], где [numpoint - 1] и [numpoint - 2] индексы указывающие на точку в массиве al. Заметим что координаты точек являются целые числа(int).

Почти в  каждой программе для Windows пользователю приходится вводить текст — так  было и будет. Можно установить обработчик событий  обработчики событий KeyDown, KeyUp и KeyPress для получения и отображения на экране данных, вводимых с клавиатуры. Однако во многих простых случаях можно задействовать элемент управления, который обычно называют полем редактирования (edit control), а в .NET Framework — текстовым полем (text box). На практике используются различные текстовые поля: от небольшого однострочного поля ввода до многострочного элемента управления с автоматическим переносом строк, как в программе Notepad (Блокнот).

Простейшее  текстовое поле называется TextBox. Как  видно из показанной ниже иерархии классов, TextBox наследует абстрактному классу TextBoxBase. Еще одним наследником TextBoxBase является RicbTextBox, Элемент управления RicbTextBox обладает большей функциональностью по сравнению с TextBox аналогично тому, как Microsoft WordPad обладает большей функциональностью по сравнению с Notepad. В TextBox (как и в Notepad) можно указать шрифт, но шрифт применяется ко всему документу. В RicbTextBox (как и в WordPad) можно определить различные шрифты и прочее форматирование для различных частей документа.  

 Самое  важное свойство текстовых полей  — Text: именно оно содержит текст,  вводимый в поле пользователем.  Кроме того, можно инициализировать  текст, показываемый в поле, и ограничивать длину текста  

 Зачастую  в диалоговых окнах достаточно  получить находящийся в поле  текст в момент нажатия пользователем  кнопки ОК. Но в некоторых диалоговых  окнах нужно постоянно отслеживать  ввод пользователя. Так, диалоговое окно может разрешать нажимать кнопку ОК, только когда текстовое поле содержит какую-то допустимую информацию. Самое полезное событие текстового поля на самом деле определено в Control.  

Информация о работе Программа вывода текста вдоль кривой линии