Присоединённая графика

   Моя программа «Стереометрические модели» была полностью закончена и оттестирована, когда я узнал, что школьникам, сдающим ЕГЭ по математике, бывают нужны графические пояснения для решения алгебраических уравнений.
   К примеру, задание, которое вы видите на иллюстрации, требует объяснений преподавателя с использованием чертежа, который, хоть и прост, однако сделать его, а тем более – представить в уме без предварительных пояснений, школьнику затруднительно. Да и правильно нарисует он такой чертёж, наверное, не сразу.

  Опять же, хотелось бы, чтобы этот чертёж был бы не только красив, но и удобен в том плане, чтобы преподаватель мог кое-что на этом чертеже изменять. Передвигать в ходе своего объяснения геометрические фигуры, прямые и точки.

  Естественно, что неразумно делать для этой цели отдельную программу. Гораздо проще добавить в уже готовую программу дополнительную опцию, расширяющую область её применения.
  О том, как работает эта опция, я вам уже всё рассказал. Помимо круга можно создавать и передвигать по чертежу параболы и гиперболы, трансформировать круг в эллипс и выделять в круге отдельную дугу, задавая её начало и конец в градусах, как это и положено – начиная справа и далее против часовой стрелки.
  Кроме того, вместо текстового задания, преподаватель может теперь использовать рисунок, который накладывается поверх чертежа так, как вы видите это на иллюстрации. В принципе, на этом мой рассказ о добавлениях в программу мог бы быть закончен, но я ещё хочу рассказать о том, как это всё сделано.

     КАК ЭТО ВСЁ БЫЛО СДЕЛАНО

   Рассказы на тему «как это сделано» представляют особый интерес.
   Отмечу, что в начале всякого «далания» имеется некая особая фаза, общая как для программиста, так и для писателя. На нашем сайте, как я понимаю, именно писатели собрались? Тогда послушайте внимательно.
   Фаза эта называется «внимательное наблюдение».
   С фазы внимательного наблюдения начинается всякий писательской труд.
   Программист тоже внимательно смотрит на свою программу и на то что ему ещё предстоит сделать, и отмечает мысленно – где сходство, в чём различия, и как достичь результата наиболее простыми и понятными средствами.
 
   В программе «Стереометрические модели» используется косоугольная фронтальная изометрия – координатная ось Z направлена вверх, а ось Х направлена вправо, поэтому фронтальная плоскость, имеющая координату Y=0, вполне подходит для планиметрического чертежа.
   Чтобы вместо стереометрических координат показывалась сетка, на верхней панели вводится специальная кнопка. Кликая по этой кнопке можно выбрать шаг ячеек сетки – 40, 60, 80 или 100 пикселей, или отключить сетку, перейдя к стереометрическим координатам.

   С рисованием прямых линий поверх сетки никаких проблем нет. Проблемы возникают только с переносом прямой на другое место. Дело в том, что инструмент «перемещение» требует обязательной конечной привязки. Это значит, что перенести прямую просто так, на свободное место, мы не можем. Перенос состоится только тогда, когда мы укажем в качестве конечной точки фрагмент одной из присутствующих на чертеже геометрических фигур.
   Возникшую сложность я обошёл следующим образом – в дополнение к прямой линии (прямая показывается как отрезок с продолжающими его длинными тонкими концами) я сделал опцию этой же прямой – «Луч».
   Луч показывается точно так же как и прямая, но тонкая линия продолжает отрезок только в один конец. Визуально «Луч» и «Прямую» легко отличить.
   В графической записи «Луч» обозначается цифрой 9 на восьмой позиции строки, и по этому признаку при переносе разрешается, не делая привязки, закреплять луч на любом свободном месте.

   Более того. Распространим это правило переноса и на точку. С помощью имеющейся уже кнопочки «о» - обращение, будем воздействовать на точки. И в зависимости от того что написано в этот момент в текстовом поле, будем запись в графической строке модифицировать.
   А как можно модифицировать строку, описывающую точку? Вот, посмотрите

1> 1  3000  0  3000  100  0  0  0  1  0  31744  5  1
1> 1  3000  0  3000  0  0  0  0  0  0  31744  5  1

Нижняя строка это самая обыкновенная точка. На месте последнего нуля в этой строке может стоять число. Оно нужно, чтобы задавать буквенное обозначение. Поэтому эта позиция занята, и я не могу её использовать.
  Зато посмотрите на предыдущие пять нулей, какая красота! Как много информации можно поместить на это, ничего не значащее, место.
  Вот он, момент истинной радости программиста!  ))

  Восьмую позицию строки используем так, как и раньше – поставим туда модификатор. Видите – единица на этом месте в верхней строке стоит. Если модификатор отличен от нуля, то элемент при переносе не требует обязательной привязки.
  Но роль модификатора-единицы на этом не кончается. Единица указывает на то, что в предыдущих четырёх позициях находятся параметры, описывающие присоединённую окружность.

  Почему "присоединённую"? Потому, что именно так и делается – не только окружность, но и параболу, и гиперболу и ещё будущие фигуры, всё, что нужно показать в виде графики, можно связать с положением некой центральной точки. Присоединённая графика не будет самостоятельна, она будет связана с точкой и, описанная имеющимися в строке параметрами, будет рисоваться вокруг точки в качестве как бы дополнения к ней.
  Эта прекрасная идея легко реализуется. Нужно только сделать одну единственную подпрограмму, которая будет разбираться с параметрами и рисовать графику вокруг точки.
  Пусть, к примеру, строка выглядит так –

1>    1  3000  0  3000  100  90  270  100  1  0  31744  5  1

Как видим, тут указаны явно четыре параметра – 100 90 270 100
Поскольку в строке могут находиться только целые числа, некоторые параметры показаны в ней увеличенными в сто раз.

  Первое число 100 делим на сто и получаем единицу. Это значит, что если сетка имеет ячейки размером 40х40 пикселей, то и присоединённая к точке окружность будет начерчена с тем же радиусом.
  Следующие два числа 90 и 270 указывают на то, что окружность чертится не целиком. На чертеже будет показана только левая её дуга – от 90 до 270-ти градусов.
  Следующее число 100 можно было явно не указывать – после деления на сто мы получаем эллиптичность равную единице, то есть, никакой не эллипс, а просто круг. И, по умолчанию, если на этом месте стоит 0, то эллиптичность принимается равной 1. Параметры "по умолчанию" использовать удобно, поскольку в этом случае не надо писать лишние числа.
  Знаете, как будет интерпретирована такая строка? –

1>    1  3000  0  3000  0  0  0  0  1  0  31744  5  1

Радиус равный нулю, означает, что присоединённая окружность не будет рисоваться. На чертеже появится только точка. Но точка модифицированная, в восьмой позиции этой строки стоит 1. Поэтому точка может быть перемещена на любое свободное место, на требуя обязательной привязки.
  Помимо окружности, к точке в настоящее время могут быть присоединены графики, изображающие параболу, гиперболу и полиномы 3-й и 4-й степени. Для этого используются числа-модификаторы 2,3 и 4.
  Следуя по такому пути, в существующий набор можно легко добавить и другие функции – синус, показательную функцию и проч. Если такое добавление потребуется.   

  Все описанные действия с присоединяемой графикой удобны, и, согласитесь, они добавлены в программу просто и, я бы сказал, изящно.
  Добавленное расширяет возможности программы, и ничуть её не портит.

  Новый вариант программы можно скачать там же, где и старый, вот здесь –
http://disk.yandex.ru/d/OYik3rOqtxP4dQ помимо программ в папке находятся задания по стереометрии, а также файл с планиметрическим чертежом и рис1  - тот самый рисунок с заданием, который вы видите на иллюстрации.

_________
28.3.2022

P/S  Уважаемые писатели! Вы меня понимаете – всегда радуешься, когда так непринуждённо и ловко удаётся ввернуть новый яркий эпизод в своё старое произведение. ))

Видео смотрим тут - http://youtu.be/bGXiXnL_mts


Рецензии