О том, как я развиваю компьютерный проект
С другой стороны, в программе для рисования DM_Paint в двухмерной графике можно было делать рисунки, пригодные в качестве кадров будущей анимации.
Особенно успешным оказалось использование Ломаной линии - https://youtu.be/LOCxg-Qvrdw
Поэтому мне и пришла в голову идея присоединить именно Ломаную линию к программе «Стереометрические модели», как новый плоский элемент к трёхмерной векторной графике. Тем более, что подобие плоских элементов в этой графике уже существует - http://proza.ru/2022/03/28/347
Некие преференции я при этом получу – программа для рисования делалась, как экспериментальная, она получилась не только всеобъемлющей, но достаточно громоздкой. И с векторной графикой в ней работать не очень просто, программу нужно хорошо изучить, чтобы воспользоваться её возможностями в полной мере.
Планируемая доработка «Стереометрических моделей» сулит значительные удобства как для создания Ломаной линии, так и для её редактирования. И, разумеется, все удачные решения я свободно могу заимствовать из предыдущей программы. Новая среда для Ломаной линии позволит выбирать её, и точки на ней, единственным кликом, по принципу идентификации по цвету http://proza.ru/2021/12/11/1112 и это делает редактирование значительно более удобным.
Итак, решив таким образом продолжить развитие проекта, я набросал некий план, и пишу статью, с целью получше обдумать принятые решения, а также с целью познакомить вас с процессом компьютерного творчества, а это творчество, уверяю Вас, чрезвычайно увлекательно. ))
Основным принципом доработки я посчитал полное сохранение всего интерфейса программы. Никаких дополнительных кнопок или меню. Тех инструментов, которые имеются на панели, вполне достаточно.
Однако (и это так просто!) с Ломаной линией эти инструменты будут работать по другому.
И кое-что я уже сделал.
Взгляните на иллюстрацию – инструмент «создать точку» в нормальном, трёх-мерном функционировании, делает точку на ножке. Пока мы точку создаём, но ещё не зафиксировали, мы можем ножку перемещать, подбирая координаты X и Y, или смещать точку вверх-вниз, подбирая координату Z. Затем кликаем «ok», и у нас получилась точка, а, если хотим, то и ножка.
Установка одной единственной кнопки в положение «Л», означает, что мы работаем с ломаной линией, а инструмент «создание точки» функционирует по-другому. Он ставит точку сразу по месту клика (нажимать «ok» не надо), и ставит её на фронтальную плоскость (координата Y равна нулю).
Вот строка, описывающую чёрную точку –
2> 1 90 250 1000 0 0 0 0 0 0 0 3 2
а вот строка, с описанием зелёной точки -
4> 9 540 0 480 0 0 0 0 1 31710 992 5 4
Сама же зелёная точка будет, по моим соображениям, обозначать начало заливки будущей Ломаной линии. Обратите внимание, никакой ломаной линии нет, она пока находится в смутном ещё проекте, а точка для её заливки уже реально появилась. И я даже скажу, как именно Ломаная будет заливаться – она будет не заливаться, а зачерчиваться горизонтальной штриховкой. На это указывает цифра 1 в 8-й позиции строки. Цифра эта была взята с кнопки «Плотность» в момент создания точки.
0 означает, что заливки не будет, 1 – будет горизонтальное зачерчивание,
2 – вертикальное зачерчивание, 3 – сплошная заливка цветом фона (поз.9),
остальные цифры вроде как не нужны, но я их приберегаю на будущее.
Обращаю ваше внимание, именно так делаются большие компьютерные проекты. Сначала набрасывается смутный общий план, при его создании важно понять, возможно ли, и какими средствами, можно достичь должного функционирования отдельных частей проекта. Затем делается первый шаг – какая-то часть проекта реализуется, тестируется и обкатывается. Затем реализуется другая часть и подсоединяется к первой. Тестируется она как отдельно, так и в сборке с первой.
Такой план постепенных действий и проводит впоследствии к общему успеху.
Большие программы никогда не пишутся целиком и сразу. Это самый верный способ запутаться в сложном коде.
Ну, это так, некая философия и методология, а сейчас я расскажу о тех самых, «смутных чертах» проекта.
Как рисовать Ломаную? Ясно, что рисовать её нужно вокруг точки заливки, обрамляя точку заливки со всех сторон. Но как рисовать? И как программа узнает, какую именно точку мы обрамляем?
На иллюстрации вы можете видеть, как я, используя инструмент «создать отрезок» в его обычном функционале, окружил зелёную точку отрезками, и мне осталось только замкнуть это кольцо, и его можно вроде бы заливать или заштриховывать.
Но, во-первых, для создания сечения со штриховкой я инструмент взял не тот, и программа ни о зелёной точке, ни о моих намерениях ничего не знает, во-вторых, у меня получилось 7 строк, каждая из которых описывает свой отрезок, и это совершенно расточительное разбрасывание информации, поскольку для описания каждого стыка отрезков вполне хватило бы пары чисел, а их в каждой из строк потенциально 12.
В третьих, засорять общий массив графики пространными «многоточиями» совсем не обязательно – пользователь эти многоточия не читает, и ему знать о них, в общем-то и не надо. Но ведь именно так было в моей предыдущей программе, и это было не очень хорошо. Теперь же, хорошенько поразмыслив, я решил, что подобные «многоточия» лучше и удобнее хранить в отдельном массиве. А ссылки на многоточия можно разместить на месте нулей в строке с логотипом 9.
Посмотрите на эту строку -
4> 9 540 0 480 0 0 0 0 1 31710 992 5 4
в ней после координат есть незадействованные 4 нуля, значит, на этих позициях можно организовать 4 ссылки на ломаные линии, назовём такие линии «абрисами», которые и составят общий контур ломаной линии.
То есть, мы можем делать не просто контур, а помещать внутри него три «дырки», образующие как бы два «глаза» и «рот», не подвергающиеся заливке.
Чувствуете? Это существенно расширяет возможности графики. Это лучше, чем просто один заливаемый контур.
Теперь, давайте считать. В прошлой программе на весь массив векторной графики у меня было отведено 20000 строк. Программе «Стереометрические модели» столько строк не нужно, в ней их всего 1500. Но как только появятся Ломаные линии с их «многоточиями», размера массива им может не хватить. Поэтому, давайте организуем, как я уже сказал, отдельный массив
Ppp(20000,12) большого размера, и специально для хранения точек абрисов.
Давайте считать дальше. Графических элементов в программе «Стереометрические модели» может быть не более 512. Предположим, что все они будут ломаными линиями по 4 абриса в каждой.
В одну строку помещается 6 точек. 20000/6/512*4=26 - то есть число точек для простенького абриса вполне приемлемое. А если у каждой ломаной будет один абрис, то получим число более 100. Такого количества точек хватит для любого абриса.
С абрисом и контуром всё понятно.
А как мы эти точки будем рисовать? Так же, как и в предыдущей программе – свободным движением стилуса по планшету. Нарисуем один абрис, два абриса, 3 или 4, и кликнем кнопку «ok».
Так же, как и в предыдущей программе, будем собирать проходимые стилусом точки, в специальный «мешок» - массив Poo(400,2) - 4 абриса по 100 точек в каждом, в такой массив поместятся.
Не каждую, проходимую стилусом точку будем класть в мешок. Пусть цифра, выставленная на кнопке «размер точки» определяет это. Умножим эту цифру на два. При выставленной цифре 1 будем «класть в мешок» координаты каждой второй пары пикселей. Это – очень подробный масштаб. При цифре 9 (максимальное значение) получаем ломаную с расстоянием 18 пикселей между точками. В таком разрешении «ломаность» линии будет уже заметна.
Как же компьютер узнает, что работать нужно именно так?
Опять же, модифицируем инструмент «сделать сечение по точкам» - вон он, виднеется со своими точками на панели инструментов снизу (см.иллюстрацию). При выставленной опции «Л» пусть он работает именно так.
А как программа узнает, что начерченные абрисы нужно связать именно с зелёной точкой, а не с красной? Красная точка тоже изображает центр заливки ломаной, и она тоже виднеется на иллюстрации.
Как узнает? Очень просто – в программе «Стереометрические модели» есть возможность выбора того или иного графического элемента. Выбрать можно три элемента. Выбранный элемент помещается в верхнюю строку - в стек выбора, сдвигая ранее выбранные элементы вниз.
С элементом, находящимся в верхней строке можно проводить всякие интересные действия, например, передвигать его, нажимая клавиши со стрелочками, если режим сдвига включён. Поэтому, просто выберем зелёную точку, и тогда программа сможет узнать, что созданные абрисы предназначены именно для этой точки.
И не думайте, что координата Y в описании Ломаной нам не пригодится, что она – это только некий атавизм 3D графики. Нет, меняя координату Y, мы можем в принципе указывать программе, на порядок следования Ломаных, то есть можем засовывать один персонаж под другой, или наоборот, выводить его на передний план. И это удобно, это похоже на то, как меняются местами слои в программе Фотошоп. А на положении контуров такая перестановка никак не скажется – ломаная-то у нас плоская, и рисуется она не в изометрии, а как плоская графика.
В программе «Стереометрические модели» имеется пункт меню «упорядочить массив по Y», вот этот пункт меню нам и пригодится, чтобы, в соответствии с координатой Y, менять элементы местами.
Обратите внимание. Программирование на этом этапе вовсе не связано с написанием кода. Оно целиком сосредоточенно на обдумывании мнемоники действий, и на использовании имеющихся уже возможностей программы.
На этом я свой рассказ заканчиваю. Надеюсь, что я сумел передать Вам свой взгляд на специфику работы программиста.
А заодно и сам себе помог получше разобраться в том, как можно развивать существующую программу.
_________
1.10.2022
P/S Проект находится уже во вполне приемлемом состоянии. Программу для работы с векторной графикой и Ломаными линиями можно скачать тут - http://disk.yandex.ru/d/33Hblr886-gUdw
А посмотреть исходники можно здесь - http://disk.yandex.ru/d/HfTVVsHw-0jQlQ
Свидетельство о публикации №222100200078
Но ведь и рыбалка - расчудесное занятие, подсчитано кем-то: каждая минута на рыбалке продлевает жизнь на час.
И, как говорится: ну, автор, ну молоддец!
Харитон Егорович Сарамливый 25.10.2022 19:34 Заявить о нарушении
Но это позже, а сейчас тороплюсь, бегу к "своим баранам". Я там такое придумал, такое придумал! )))
Ещё чуть-чуть осталось. Потом обо всём расскажу и результаты опубликую.
Дмитрий Маштаков 25.10.2022 23:11 Заявить о нарушении
Так я на удочку там ни одной рыбки не поймал. Делал подсечки или слишком рано, или слишком поздно. Нет, не рыболов я. ))
Дмитрий Маштаков 25.10.2022 23:19 Заявить о нарушении
Они тоже красные и даже сладкие, потому и ошибся.
Дмитрий Маштаков 26.10.2022 05:54 Заявить о нарушении