игра - Школа программирования Алиса

advertisement
ИНСТИТУТ СИСТЕМ ЭНЕРГЕТИКИ
им. Л.А. Мелентьева СО РАН
Компьютерная школа «Алиса»
XXIII КОНФЕРЕНЦИЯ ПРОГРАММИСТОВ
Сборник материалов
Иркутск, 17 апреля 2008 г.
Иркутск - 2008 г.
УДК 681.142.2
Сборник материалов XXIII конференции программистов школьников и
студентов. – Иркутск: ИСЭМ СО РАН, 2008. – 36 с.
ISBN 978-5-93908-070-5.
Сборник содержит описание программ, представленных на конференцию
программистов в Иркутске и может оказаться интересным и полезным начинающим и опытным программистам, а также преподавателям.
Главный редактор: Сташуль Т.В.
Редакторы: Мокрый И.В., Орехов А.Б., Розинов С.В., Черноусов А.В.
© Институт систем энергетики
им. Л.А. Мелентьева СО РАН, 2009
ISBN 978-5-93908-070-5
2
Содержание
Кочетков И. Анализ графических изображений с целью распознавания текста . 4
Черкасов А. Учебное пособие-тренажер «Меткий стрелок».................................. 7
Хамисов О. Игра «Жизнь» ...................................................................................... 13
Войтенко И. Виртуальный глобус ........................................................................... 17
Бубнов Я. Азбука «Морзе» ....................................................................................... 24
Мордовин Д. Игра «Знаки дорожного движения»................................................. 26
Горнов А. Блоги ......................................................................................................... 30
3
Анализ графических изображений с целью распознавания текста
Кочетков Илья
11 класс, лицей ИГУ, г. Иркутск
Цель работы рассмотреть основные принципы работы нейронных сетей, в
частности нейронную сеть типа персептрон или перцептрон (от англ. «perception» - восприятие) и найти ей наилучшее применение для распознавания графических образов (символов). В конечном итоге требуется создать программу
для распознавания графического текста.
Каждый, кто впервые знакомится с нейронными сетями, задает себе вопрос: что такое нейроинформатика? Ответить на него можно по-разному. Можно сказать, что нейроинформатика – это способ решения всевозможных задач с
помощью искусственных нейронных сетей, реализованных на компьютере [3].
Такой ответ, объясняющий только внутреннюю сущность нейроинформатики,
почти никого не удовлетворяет, даже если подробно рассказывать о нейронных
сетях, задачах и способах их решения. На самом деле требуется еще определить
место нейроинформатики среди других способов решения задач и разобраться,
в чем же истинные преимущества нейронных сетей, если таковые существуют?
Очень часто человеческий мозг бессилен по сравнению с возможностями
компьютера. Нам не дано складывать многозначные числа в уме в сотую долю
секунды, мы не можем предсказать реакцию нашего оппонента в шахматах хотя
бы на 20-м ходе. Человеческий мозг не может даже построить рекурсивное дерево и банально сказать нам, а что нас ждет вечером. Но на данную проблему
можно посмотреть и с другой стороны – есть вещи, которые компьютер делает
намного медленнее человеческого мозга. Распознавание человеческого лица в
толпе, голоса друга по телефону – все это непосильные задачи для компьютера,
потому что он будет решать их
путем сравнения, которое займет
не один день. Человеку же достаточно краем глаза увидеть
знакомое лицо в толпе или
услышать знакомый голос, и он
моментально узнает этого человека или узнает при следующей
встрече, так как его запомнил.
Именно поэтому в своей работе
я обращусь к компьютерным
«аналогам» че-ловеческого мозга – нейронным
Рис.1. Искусственный нейрон
сетям (НС).
4
Во-первых, основу каждой НС составляют относительно простые, в
большинстве случаев – однотипные, элементы (ячейки), имитирующие работу
нейронов мозга. Далее под нейроном будет подразумеваться искусственный
нейрон, то есть ячейка НС. Каждый нейрон характеризуется своим текущим состоянием по аналогии с нервными клетками головного мозга, которые могут
быть возбуждены или заторможены [1]. Он обладает группой синапсов – однонаправленных входных связей, соединенных с выходами других нейронов, а
также имеет аксон – выходную связь данного нейрона, с которой сигнал (возбуждения или торможения) поступает на синапсы следующих нейронов. Общий вид нейрона приведен на Рис. 1.
Одной из первых искусственных сетей, способных к перцепции (восприятию) и формированию реакции на воспринятый стимул, явился PERCEPTRON
Розенблатта (F.Rosenblatt, 1957). Перцептрон (или персептрон) рассматривался
его автором не как конкретное техническое вычислительное устройство, а как
модель работы мозга [2]. Нужно заметить, что после нескольких десятилетий
исследований современные работы по искусственным нейронным сетям редко
преследуют такую цель.
Рис. 2. Элементарный перцептрон Розенблатта.
Простейший классический перцептрон содержит нейроподобные элементы трех типов (Рис. 2), назначение которых в целом соответствует нейронам
рефлекторной нейронной сети. S-элементы формируют сетчатку сенсорных
клеток, принимающих двоичные сигналы от внешнего мира. Далее сигналы поступают в слой ассоциативных или A-элементов (для упрощения изображения
часть связей от входных S-клеток к A-клеткам не показана). Только ассоциативные элементы, представляющие собой формальные нейроны, выполняют
нелинейную обработку информации и имеют изменяемые веса связей. Rэлементы с фиксированными весами формируют сигнал реакции персептрона
на входной стимул [4].
5
Рис. 3. Интерфейс программы
Описание программы
При нажатии кнопки «Найти» (Рис. 3) нам предлагают выбрать рисунок
для распознавания текста (выбираем рисунок формата BMP, так как только он
имеет четкую битовую карту). Кнопка «Загрузить» выведет выбранное изображение на форму. Во время загрузки изображение пропускается через функцию, которая обратит все цвета и позволит битовую матрицу перевести в бинарную (Рис. 4). Знак ‘1’ – пиксель текста, ‘_’ – пиксель фона. В дальнейшем
именно по полученной бинарной матрице мы будем анализировать данный
текст.
а==
Рис. 4. Получение бинарной матрицы и контура символа
6
Процедура «Анализ» нас интересует больше всего. Печатный текст отличается от рукописного тем, что он прерывен, т. е. между двумя символами обязательно будет хотя бы один пиксель фона. Таким образом, каждый символ
можно будет «обойти» (на Рис. 4 показано, как из буквы мы получаем её двоичное представление, а затем её очертания) по одному из восьми возможных
направлений.
Программа, представленная мною, находится на ранней стадии разработки и не предоставляет высокой точности. Однако, вместе с классическим перцептроном, работающим по принципу А или Б, она просто неоценима, так как
показывает масштабность поставленной проблемы и её возможное расширение.
Также в программе рассмотрено обращение цветов, что позволяет решать не
узкую проблему «распознавание белого на черном», а более широкую - «распознавание текста на фоне». Таким образом, мы сможем распознавать красные,
зеленые, синие буквы и т.д. Отдельную ценность представляет собой рассмотренная процедура обхода.
В дальнейшем я планирую охватить не только русский алфавит, но и
спецсимволы, повысить точность считывания и распознавания и подключить
поддержку других форматов для анализа, так как в настоящее время работает
распознавание текста только с холста BMP файла.
Литература
1. Монахова Е. Нейрохирурги - PC Week/RE, № 9, 1995.
2. Уоссермен Ф. Нейрокомпьютерная техника - М.: Мир, 1992.
3. Горбань А. Нейроинформатика и ее приложения.
4. http://www.scorcher.ru/neuro/science/perceptron/mem29.htm
Учебное пособие-тренажер «Меткий стрелок»
Черкасов Антон
Станция юных техников
11 класс, школа 103, г. Железногорск
Введение
Современные образовательные программы всё активнее используют новые методы обучения, в частности, прибегают к помощи интерактивных пособий и тестов, подавляющее большинство из которых представляют собой сухое
научное описание законов и поэтому малоинтересны для учеников. У меня возникло желание создать собственное пособие-тренажёр, которое в простой и
привлекательной форме поможет понять основную суть физических процессов.
Для примера я взял закон движения тел под углом к горизонту под действием
силы тяжести и решил написать программу на новом для меня языке программирования C++ [6].
7
Средства разработки
При создании программы использовались OpenSourse- и Freeware- продукты. В качестве компилятора применялся Microsoft Visual C++ Toolkit 2003, а
в качестве основного редактора — Notepad++. Комплексное применение этих
программных продуктов позволило создать удобную среду разработки, но всё
же уступающую по удобству и функциональности платным аналогам. Для реализации графики использовалась библиотека OpenGL, для поддержки оконного
режима – библиотека-расширение Glut, и библиотека Bass – для подключения
звука. Все эти библиотеки также распространяются бесплатно. Для обработки
графики и звука применялись различные бесплатные утилиты и программы.
Описание программы
При запуске программы пользователь видит пушку, рядом с ней ядра, а
вдалеке – башню, с нанесённой на неё мишенью. По углам экрана располагаются полупрозрачные индикаторы параметров выстрела, а именно: угол наклона
пушки относительно линии горизонта, начальная скорость вылета ядра, значение гравитации и максимально возможная высота полета ядра (Рис. 1). Максимальная высота – вычисляемый параметр, все остальные параметры – изменяемые.
Рис.1.
8
Установив с помощью определённых клавиш желаемые значения параметров, пользователь производит выстрел (Рис. 2). Если он попал в мишень –
раздаётся звук разрушения, и место попадания ядра отмечается красным маркером. Далее производится перезарядка пушки и новый выстрел. Всего можно
сделать 5 выстрелов; контролировать оставшееся число выстрелов позволяют
ядра, расположенные рядом с пушкой – с каждым выстрелом количество ядер
уменьшается. После пятого выстрела на экран выводится статистика попаданий
(Рис. 3). Также в любой момент времени можно посмотреть основные формулы, при помощи которых рассчитывается выстрел, для этого достаточно нажать
определённую клавишу. Положение наблюдателя не является статичным –
пользователь может перемещаться по окружающему пространству при помощи
мыши или клавиатуры.
Рис.2.
9
Графическая среда создана при помощи примитивов OpenGL [2,4] с
наложенными на них текстурами. Текстуры накладываются как с помощью автоматических, встроенных, функций OpenGL, так и с помощью собственной
функции, которая была написана для корректного наложения текстур на поверхности тел вращения. Повороты и перемещения объектов реализуются при
помощи стандартных функций [1,3,5].
Рис 3.
Описание алгоритмов работы
Внутри OpenGL есть собственная трёхмерная система координат, в которых происходит рисование объектов. Адаптировав формулы школьного курса
физики к этой среде координат, удалось рассчитать траекторию полёта ядра.
Изначально были взяты следующие формулы школьного курса [7]:
10
g  x2
y  x  tg 
2 V02  cos 2 
hmax
,
x  V0  t  cos 
V02  sin 2 

2 g
Эти формулы были преобразованы, с учётом особенностей системы координат и системы отсчёта времени, в следующий исходный код:
Ball[i].x = Ball[i].v * cos(a*K) * (-t);
Ball[i].y = sin(a*K) + (-1) * Ball[i].x * sin(a*K) / cos(a*K) - Ball[i].g * Ball[i].x *
Ball[i].x / (2 * Ball[i].v * Ball[i].v * cos(a*K) * cos(a*K)));
t += 0.04;
h = 0.7 + Ball[i].v * Ball[i].v * sin(a*K) * sin(a*K) / (2*Ball[i].g);
В этом коде Ball[i].x и Ball[i].y – соответствующие координаты ядра,
Ball[i].v – скорость ядра в данный момент времени, Ball[i].g – ускорение свободного падения, а переменная t – текущее время в секундах с момента прошлой обрисовки сцены, h – максимальная высота подъёма ядра над землей.
На основе вычисленных координат осуществляются проверки условий
попадания ядра в мишень.
Также пришлось написать собственную функцию наложения текстур на
тела вращения. Функция представляет собой вложенный цикл, в котором поверхность цилиндра разбивается на сегменты, к каждому сегменту строится
нормаль освещения, и задаются текстурные координаты. Затем сегменты складываются в единый цилиндр:
void glMyCylinder (float Radius, float Height, int dx, int dy)
{
float i;
float x, y, z;
float tx, ty;
float xn, yn, zn;
const float PI = 3.14;
const float sh = Height / (float)dy; // Шаг для перемещений по высоте цилиндра.
const float sx = 2*PI / (float)dx;
// Шаг для перемещения по окружности.
const float tsx = 1.0 / (float)dx;
// Текстурный шаг по X.
const float tsy = 1.0 / (float)dy;
// Текстурный шаг по Y.
11
if (Radius <= 0 || Height <= 0 || dx <= 0 || dy<= 0) return; // Обработка нулевых параметров.
for (z = 0, ty = 0; z <= Height; z += sh, ty += tsy) // Проходим по всей высоте цилиндра и рисуем окружности.
{
glBegin(GL_QUAD_STRIP);
for(i = 0, tx = 0; i <= 2*PI+sx; i += sx, tx += tsx) // Рисуем окружности, состоящие из dx частей.
{
x = Radius * cos(i);
y = Radius * sin(i);
xn = (Radius+1) * cos(i); // Направления нормалей.
yn = (Radius+1) * sin(i);
glNormal3f(xn,yn,z); glTexCoord2f(tx, ty); glVertex3f(x,y,z); // Задаем нормали для освещения, текстуру и сами точки.
glNormal3f(xn,yn,z+sh);
glTexCoord2f(tx, ty+tsy);
glVertex3f(x,y,z+sh);
}
glEnd();
}
return;
}
Литература
1. Иванов В.П., Батраков А.С. Трехмерная компьютерная графика /Под ред.
Г.М. Полищука.- М.: Радио и связь, 1995
2. Боресков А.В. Расширения OpenGL.-СПб.: БХВ-Петербург, 2005
3. Пореев В.Н. Компьютерная графика.-СПб.: БХВ-Петербург, 2004
4. Боресков А.В. Графика трехмерной компьютерной игры на основе OpenGL.М.: ДИАЛОГ-МИФИ, 2004
5. Тихомиров Ю.В. Программирование трехмерной графики.-2-е изд.-СПб.:
БХВ-Петербург, 2002
6. Ален И. Голуб. С и С++. Правила программирования. – М.: БИНОМ, 1996
7. Пинский А.А., Кабардин О.Ф. Физика. Учебник для 10 класса - 7-е изд. – М.:
Просвещение, 2002
12
Игра «Жизнь»
Хамисов Олег
Компьютерная школа «Алиса»
9 класс, лицей ИГУ, г. Иркутск
Происхождение
Джон Конвей (Рис.1) заинтересовался проблемой, предложенной в 1940-х годах известным математиком Джоном фон Нейманом, который пытался создать гипотетическую машину, которая может воспроизводить саму себя. Джону фон Нейману удалось создать математическую модель такой машины с очень
сложными правилами. Конвей попытался упростить
идеи предложенные Нейманом, и, в конце концов, ему
удалось создать правила, которые стали правилами игры «Жизнь». Впервые описание этой игры было опубликовано в октябрьском
Рис.1
выпуске 1970 г. журнала «Scientific American» в рубрике «Математические игры» Мартина Гарднера (Martin Gardner) [1].
Правила
Место действия игры — «вселенная» — это размеченная на клетки поверхность, безграничная, ограниченная, или замкнутая. В компьютерных реализациях игры чаще всего используют поверхность тора. Каждая клетка на этой
поверхности может находиться в двух состояниях: быть живой или быть мёртвой. Клетка имеет восемь соседних клеток. Распределение живых клеток в
начале игры называется первым поколением. Каждое следующее поколение
рассчитывается на основе предыдущего по таким правилам:
пустая (мёртвая) клетка ровно с тремя живыми клетками-соседями оживает;
если у живой клетки есть два или три живых соседа, то эта клетка продолжает жить; в противном случае (если соседей меньше двух или больше трёх) клетка умирает (от «одиночества» или от «перенаселённости»).
Игрок не принимает прямого участия в игре, а лишь расставляет «живые»
клетки, которые взаимодействуют между собой согласно правилам уже без его
участия.
Эти простые правила приводят к огромному разнообразию форм, которые
могут возникнуть в игре.
Компьютерная реализация
Простейший алгоритм последовательно просматривает все ячейки решет13
ки и для каждой ячейки подсчитывает соседей, определяя судьбу каждой клетки (не изменится, умрет, родится). Более сложный, но и более быстрый алгоритм составляет списки клеток для просмотра в последующем поколении; клетки, которые не могут измениться, в списки не вносятся.
Фигуры
Вскоре после опубликования правил, было обнаружено несколько интересных шаблонов (вариантов расстановки живых клеток в первом поколении), в
частности: r-пентамино и глайдер (glider).
Некоторые такие фигуры остаются неизменными во всех последующих
поколениях, состояние других периодически повторяется, в некоторых случаях
со смещением всей фигуры. Существует фигура Diehard всего из семи живых
клеток, потомки которой существуют в течение 130 поколений, а затем исчезают.
Конвей первоначально предположил, что никакая начальная комбинация
не может привести к неограниченному размножению и предложил премию в 50
долларов тому, кто докажет или опровергнет эту гипотезу [2]. Приз был получен группой из Массачусетского технологического института, придумавшей
неподвижную повторяющуюся фигуру, которая периодически создавала движущиеся «глайдеры». Таким образом, количество живых клеток могло расти
неограниченно. Затем были найдены движущиеся фигуры, оставляющие за собой «мусор» из других фигур.
К настоящему времени более-менее сложилась следующая классификация фигур:
Устойчивые фигуры: фигуры, которые остаются неизменными;
Периодические фигуры: фигуры, у которых состояние повторяется через
некоторое число поколений;
Двигающиеся фигуры: фигуры, у которых состояние повторяется, но с
некоторым смещением;
Ружья: фигуры, у которых состояние повторяется, но дополнительно появляется двигающаяся фигура;
Паровозы: двигающиеся фигуры, которые оставляют за собой следы в
виде устойчивых или периодических фигур;
Пожиратели: устойчивые фигуры, которые могут пережить столкновения с некоторыми двигающимися фигурами.
Райский сад
Райским садом называется такое расположение клеток, у которого не
может быть предыдущего поколения. Практически для любой игры, состояние
клеток в которой определяется несколькими соседями на предыдущем шаге,
можно доказать существование садов Эдема, но построить конкретную фигуру
гораздо сложнее.
14
Я представил четыре программы, взяв за основу игру описанную выше:
1. Двухмерная параметризованная жизнь;
2. Одномерная жизнь;
3. Трехмерная кубическая жизнь;
4. Трехмерная пирамидальная жизнь.
Двухмерная параметризованная жизнь.
Пространством жизни является тор (Рис.2). Разница между игрой придуманной Д. Конвеем и этой заключается в том, что после гибели или рождения
клетка какое-то время не изменяет своего состояния.
Рис. 2
Одномерная жизнь.
Пространство жизни – кольцо, которое разбито на клетки, стоящие в один
ряд. Клетка может быть пустой или живой. Живые клетки бывают трех видов.
Обозначим состояние пустой клетки за 0, а состояния живых клеток за 1,2
и 3. Тогда законы жизни будут выглядеть следующим образом:
9 8 7 6 5 4 3 2 1 0 - сумма состояний выбранной клетки и двух соседних
| | | | | | | | | |
3 3 1 1 1 0 0 3 2 0 - состояние выбранной клетки в следующем поколении.
Пространство жизни
История жизни.
15
Трехмерная кубическая жизнь.
Пространство жизни – трехмерное пространство, разбитое на кубы. Каждая клетка (куб) может быть в двух состояниях: живая и пустая.
Клетка погибает, если вокруг нее меньше 6 или больше 9 живых клеток.
Клетка оживает, если вокруг нее от 6 до 9 живых клеток.
Живая клетка
Трехмерная пирамидальная жизнь.
Место действия – трехмерное пространство, разбитое на трехгранные
призмы. Каждая клетка (призма) может быть в двух состояниях: живая и пустая. Законы жизни задаются пользователем и могут меняться во время работы
программы.
Живая клетка
В данной программе рассматривались четыре варианта игры. В двух из
них рассматривалось существование жизни в изменяющихся условиях, а в одной – существование разных форм жизни. Однако из всех программ самой
наглядной оказалась двухмерная жизнь, так как в трехмерных вариантах трудно
представить всю картину сразу, а одномерный вариант является слишком
упрощенным.
Предполагается продолжить работу для поиска возможного применения
этих программ.
Литература
1. М. Гарднер. Математические игры. Журнал «Scientific American», № 10,
1970
2. Научно-популярное издание Современный компьютер Сборник научнопопулярных статей. /Перевод с английского под редакцией канд. физ.-мат. наук
М. В. Курочкина. /Предисловие д-ра физ.-мат. наук чл.-корр. АН СССР Л. Н.
Королева – с.145-148
16
Виртуальный глобус
Войтенко Игорь,
Станция юных техников
10 класс, школа 176, г. Железногорск
Введение
В процессе школьного обучения встречается очень мало образовательных
компьютерных программ, которые бы совмещали в себе как легкость в освоении и использовании, так и нетрудные способы пополнения информации. Существующие продукты обычно содержат в себе жестко запрограммированные
данные, которые учитель не может менять в зависимости от своих потребностей и планов уроков. Но и программы с возможностью обновления информации также зачастую неудобны, так как они либо англоязычны, либо для получения информации требуют хорошего выделенного Интернет-канала.
Поэтому цель моей работы состоит в создании альтернативы существующим программам, но с упором на доступность и простоту использования в
школах.
Чтобы достичь данной цели, нужно было изучить язык C++ , библиотеку
OpenGL и дополнения к ней.
Процесс создания программы
Использованное ПО
При создании программы применялось бесплатное программное обеспечение. Компилятор Microsoft VisualC++ Toolkit 2003 [3], редактор Notepad++.
Для реализации графики использовалась библиотека OpenGL, для поддержки
оконного режима – библиотека Glut. Для поддержки звука была использована
библиотека Bass.
Графика
В программе используются различные графические эффекты, которые
делают её привлекательной и удобной в использовании. Библиотека OpenGL
имеет множество функций для работы с графикой, и, как следствие, работа
программиста становится гораздо легче и продуктивнее, так как больше
времени уделяется более важным моментам, а не написанию собственных
функций для рисования того или иного графического примитива (треугольник,
точка и т.д.) [2,4]. Еще один плюс используемой библиотеки в том, что
упрощается решение таких задач, как создание реалистичного освещения,
прозрачность, наложение текстуры или отражение окружающей обстановки.
17
В программе используется технология Bump Mapping (имитация
рельефности на абсолютно плоской текстуре).
Рис.1
Звук
Для вывода звука используется бесплатная библиотека Bass. Главные
причины использования именно этой библиотеки в том, что она бесплатна и
удобна. Кроме того, к ней прилагается документация, в которой можно найти
ответы на все возникающие вопросы.
Все операции в программе сопровождаются определенным звуком.
Например, выбор страны.
18
Управление
Управление в программе осуществляется с помощью мыши и
клавиатуры. В программе существует два режима: свободный и рабочий
(Рис.1). Переключение между ними осуществляется при помощи клавиатуры.
Чтобы быстро найти нужную страну на глобусе достаточно просто перемещать
курсор по поверхности. На панели появится флаг страны и название (Рис.2).
При нажатии левой кнопки мыши появится окно с информацией о стране
(Рис.3).
Рис.2
19
Рис.3
Формат баз
Чтобы сделать возможным свободное редактирование всей информации,
используемой в программе, нужно было определенным образом организовать
ее хранение. Поэтому в процессе написания программы был разработан
собственный формат базы данных.
Формат баз достаточно простой. Поэтому редактировать их может любой
пользователь даже без определенных знаний в области программирования.
Базы представляют собой два текстовых файла с расширением txt. В
одном файле хранятся координаты стран на глобусе, в другом – описание стран
20
и путь к каждой текстуре флага. Редактируются базы с помощью текстового
редактора «Блокнот».
Формат файла с описанием стран (text.txt). После символа «0» (через
пробел) находится номер страны. После символа «1» находится название
страны прописными буквами. После символа «&» располагается путь к
текстуре с флагом. Цифра «2» означает, что с новой строчки идет информация о
стране (информация вводится одной строкой без перевода на новую строку).
Цифра «3» - конец информации, она ставится на новой строчке.
Формат файла с координатами стран на глобусе (coords.txt). Символ
«~» и следующее за ним (без пробела) название страны это комментарий. За
символом «#» идет номер страны. Символ «*» означает, что с новой строки (в
столбик) начинаются координаты (x y). Символ «&» является концом описания
координат.
Добавление новой страны
Чтобы добавить в базу новую страну, нужно выполнить следующие
действия: поместить флаг новой страны в папку flags, отредактировать
текстовый файл text.txt, используя в качестве примера уже занесенные в базу
страны (в целом изменяются только номер страны, путь к текстуре и
информация). После этого нужно запустить утилиту для нахождения координат
стран на глобусе. Полученные координаты x, y занести в текстовый файл
coords.txt.
Проблемы, возникшие при создании программы
При написании данной программы возникли различные проблемы.
Например, проблема с нахождением координат на сфере. Несмотря на то, что
OpenGL и библиотека Glut имеют функцию рисования сферы, использовать ее
для данной ситуации не представлялось возможным. Нарисовав сферу с
помощью стандартной функции, единственные координаты, которые нам будут
известны – это координаты центра. Но нам нужно знать координаты ячеек, на
которые поделена поверхность сферы. Возникла необходимость поиска
функции рисования сферы. Такая функция была найдена и переписана для
использования в данной программе [1,5].
//-----------------------------------------------------------------------------------// Вывод на экран сферы.
// Параметры:
//
CX, CY, CZ - координаты центра сферы.
//
Radius - радиус сферы.
//
n - количество ячеек, на которые разбивается сфера
//
nx, ny - координаты ячейки, которую нужно выделить цветом.
//-----------------------------------------------------------------------------------void CreateSphere(float CX, float CY, float CZ, float Radius,int n, int nx, int ny)
21
{
// Переменные для прохода по высоте и ширине сферы.
register int i, j;
float theta1, theta2, theta3,
px, py, pz;
// Для запоминания координат ячейки, которую нужно выделить.
float coord[4][3];
if (Radius < 0) Radius = -Radius;
// Если радиус меньше нуля, то
инвертируем значение.
If (n < 0) n = -n;
// Если количество ячеек меньше нуля, то также
инвертируем значение.
/*Если задано слишком маленькое количество ячеек сферы или нулевой
радиус, тогда рисуем точку и выходим из функции*/
if (n < 4 || !Radius)
{
glBegin(GL_POINTS);
glVertex3f(CX, CY, CZ);
glEnd();
return;
}
for( j= 0; j < n / 2; j++ )
// Цикл по ячейкам высоты.
{
// Находим углы расположения точек первой ячейки в j и j+1 по высоте
сферы.
theta1 = 2 * j * M_PI / n - M_PI_2;
theta2 = 2 * (j+1) * M_PI / n - M_PI_2;
glBegin(GL_QUAD_STRIP);
for( i = 0; i <= n; i++ )
{
theta3 = 2 * i * M_PI / n;
// Находим угол точки i по ширине
сферы.
px = CX + Radius * cos (theta2) * cos (theta3);
py = CY + Radius * sin (theta2);
pz = CZ + Radius * cos (theta2) * sin (theta3);
glMultiTexCoord2fARB (GL_TEXTURE0_ARB, 1 – I / (float)n, 2 * (j+1) /
(float)n);
glMultiTexCoord2fARB (GL_TEXTURE1_ARB, 1 – I / (float)n, 2 * (j+1) /
(float)n);
glVertex3f(px, py, pz);
// Рисуем нижнюю точку.
// Запоминаем координаты выделенной ячейки.
if ((j==nx && i==ny)) { coord[0][0] = px; coord[0][1] = py; coord[0][2] = pz; }
if ((j==nx && i==ny+1)) { coord[1][0] = px; coord[1][1] = py; coord[1][2] = pz; }
22
px = CX + Radius * cos (theta1) * cos (theta3);
py = CY + Radius * sin (theta1);
pz = CZ + Radius * cos (theta1) * sin (theta3);
// Запоминаем координаты выделенной ячейки.
if ((j==nx && i==ny)) { coord[3][0] = px; coord[3][1] = py; coord[3][2] = pz; }
if ((j==nx && i==ny+1)) { coord[2][0] = px; coord[2][1] = py; coord[2][2] = pz; }
if (j==nx && i==ny) glColor3f(1,0.5,0.5); else glColor3f(1,1,1);
glMultiTexCoord2fARB (GL_TEXTURE0_ARB, 1-i/(float)n, 2*j/(float)n);
glMultiTexCoord2fARB (GL_TEXTURE1_ARB, 1-i/(float)n, 2*j/(float)n);
glVertex3f(px, py, pz);
// Рисуем верхнюю точку.
}
glEnd();
}
}
Заключение
Поставленные задачи выполнены полностью. Создан «движок» для
взаимодействия с глобусом. Удалось написать простую в использовании
программу, имитирующую глобус земли, базы легко редактируются без
перекомпиляции программы. В процессе создания была изучена библиотека
OpenGL и дополнения к ней. Данную программу можно использовать в
качестве учебного пособия.
Предполагается продолжить работу для увеличения детализации карты
поверхности Земли. Также планируется усовершенствовать утилиту для
нахождения координат стран на поверхности глобуса и внесения некоторых
других изменений.
Литература
1. Тихомиров Ю.В. Программирование трехмерной графики.-2 изд. -СПб.:
БХВ-Петербург, 2002
2. Эйнджел Эдвард. Интерактивная компьютерная графика. Вводный курс
на базе OpenGL, 2 изд.: Пер. с англ. – М.: Издательский дом «Вильямс»,
2001
3. Ален И. Голуб. С и С++. Правила программирования. – М.: БИНОМ, 1996
4. Боресков А.В. Расширения OpenGL.-СПб.:БХВ-Петербург, 2005
5. Пореев В.Н. Компьютерная графика.-СПб.:БХВ-Петербург,2004
23
Азбука «Морзе»
Бубнов Яков
Компьютерная школа «Алиса»
8 класс, лицей ИГУ, г. Иркутск
Введение
Поиски надежных способов передачи информации своими корнями уходят в далекое прошлое. Шифрование текстов – это одно из самых интересных
занятий человечества. Первые зашифрованные сообщения использовались еще
в Древнем Египте.
Азбука Морзе, код Морзе, «морзянка» — способ кодирования букв алфавита, цифр, знаков препинания и других символов при помощи длинных и коротких сигналов, так называемых «тире» и «точек». Азбука Морзе — неравномерный телеграфный код, где каждая буква и знак представлены определенной
комбинацией коротких элементарных посылок электрического тока (точек) и
элементарных посылок утроенной продолжительности (тире). Кодируются
также паузы, разделяющие буквы. За единицу времени принимается длительность одной точки. Длительность тире равна трём точкам. Пауза между знаками
в букве — одна точка, между буквами в слове — 3 точки, между словами — 7
точек. В современной телеграфии этот код вытеснен равномерным телеграфным кодом.
Азбука Морзе используется до сих пор, например в штрих-кодах. Ее также используют на кораблях радисты-любители.
История создания азбуки Морзе
Самюэл Финли Бриз Морзе родился 27.04.1791 года в семье проповедника Джедида Морзе в американском городе Чарльзтаун, что в штате Массачусетс. К 1815 году он был признанным лидером и кумиром молодых американских художников.
В начале 1832 г. Морзе стал свидетелем первых опытов Шиллинга. «Извлечение искр из магнита» казалось непосвященным чудом. Увиденный опыт
натолкнул Самюэля на мысль о создании системы передачи сигналов по проводам, с использованием сочетаний передачи «искр». Эта идея захватила его, и в
сентябре 1837 года он продемонстрировал свое
творение. Сигнал был послан по проволоке длиной 1700 футов.
Американский промышленник Стив Вейл
обратил внимание на изобретение Морзе и согласился пожертвовать 2000 долларов, а также
предоставить помещение для дальнейших опытов
при одном условии — Морзе берет в помощники
Рис.1
его сына Альфреда. Самюэль согласился. Первое
24
сообщение, текст которого гласил: «Чудны дела твои, Господи!» было послано
27 мая 1844 года. Для передачи посылок использовался ключ (Рис.1), изобретенный российским ученым Б.С. Якоби, а для приема — электромагнит, якорь
которого управлял перемещением по бумаге чернильного пера. Работая над
дальнейшим совершенствованием своего телеграфного аппарата, С. Морзе
изобрел и код — телеграфную азбуку. Надо заметить, что исходная таблица
«кода Морзе» разительно отличалась от тех кодов, что сегодня звучат на любительских диапазонах. В ней, во-первых, использовались посылки трех разных
длительностей («точка», «тире» и «длинное тире» — в 4 раза длиннее «точки»).
Во-вторых, некоторые символы имели паузы внутри своих кодов.
Современный вариант международного кода Морзе (International Morse)
появился совсем недавно — в 1939 году, когда была проведена последняя корректировка, коснувшаяся в основном знаков препинания. Звучит еще невероятнее, но факт — первоначальный вариант кода Морзе кое-где использовался на
железных дорогах до середины 60-х годов XX века.
Телеграф и радиотелеграф первоначально использовали азбуку Морзе;
позже стали применяться код Бодо и ASCII, которые более удобны для автоматизации.
Впрочем, сейчас и для азбуки Морзе есть средства автоматической генерации и распознавания. Для передачи русских букв использовались коды сходных латинских букв; этот способ соответствия алфавитов позже перешел в
МТК-2, а потом в КОИ-7 и КОИ-8 (однако, в азбуке Морзе букве Q соответствует Щ, а в МТК и КОИ — Я). В 2004 году Международный союз электросвязи (МСЭ) ввёл в азбуку Морзе код символа @ для удобства передачи адресов электронной почты [1].
Цель работы:
Используя язык программирования «Free Pascal», написать программу,
которая обучает азбуке Морзе, проверяет знание азбуки, выдает оценку, сообщения об ошибках, и преобразует текст с человеческого языка на «морзянку».
На практике вместо заучивания количества точек и тире и их последовательности запоминают так называемый «напев» (мнемоническую словесную
форму), соответствующий каждому знаку кода Морзе. При этом слоги, в состав
которых входят гласные а, о, ы, соответствуют тире, а все остальные слоги и
слог ай — точке. Следовательно, когда вы слышите напев «Фи-ли-мон-чик», то
это означает передачу буквы «Ф».
Возможности программы
Моя программа состоит из трех блоков: обучение, тестирование, преобразование текста в «морзянку».
Во время обучения программа выдает азбуку Морзе, с соответствующими
буквами и напевами.
25
Во время тестирования программа предлагает случайную букву, а человек должен ввести ее код. В результате опроса она выдает оценку и сообщения
об ошибках, хранящихся в текстовом файле.
В блоке преобразования текста программа переводит строку на «морзянку».
Заключение
Современные лицензии на работу в эфире позволяют использовать некоторые любительские диапазоны и без знания телеграфа, однако, такие радиолюбители теряют значительную часть потрясающих ощущений, которые дарит
нам мир Ham Radio. Как говорил известный полярник-радиолюбитель Эрнст
Теодорович Кренкель (RAEM): «Радиолюбитель не знающий телеграфа - радиоинвалид...»
Поскольку наше хобби весьма многогранно, то среди радиолюбителей
встречаются и убежденные телеграфисты (CW ONLY) и противники этого вида
излучения. Я не хочу вам ничего навязывать, а просто предлагаю попробовать
все же изучить телеграф, а затем уже решать: пользоваться вам им или нет, тем
более, что минимальные требования по приему CW необходимы для получения
радиолюбительской лицензии 1-3 категории.
Литература
1. http://www.wikipedia.org
Игра «Знаки дорожного движения»
Мордовин Дмитрий
Станция юных техников
8 класс, школа 101, г. Железногорск
Введение
Знаки дорожного движения, на первый взгляд, самые простые и незаурядные составляющие каждой дороги часто вводят в заблуждение неопытных
водителей и детей. Это происходит из-за банального незнания самих знаков, а
зачастую из-за схожести тех или иных знаков дорожного движения между собой. Иногда водители пренебрегают знаками дорожного движения, что впоследствии ведёт к неизбежной аварии, а неправильное толкование знаков дорожного движения – одно из звеньев в цепи причин многих аварий; если одно
из звеньев «убрать», то аварии можно избежать. И тогда количество аварий
уменьшится.
Существующие учебно-тренировочные программы, используемые для
проверки знаний в автошколах предполагают, что тестируемый хорошо знает
знаки. Данная программа позволяет освоить знаки в игровой форме.
26
Были поставлены следующие задачи в среде программирования Visual
Basic [1,2]:
1. Написать программу для упрощённого (в форме игры) ознакомления и
дальнейшего заучивания знаков дорожного движения;
2. Создать понятный и красивый интерфейс игры.
Алгоритмы программы:
 Алгоритм загрузки входной информации. Содержимое входного
файла загружается в 3 массива (массив вопросов, массив правильных ответов и массив неправильных ответов). Изображения знаков
загружаются в объект «список картинок»;
 Алгоритм генерации вопроса. Очередной вопрос и набор знаков
выбираются из соответствующих массивов случайным образом. В
случае повторения вопроса каждый раз генерируется последовательность из тех же знаков, но в другом порядке;
 Алгоритм выбора знака. Если знак выбран верно, то игроку начисляется 100 очков, за неправильный выбор очки не начисляются.
Дополнительно при неправильном выборе подается звуковой сигнал.
 Алгоритм завершения тестирования. По окончании времени определяется, попадает ли игрок в таблицу рекордов, если да, то у него
запрашивается имя. Выводится таблица рекордов, независимо от
набранных очков.
 Алгоритмы в сетевой игре:
o Алгоритм генерации вопросов в сетевой игре. Для равных
условий клиента и сервера они отвечают на одни и те же вопросы. Генерация списка вопросов происходит на сервере,
после чего передается клиенту.
o Алгоритм обмена данными между Клиентом и Сервером.
o Алгоритм выбора победителя. По окончании времени, клиент
и сервер передают друг другу набранные очки, после чего они
сравниваются, и на экране каждого из них выводится одно из
следующих сообщений: проиграл игрок, выиграл или «ничья».
Исходные данные:
 Файл с вопросами, номерами одного правильного ответа и четыре
неправильных для каждого вопроса. Пример входного файла:
☼Двустороннее движение☼10 11 13 14 16
☼Пешеходный переход☼01 15 32 33 34
☼Дети☼08 01 19 05 09
27
☼Пересечение с велосипедной дорожкой☼09 10 11 12 14
☼Дорожные работы☼19 18 20 32 33
☼Перегон скота☼37 34 38 39 44
 219 изображений знаков дорожного движения.
Описание форм программы:
После запуска программы перед вами появляется стартовое окно (Рис.1).
Вы можете выбрать одну из нескольких кнопок:
 «Новая игра»; загружается главная форма игры (Рис. 2);
 «Сетевая игра»; появляется меню выбора типа игры (Рис. 3) КлиентСервер:
o «Создать сетевую игру»; происходит создание сервера игры и
ожидание подключения клиента;
o «Подключение к сетевой игре»; нужно ввести IP-адрес сервера
для подключения к нему, затем начинается игра;
 «Таблица рекордов»; появляется форма таблицы рекордов;
 «Помощь»; выводится форма, на которой можно получить помощь по
использованию программы;
 «Выход»; кнопка завершающая работу программы.
Рис.1. Стартовое окно
28
Рис. 2. Главная форма игры
Рис. 3. Выбор типа сетевой игры
29
Выводы:
Данная работа позволяет наглядно представить весь спектр дорожных
знаков и создает правильное представление об их значении. Данную программу
можно использовать при подготовке водителей.
Литература
1. Стивенс Р. Тестирование программ на Visual Basic: Пер.с англ. – М.: ДМК
Пресс, 2001. – 384 с., ил. (Серия «Для программистов»).
2. М. МакКелви, Р. Мартинсон, Дж. Веб, Б. Ризельман Visual Basic®5: пер. с
англ. – СПб.: BHV – Санкт-Петербург, 1998.—976 с., ил.
Блоги
Горнов Александр
10 класс, лицей 36, г. Иркутск
Введение
Блог (англ. blog, от web log, «сетевой журнал или дневник событий») —
это веб-сайт, основное содержимое которого — регулярно добавляемые записи,
изображения или файлы мультимедиа. Для блогов характерны недлинные записи временной значимости. Бло́ггерами называют людей, ведущих блог. Совокупность всех блогов сети Интернет принято называть блогосферой.
По авторскому составу блоги могут быть личными, групповыми (корпоративными, клубными и т.д.) или общественными (открытыми), по содержанию
— тематическими или общими. Отличия блога от традиционного дневника
обусловливаются средой, то есть его «сетёвостью»: блоги обычно публичны
или доступны хотя бы определённому множеству пользователей Сети. Это
определяет и отличия блоговых записей от дневниковых: первые обычно предполагают сторонних читателей, которые могут вступить в публичную полемику
с автором (в отзывах к блог-записи или своих блогах). Всего в мире, по данным
информационной системы Technorati.com на сентябрь 2007 г., существует около 111,2 миллионов блогов, то есть на шестьдесят пять жителей Земли приходится один электронный дневник. Для блогов характерна возможность публикации отзывов (комментариев, т.н. «комментов») посетителями. Это превращает блоги в среду сетевого общения, имеющую ряд преимуществ перед электронной почтой, группами новостей, веб-форумами и чатами [1].
В моей работе поставлены следующие задачи: создание собственного
блога, освоение технологии создания блогов, создание системы из нескольких
блогов; тестирование работоспособности блогов, анализ конструкционных
особенностей архитектуры блогов.
30
Техническая основа
Технические возможности и ограничения блогов целиком определяются
общими технологиями сети Интернет. Ведение блога предполагает наличие
программного обеспечения (ПО), позволяющего обычному пользователю добавлять и изменять записи и публиковать их во Всемирной паутине. Такое ПО
называется движком блога и считается частным видом систем управления содержанием.
Помимо основополагающей функции блога — добавления автором записей и вывода их по порядку — стандартными для блоговых движков в настоящее время являются функции создания автоматически обрабатываемых списков
обновлений RSS и Atom, форматирования текста (в формате HTML или иных) и
вставки мультимедиа в записи и, как уже упоминалось, функция добавления
читательских отзывов.
Движок блога может быть на личном веб-пространстве автора (в этом
случае он называется stand alone блог) или на мощностях одной из служб,
предоставляющих место специально для блогов, - блог-платформ. Блоги могут
быть связаны ссылками по технологии «трэкбэк», на блог-платформах часто создаются свои внутренние механизмы, способствующие умножению связей и
образованию социальных сетей среди блоггеров. В качестве примера можно
назвать механизм «друзей» (френдов) на популярнейшей в «Рунете» блогплатформе «Живой журнал». Более 75% всех русскоязычных дневников находятся на пяти хостингах: LiveInternet.ru, LiveJournal.ru, Blogs@mail.ru, Diary.ru,
LovePlanet.ru.
Каждый день в Рунете появляется около 7 тысяч новых блогов. Быстрее
всех растет LiveInternet — каждую минуту там появляется по два новых блога.
Blogs@mail.ru также обогнал LiveJournal по темпам роста и находится на втором месте. К числу самых популярных массовых блог-платформ относятся
российские: Liveinternet, Diary.ru, Блоги@Mail.Ru и т.д. [2]; в ближнем зарубежье: ByJournal, blogs.cetki.com (Белоруссия), Messages.com.ua (Украина);
иностранные: MySpace, Facebook, Livejournal, Blogger, Typepad, Windows
Live Spaces, Netlog. Примерами движков для блогов можно назвать WordPress,
Joomla, Drupal и т.д. [3].
История блогов
По версии газеты Washington Post Profile, первым блогом считают страницу Тима Бернерса-Ли, где он, начиная с 1992 года публиковал новости. Широкое распространение блогов началось с 1996 года. В августе 1999 года компьютерная компания Pyra Labs из Сан-Франциско открыла сайт Blogger – это
была первая бесплатная блоговая служба. Впоследствии Blogger был выкуплен
компанией Google. Компания Apple, в конце 2004 года подавшая в суд на блоггеров, которые рассказали об их новых товарах ещё до того, как о них официально объявила компания, и потребовавшая открыть источник утечки инфор31
мации, спустя два года судебный процесс проиграла. В 2006 году было вынесено решение суда о том, что блоггеры обладают теми же правами по неразглашению источников информации, как и журналисты. С ростом популярности
блога как нового способа коммуникаций появляются конкурсы на наилучший
блог в той или иной категории. С 2004 года международный конкурс на лучший
блог проводит интернет-подразделение немецкой телерадиокомпании «Немецкая волна». Конкурс «Лучшие из блогов» организован среди блогов, написанных на семи языках: английском, арабском, испанском, китайском, немецком,
португальском и русском. С конца 2006 года стали набирать популярность
SMO (social media optimization) и SMM (social media marketing, маркетинг в социальных сетях), использующихся для продвижения сайтов и блогов в блогосфере и социальных средствах массмедиа, таких как форумы, рассылки, ICQ,
сайты digg-типа, социальные закладки и любые другие коммуникационные среды с профилями пользователей. SMO используется для подготовки сайта или
блога для более эффективного нахождения его пользователями.
По данным Яндекса, в «Рунете» существует около 3,1 миллиона блогов.
За прошедший год число русскоязычных интернет-дневников выросло в 2,6 раза. На апрель 2007 г. русскоязычная блогосфера составляет около 3% от мировой. Эта доля больше, чем доля российских пользователей среди всех пользователей Интернета (около 2%). Если в первой половине прошедшего года (сентябрь 2006 — апрель 2007) русскоязычная блогосфера увеличивалась существенно быстрее мировой, то во второй половине ее рост несколько замедлился
и практически сравнялся с ростом мировой блогосферы. Сейчас блогов на русском языке больше, чем, например, на французском, немецком или португальском, но меньше, чем на испанском, итальянском, китайском, английском или
японском.
Разновидности блогов
Блоги классифицируются по автору или авторам. Личный (авторский,
частный) блог - ведётся одним лицом (как правило его владельцем), "призрачный" блог ведётся от имени чужого лица, неустановленной персоны, коллективный блог ведётся группой лиц по правилам, определяемым владельцем,
корпоративный блог ведётся сотрудниками одной организации.
Другим способом классификации является вид мультимедиа: текстовый
блог – блог, основным содержанием которого являются тексты, фотоблог –
блог, основное содержание которого составляют фотографии, музыкальный
блог – блог, основное содержание которого составляет музыка, «подкаст»,
«блогкастинг» - блог, основное содержание которого надиктовывается и выкладывается в виде MP3-файлов, видеоблог – блог, в основном состоящий из
видеофайлов.
Еще один способ классификации опирается на особенности содержания
(«контента»): контентный блог – блог, публикующий первичный авторский
32
контент, мониторинговый (ссылочный) блог – блог, основным контентом которого являются откомментированные ссылки на другие сайты, цитатный блог –
блог, основным контентом которого являются цитаты из других блогов, тамблелог, сплог – «спам-блог».
Известен также и способ классификации по технической основе: Stand
alone блог – блог на отдельном хостинге и движке; блог на блог-платформе –
блог, ведущийся на мощностях блог-службы (Livejournal, Liveinternet и проч.),
моблог – мобильный веблог, содержащий контент, размещаемый в вебе с мобильных или портативных устройств [1].
Реализация.
В своей работе я создал систему из трех блоговых движков: WordPress,
Interra и Drupal. Примеры моих блогов приведены на рисунках 1-3.
Рис. 1. Блог WordPress.
33
Рис. 2. Блог Interra.
Рис. 3. Блог Drupal.
34
Я установил эти три системы на эмулятор сервера Denwer, все три системы написаны на языке Web программирования PHP. Я использовал несколько
из самых популярных CMS движков, из-за их отличий от других: Interra является очень быстрым движком, у системы Drupal множество гибких настроек, а
WordPress очень прост в инсталляции.
Заключение
Блоги (движки блогов) можно использовать как маленькие новостные
сайты. Блоговые системы очень просты в управлении. Создать блог «с нуля»
очень просто, существует огромное количество движков блогов на русском
языке, техника создания доступна пользователю со средним знанием компьютера.
Литература
1. В. Волохонский. Психологические механизмы и основания классификации
блогов. http://volokhonsky.ru/internet/volokhonsky.pdf
2. Исследование русской блогосферы за осень 2007 года.
http://download.yandex.ru/company/yandex_on_blogosphere_autumn_2007.pdf
3. Wikipedia. http://ru.wikipedia.org/wiki/Блог
35
XXIII конференция программистов.
Сборник материалов
Ответственный за выпуск: Сташуль Т.В.
Утверждено к печати Институтом систем энергетики им. Л.А. Мелентьева СО РАН
Подписано в печать _________Формат 60х84 1/16 Уч. изд. л. 2,0. Тираж 50 экз.
Заказ № ____.
Отпечатано полиграфическим участком ИСЭМ СО РАН
664033, г. Иркутск, ул. Лермонтова 130
36
Download