Радость программиста

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

  Вопрос в том, как это можно сделать.
  Передвижение контуров проблемы не составляет – поочерёдно перебираем все точки и изменяем их координаты X или Y на нужную величину. Эта величина – D задаётся, в пределах от единицы до десяти, цифрой на кнопочке «Плотность».
  Поворот контуров вокруг выбранной точки, на иллюстрации эта точка зелёная, тоже легко осуществляется по известным формулам, которые вы можете видеть в тексте, опубликованном ниже.

  Моя же «радость программиста» случилась вот по какому поводу. Приступив к программированию увеличения и уменьшения размера персонажа, я обнаружил, что и делать мне ничего не нужно.
  Достаточно в формулах, осуществляющих поворот, задать синус равным нулю, а косинус положить равным коэффициенту увеличения. И, пожалуйста, всего одна строка текста, и вы можете видеть на иллюстрации, как это всё прекрасно работает!
   
       If K = 3 Then
         If D = 1 Then U = 0.5 Else U = D - 1 'угол поворота
         Sn = Sin(U * pi180): Cs = Cos(U * pi180):
       End If:
       If K = 1 Then 'ниже идёт строка, которая и вызвала у меня такой восторг
        Sn = 0: Cs = (100 + D) / 100: 'коэффициент увеличения/уменьшения
       End If:
      
       ... Цикл, в котором из большого массива извлекаются
           координаты массы точек
 
         X1 = Pvv(N, 1): Y1 = Pvv(N, 2): 'поворот
         X1 = X1 - Xo: Y1 = Y1 - Yo:
         X = Cs * X1 + Sn * Y1:
         Y = Cs * Y1 - Sn * X1:
         Pvv(N, 1) = X + Xo: Pvv(N, 2) = Y + Yo:

========
P/S   на самом деле я не изобрёл ничего нового. Известна формула для поворота вектора с последующим изменением его относительной длины -

         X = L * (Cs * X1 + Sn * Y1)
         Y = L * (Cs * Y1 - Sn * X1)

но я про это забыл, и потому обрадовался тому, что так делать можно ))


Рецензии
Я мало что понял в этих Sin и Cos, но Ваш восторг мне приятен, знаком и понятен.

Когда-то я долго не мог заставить базу данных афоризмов выстраивать записи в желательном для пользователя порядке... пока не пришло озарение наподобие Вашего.

«...творчество, уверяю Вас, чрезвычайно увлекательно» – и это точно!

Хомуций   08.10.2022 13:36     Заявить о нарушении
Озарения бывают. Но чаще я борюсь с собственными ошибками ))
Когда ошибку находишь, то тоже приятно. Я постепенно двигаюсь вперёд. Уже могу редактировать контур, делая из него человека. Как в том клипе.

Дмитрий Маштаков   08.10.2022 19:56   Заявить о нарушении
Андроида?🤔

✋🤗

Сулла Славный   10.10.2022 23:39   Заявить о нарушении