векторная графика в Стереометрии

  Всякий претендующий на точность чертёж в стереометрии, да и в планиметрии тоже, создаётся на экране компьютера средствами векторной графики. Это значит, что каждой видимой на чертеже точке, каждому началу или окончанию прямой линии, соответствует точная запись координат, хранящаяся где-то в памяти машины.
  В процессе рисования координаты извлекаются из памяти, и если они описывают 3D конфигурацию, то есть, имеют составляющие X,Y и Z, то они преобразуются к координатам Xp и Yp, лежащим в плоскости экрана, огрубляются с точностью до пикселя, и затем, соответствующая точка или прямая рисуется на поверхности экрана. Разумеется, нарисованная точка не имеет размер 1 пиксель, а прямая - толщину 1 пиксель, эти значения существенно больше. Это является условностью, характерной и для чертежа на бумаге, сделанного карандашом или рейсфедером. И все такую условность хорошо понимают.

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

  У векторной графики имеется ещё одна особенность – графические примитивы выводятся на дисплей последовательно, сначала первый примитив, потом второй, и потом – третий. Те, что выведены позже, перекрывают те, которые были выведены раньше. Коричневая прямая рисуется после зелёной и перекрывает её (см. иллюстрацию). И это правильный рисунок – если посмотреть на координаты точек X1,Y1,Z1 и X2,Y2,Z2 в строках 1 и 2, то обнаружится, что вторая кривая находится перед первой, а не наоборот.
  Если же поменять строки 1 и 2 местами, то коричневая прямая перекроет зелёную, и этот чертёж будет неправильным.
  Что касается красной точки, то она была поставлена на зелёную прямую, и находится на одном с ней уровне. Рисунок на иллюстрации выглядит правильным, однако, если бы красная точка оказалась бы правее, то она перекрыла бы коричневую прямую, и у читателя создалось бы впечатление, что точка находится к нему ближе, чем все другие элементы чертежа.

  Итак, точность в представлении координат и поочерёдность выведения графических примитивов являются отличительной чертой векторной графики.
  И то, и другое тесно связано со структурой, которую векторная графика имеет внутри программы. Например, в программе «Стереометрические модели» структура векторной графики единообразна и проста. Все величины, связанные с графическими элементами, переведены в целочисленный формат Integer и записаны отдельными строками в двухмерный массив Pvv(1000,12).

     ЦЕЛОЧИСЛЕННЫЙ ФОРМАТ

  Числа типа Integer занимают 4 байта (31 бит без знака), и к такому размеру привязана вся информация о том или ином графическом примитиве.
  Координаты точек указываются в пикселях, но при переводе в целочисленный формат эти величины увеличиваются в 10 раз. Таким образом, неточность в определении координат составляет 0.1 пикселя, и этого вполне хватает для практических нужд стереометрического построения. Для разрешения экрана 4пикс/мм такое построение может занимать на рисунке пространство 80х80см, то есть может быть в 2.5 раза большим, чем экран ноутбука.
  Информация о заданном цвете (RGB компоненты) занимает 6 байт, но и она обрезается до 4-х байт за счёт удаления младших бит, и тоже переводится в целочисленный четырёхбайтовый формат.
  Таким образом, все данные о векторных примитивах имеют единообразную целочисленную форму, что удобно и для манипуляции ими, и для их хранения, и для распечатки данных, если возникает желание на них посмотреть.

  В нулевой позиции графического примитива находится его логотип. Для точки, её логотип это число 1. Для прямой это число 2 или 3. Логотипы 2 и 3 отличаются способом показа прямой на поверхности чертежа – для логотипа 2 показывается отрезок прямой между точками (1) и (2), а для логотипа 3 отрезок дополняется тонкой прямой, выходящей за ограничивающие отрезок точки.

  Логотип 4 представляет плоскость. Плоскость показывается точкой, через которую она проходит, и тонкой чёрной линией в ракурсе – нормалью к плоскости. Линия имеет длину 50 пикселей и прикреплена к точке.

  Логотипы 5 и 6 представляют плоские сечения. В позициях 1,2,3 строки указаны координаты «точки заливки» - эта точка принадлежит плоскости, и с этой точки начинается зачерчивание сечения тонкими линиями, горизонтальными - для логотипа 5, или вертикальными – для логотипа 6.
  Зачерчивание ограничено контуром толщиной 3,5 или 7 пикселей. Соответственно, и расстояние между линиями зачерчивания будет 3,5 или 7.

  Каждый графический элемент в программе «Стереометрические модели» имеет свой уникальный номер. Номер этот указывается в последней, 12-й позиции строки массива. В частности, такие номера есть и у точек, по которым проводится сечение – прямые, соединяющие эти точки образуют контур, а ссылки на точки контура (номера точек) даются в строке с логотипом 5 сразу после координат точки заливки. Всего таких ссылок в строку помещается 6, поэтому зачерчиваемый контур представляет собой треугольник, четырёхугольник, пятиугольник или шестиугольник. И этого вполне хватает для решения простых задач на построение сечения.

     ИДЕНТИФИКАЦИЯ ПО ЦВЕТУ

  Ещё одним любопытным аспектом графики, принятым в программе «Стереометрические модели» является идентификация элементов по цвету.
  Мы уже говорили о том, что целочисленный формат не позволяет задавать компоненты цвета в формате 32 бита на каждый компонент. Три младших бита каждого компонента при задании цвета отсекаются.
  Но, как оказалось (нет худа без добра) - эти же компоненты могут быть использованы для указания на номер геометрического элемента.
  Поскольку усечённый цвет задаётся в 10-й позиции строки, а номер – в 12-й, то полный цвет (тот цвет, который используется в рисовании), попросту вычисляется путём прибавления номера в качестве младших бит к усечённому цвету.
  Таким образом, все цвета, которые мы видим на поверхности рисунка, являются уникальными. Все они различаются по младшим битам. Однако, этого различия мы не замечаем, если цвет был выбран коричневым или зелёным, то мы его таким и видим – коричневым или зелёным, независимо от того, что находится в младший его битах.

  Такой подход делает очень простой идентификацию графических элементов – достаточно кликнуть по выбранному элементу и мы, узнав его цвет, тут же узнаём его номер.
  Узнав номер, мы идём в небольшой специальный массив Mvv, в котором по номеру элемента определяем номер той строки массива Pvv, в которой элемент находится.

  Зачем понадобилось такое, не прямое, а опосредственное определение номера строки, с использованием массива ссылок Mvv?
  Дело в том, что в процессе работы с графикой некоторые строки удаляются, и тогда на месте логотипа в удалённой строке ставится ноль. Удаляется и ссылка на строку в массиве Mvv. Все остальные записи остаются на месте. И это проще, чем смещать все строки векторного массива при удалении одной из них.
  Может возникнуть вопрос, а не будут ли удалённые строки постепенно накапливаться. Не следует ли иногда «чистить» массив, чтобы не допустить его чрезмерного увеличения?
  Да, именно так изредка и происходит. «Чистка» массива делается при его записи для хранения во внешний файл. После того, как мы вновь загрузим графику из этого файла, пустых строк в массиве не будет.

  Итак, мы видим, что целочисленная организация векторной графики для создания простых стереометрических чертежей вполне оправдывает себя, является простой и удобной. Примеры, иллюстрирующие работу с ней, можно посмотреть вот здесь - http://www.youtube.com/channel/UCxmwXkCiEIs7Stw7tlADyYw

_________
1.02.2022


Рецензии
Добрый вечер! Я хоть по образованию - преподаватель биологии и журналист, но было интересно читать и узнать что то новое! Спасибо! С уважением,

Леда Шаталова   18.02.2022 17:27     Заявить о нарушении
Векторная графика используется очень широко. Когда-то все чертежи рисовались на кульманах. То есть механически - карандашом по двум скрещенным линейкам. Я тоже умел это делать - моё первое (школьное) образование - "чертёжник конструктор". Сейчас вся конструкторская документация делается в цифре, то есть, в специфическом цифровом формате, а чертежи показываются на экране компьютера и переносятся на бумагу методами векторной графики.

Дмитрий Маштаков   18.02.2022 20:00   Заявить о нарушении