ТехСтоп, Екатеринбург, Россия - технологии для работы и развлечений.

Круги на экране компьютера - программирование для начинающих.

Основы программирования для начинающих.

Для чего люди начинают изучать программирование?
- Не для того, чтобы написать текст, который можно написать в блокноте ...
- Не для того, чтобы нарисовать круг или линию, которую можно нарисовать в графическом редакторе MS Paint ...
- А для того, чтобы средствами программирования интерактивно нарисовать графический круг на текстовом полотне ...
- Для того, чтобы используя алгоритмы последовательности действий автоматизировать решения своих задач или достижение цели ...

Нарисовать графический круг на текстовом полотне - это я конечно утрированно сказал ... Искусственное представление, что MS Notepad для текста, а MS Paint для графики - придумано только для удобства пользователей ... Для самого компьютера и программ - экран компьютера всего лишь набор лампочек / пикселей, которые можно зажигать и гасить в определенном порядке чтобы получать различные изображения, в том числе и букв ... Сколько пикселей на экране обычного компьютера? Разрешение экрана монитора ПК обычно не менее 1280х800 для ноутбука, и соответствует 1024000 пикселей / или 1 мегапиксель ...
- Можно зажечь все лампочки / пикселя - и экран будет белый ...
- Можно потушить все лампочки / пикселя - и экран будет черный ...
- Можно использовать смешивание красок / цветов и получать все цвета радуги и более ...

Цвет в памяти компьютера, как это работает? Кодирование цвета.

Что такое RGB ? Физиология восприятия цвета сетчаткой человеческого глаза, когда смешивание трех основных цветов в сочетании позволяет получить все остальные различные цвета и оттенки, определяет то, как мы различаем цвета ...

- В компьютере информация хранится в ячейках памяти или регистрах ... Отличие регистров сдвига от обычных статичных ячеек памяти (оперативной памяти или жесткого диска) в том, что ячейки памяти статические, с уникальным адресом в пространстве всей памяти, хотя и перезаписываемые ... Память регистров сдвига динамическая, похожа на работу конвейера, а скорость движения конвейера зависит от тактовых импульсов главного процессора, синхронизирующих работу всего компьютера в целом ... Суть работы памяти регистров сдвига в том, что если записать код числа 1 в регистр Ax и записать код числа 2 в регистр Bx - и выполнить команду сложения - то внутри регистров цифровые коды данных, согласно алгоритму команды сложения, сдвинутся таким образом, что результат = код числа 3 - будет, например в регистре Cx, откуда его можно программно прочитать и передать на дальнейшую обработку с помощью интерфейсов ввода / вывода главного процессора ... Условное различие памяти касается технических реализаций и методов программного доступа к ней, но, для первичных знаний, достаточно представлять, как информация хранится в ячейке памяти ...

- В компьютере используется базовая двоичная система счисления, на основе 1 и 0 ; ячейка памяти занята / свободна ; есть сигнал / нет сигнала ...

- Ускорение работы компьютера привело к разработке блоков ячеек памяти / разрядов, позволяющих за один рабочий такт обработать больше данных и ускорить выполнение расчетов / программы ... 4, 8, 16, 32, 64 разряда и возможно более / не интересовался ...

- В компьютере минимально адресуемой единицей памяти является 8-битный байт двоичных значений, которые удобно записывать двумя шестнадцатеричными цифрами.
4 бита 1111 от 0 до 15 в десятичной системе дают 16 значений, или F (0123456789ABCDEF) в шестнадцатеричной системе ...
8 бит байта, как различные комбинации 4 + 4 дают 16 вариантов * 16 вариантов = 256 значений (от 0 до 255 в десятичной системе), или FF в шестнадцатеричной системе ...
И десятичная, и шестнадцатеричная шкала широко применяются для указывания интервалов от 0% до 100% в различных компьютерных применениях : яркость лампочки, света или пикселя, громкость звука, обороты моторчика или руление влево / прямо / вправо ... То, есть в любых применениях, где требуется плавная регулировка от минимума к максимуму, в том числе и для определения цвета по разности основных цветов RGB ...

Обозначение основных цветов в различных представлениях.

Основные цвета RGB / КЗС :
R = Red / Красный ...
G = Green / Зеленый ...
B = Blue / Синий ...
Представляя интенсивность / насыщенность цветов RGB в десятичном диапазоне (0 - 255) можно получить базовые / широкораспространенные цвета из палитры всех красок, в виде кода для компьютера (согласно правилу радуги - Каждый Охотник Желает Знать Где Сидит Фазан ; начиная с белого и заканчивая черным цветом) :
Белый = КЗС(255;255;255).
Красный = КЗС(255;0;0).
Оранжевый = КЗС(255;128;0).
Желтый = КЗС(255;255;0).
Зеленый = КЗС(0;255;0).
Голубой = КЗС(0;128;255).
Синий = КЗС(0;0;255).
Фиолетовый = КЗС(128;0;255).
Черный = КЗС(0;0;0).

- Избыточность информации / кода и желание представить его в сокращенном виде повлияло на переход к представлению данных в шестнадцатеричной системе счисления, что в общем - то тоже малопонятно для обычного человека ... Представим известные нам коды цветов в HEX значениях :
Белый = #FFFFFF
Красный = #FF0000
Оранжевый = #FF8000
Желтый = #FFFF00
Зеленый = #00FF00
Голубой = #0080FF
Синий = #0000FF
Фиолетовый = #8000FF
Черный = #000000

Использование RGB / HEX кодов цветов дает более компактную запись цифрового кода, но этого мало ... Необходимо использовать тот тип задания цвета, который поддерживается программой компилятором / интерпретатором исполняемого кода - который мы и увидим на экране ... Выше показаны примеры кодов цвета из разных программ / для примера / и ошибка в написании кода цвета ( например, запятая вместо точки с запятой ) - приведет к сбою в программе ...

Проблемы DPI / PPI реальных размеров геометрии / изображений.

Второй задачей для меня стала конвертация реальных размеров изображений / перевод пикселей экрана в миллиметры ... Конечно, по правилам приличия следует использовать DPI / dots per inch - количество точек на дюйм, которые затем еще следует перевести в миллиметры ... С большим, можно сказать, трудом - нашел я в Windows 7 где находится этот DPI, который кстати - обычно никто не крутит, и стоит он по умолчанию 96 пикселей на дюйм / PPI - еще одна единица измерения, часто - равная DPI, но не для всех случаев ...

Windows 7, Панель управления, Экран, Свойства - где найти DPI / PPI.

Конечно, крутить я здесь - ничего не буду, да и не требуется мне такая точность ...
- Просто, нарисую линию 500 пикселей и измерю линейкой - это примерно 129,5 мм ...
- 1 мм равен 500 / 129,5 = 3,861 пикселя, то есть для моего экрана 1280 х 800 и 96 DPI - практически вычислено, что 1 мм = 3,86 пикселя, что за глаза достаточно для точности такого простого соответствия округленных размеров изображения ... Также, предполагаю, что компьютер не сможет нарисовать пол / пикселя и сам округлит размеры до ближайшего, целого числа ...
- На других компьютерах, с иным разрешением экрана - соответствие миллиметра пикселю может быть иным, и размеры могут отличаться от реальных ... Более сложные компиляторы программного кода умеют самостоятельно пересчитывать и адаптировать реальные размеры в зависимости от текущих настроек системы / экрана ...

Система программирования Профт5 : как нарисовать круг ?

Теперь, когда есть представление о базовых сведениях работы компьютера - можно приступить к рисованию круга в системе программирования Профт5, которая в настоящее время похоже не поддерживается ...
- Код программы пишется в текстовом файле с расширением .v - например : krug.v
- Код программы пишется на понятном русском языке ...
- Хотя и есть установочные файлы - программная среда Профт5 не требует установки, а дистрибутив / комплект файлов копируется в любую папку, например : C:\Proft5
- Для удобства редактирования программного кода своих программ в файлах с расширением *.v - желательно сопоставить их открытие с / при помощи программы блокнот / MS Notepad, что не влияет на их работоспособность, но сильно облегчает работу с ними ...

Действие Начало(). // это комментарий ...
// программа начинается с действия ...
// точка в конце - вроде как желательна ...
Белый = КЗС(255;255;255).
Красный = КЗС(255;0;0).
Оранжевый = КЗС(255;128;0).
Желтый = КЗС(255;255;0).
Зеленый = КЗС(0;255;0).
Голубой = КЗС(0;128;255).
Синий = КЗС(0;0;255).
Фиолетовый = КЗС(128;0;255).
Черный = КЗС(0;0;0).
// чтобы не путаться с цифрами - задать переменные цветов
// формат = десятичный ...
// переменной становится любое слово, после того, как ему присваивается значение ...
// с точки зрения Профт5 переменная и идентификатор объекта не имеют принципиального различия, так как по окончании работы программы все виртуальные объекты будут уничтожены ... а исходный программный код - останется ...
Окно1 Это Модуль ("Окно").
Окно1:ЦветБукв(Белый).
Окно1:ЦветФона(Черный).
Окно1:Показать.
// требуется создать окно, чтобы определить / занять область на экране, где будут нарисованы круги ...
... // пустое место для вставки своего кода и вызова своих функций / действий
КонецДействия. // действие выполнило свою задачу и должно быть закрыто ...

А, вот дальше начинается самое интересное ...
вариант 1 : написать свое отдельное действие рисования круга и вызвать его (функцию) из кода главного модуля ...
вариант 2 : использовать события, например : клик мышью по экрану - для рисования круга ...
вариант 3 : придумать свой собственный метод вызова функции окна - рисования окружности, неважно ...
Самое интересное в этом программном коде то, что используя любой вариант, но рисуя только 1 круг - надо вызвать функцию рисования дважды / или дважды щелкнуть мышью по экрану ...
... Но, если рисовать несколько кругов - то круги будут нарисованы сразу после первого вызова функции / или, первого щелчка п экрану ...
Видимо, это какая-то особенность работы компилятора / обработчика программного кода и отрисовщика экрана ... Не проверял это на рисовании других геометрических фигур, но предполагаю, что поведение будет схожее ... Просто надо учитывать это в будущем ...
Разница между вызовом действия и отслеживанием события в том, что вызов действия следует прописывать в коде главного действия, а отслеживание событий происходит автоматически, по мере возникновения, поставленных на контроль, событий ...
И для вызова, и для отслеживания событий - следует писать отдельный код действия, со своим началом и концом, типа функция, выполнение, которой - не обязательно для работы кода главного действия ... Главное действие - это основной код программы, который будет выполнен всегда ...

Действие РисоватьКруг(). // Под / программа рисования окружности по вызову из главного кода
// Команда вызова : РисоватьКруг. (дважды для одиночного круга), без скобок, как у действия / функции
Окно1:Окружность(250 ; 250 ; 50).
Окно1:Обновить.
// Собственно функция отрисовки круга : создать в Окно1 круг с заданными параметрами и обновить видео драйвер экрана ...
КонецДействия. // Обязательно закончить действие и передать управление главному коду ...

Круг нарисован вызовом действия рисовать круг в системе программирования Профт5.

Действие Окно1_Щелк(). // Под / программа рисования окружности по щелчку мышью в Окно1 ...
Дважды Щелчок - для одиночного круга ...
Действие щелчка выполняется немедленно ...
Окно1:Окружность(150;150;50).
Окно1:Окружность(200;200;50).
Окно1:Обновить.
КонецДействия. // Закончить действие функции щелчка ...

Круги нарисованы по событию - щелчку мышью в окне программы системы программирования Профт5.

Далее вы можете пойти своим путем совершенствования своего кода программирования ... Например, создать цикл рисования множества кругов с различным радиусом, и так далее ... Нет предела совершенству, даже в такой, на первый вид простой - системе программирования Профт5 ...


Действие МойКруг().
Окно1:Очистить.
Х = 350.
У = 350.
Р = 1.
Пока Р <= 150.
Р = Р + 1.
Окно1:Окружность(Х ; У ; Р).
Окно1:Обновить.
КонецПока.
КонецДействия.

Множество кругов нарисованы в цикле пока / конец пока - в системе программирования Профт5.

Или, так ... Рисование заливки кругов не реализовано в Профт5, поэтому желаемая картинка наложения и смешения цветов - не осуществима ...


Действие МойКруг().
Окно1:Очистить.
Окно1:ЦветБукв(Красный).
РК = 1.
Пока РК <= 150.
РК = РК + 0,1.
Окно1:Окружность(200 ; 200 ; РК).
Окно1:Обновить.
КонецПока.
//.
Окно1:ЦветБукв(Зеленый).
РЗ = 1.
Пока РЗ <= 150.
РЗ = РЗ + 0,1.
Окно1:Окружность(300 ; 200 ; РЗ).
Окно1:Обновить.
КонецПока.
//.
Окно1:ЦветБукв(Синий).
РС = 1.
Пока РС <= 150.
РС = РС + 0,1.
Окно1:Окружность(250 ; 300 ; РС).
Окно1:Обновить.
КонецПока.
КонецДействия.

Рисование множества кругов в цикле и используя разные цвета - в системе программирования Профт5.

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

Рисование орнамента из кругов в системе программирования Профт5.

0:06 22.12.2018

Поделиться ссылкой :

Быстрый поиск по сайту :


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

= = = Меню раздела = = =


© techstop-ekb.ru / Екатеринбург / 2019