Радость программиста
Несколько фигур составляют мультяшный персонаж, который можно поворачивать, передвигать и увеличивать или уменьшать в размерах.
Вопрос в том, как это можно сделать.
Передвижение контуров проблемы не составляет – поочерёдно перебираем все точки и изменяем их координаты 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)
но я про это забыл, и потому обрадовался тому, что так делать можно ))
Свидетельство о публикации №222100800471
•
Когда-то я долго не мог заставить базу данных афоризмов выстраивать записи в желательном для пользователя порядке... пока не пришло озарение наподобие Вашего.
•
«...творчество, уверяю Вас, чрезвычайно увлекательно» – и это точно!
Хомуций 08.10.2022 13:36 Заявить о нарушении
Когда ошибку находишь, то тоже приятно. Я постепенно двигаюсь вперёд. Уже могу редактировать контур, делая из него человека. Как в том клипе.
Дмитрий Маштаков 08.10.2022 19:56 Заявить о нарушении