О том, как я развиваю компьютерный проект

   Программа  «Стереометрические модели» показала хорошие результаты, и в настоящее время она отшлифована до совершенства. Векторная графика в этой программе служит для создания  3D моделей, состоящих из линий и точек.

   С другой стороны, в программе для  рисования  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


Рецензии
Хобби... Радует, когда у человека интересное хобби.
Но ведь и рыбалка - расчудесное занятие, подсчитано кем-то: каждая минута на рыбалке продлевает жизнь на час.
И, как говорится: ну, автор, ну молоддец!

Харитон Егорович Сарамливый   25.10.2022 19:34     Заявить о нарушении
Спасибо. На Вашей страничке интересно, буду заходить. И контакты у Вас интересные. У Никонова Андрея 2 на страничке побывал. Потому и "за связь" отдельное спасибо.
Но это позже, а сейчас тороплюсь, бегу к "своим баранам". Я там такое придумал, такое придумал! )))
Ещё чуть-чуть осталось. Потом обо всём расскажу и результаты опубликую.

Дмитрий Маштаков   25.10.2022 23:11   Заявить о нарушении
Что касается рыбалки, то я, к сожалению, не рыболов. Был ещё студентом на Ахтубе, на сборе клубники. Там бросишь кусочек хлеба в воду - он в воде не тонет, летает над поверхностью воды, это его рыбы ещё в воздухе замечают и снизу клюют, кусочки отщипывают.
Так я на удочку там ни одной рыбки не поймал. Делал подсечки или слишком рано, или слишком поздно. Нет, не рыболов я. ))

Дмитрий Маштаков   25.10.2022 23:19   Заявить о нарушении
)) Ошибся. В Астрахани не клубнику, а помидоры мы собирали.
Они тоже красные и даже сладкие, потому и ошибся.

Дмитрий Маштаков   26.10.2022 05:54   Заявить о нарушении
На это произведение написаны 2 рецензии, здесь отображается последняя, остальные - в полном списке.