Я хочу сделать необычную анимацию, где точка движется вокруг прямоугольника. Я хочу найти позицию точки одновременно t
.
Прямоугольник дается X
, Y
, Width
и Height
.
Есть ли алгоритм для этого?
Я использовал sin
/ cos
для кругов. Каков эквивалентный подход для прямоугольников?
animation
geometry
interpolation
Raildex
источник
источник
Ответы:
Я предполагаю, что ваш т идет от 0 до 1 . (Если нет, просто умножьте, чтобы масштабировать его соответствующим образом.)
Выясните, какая пропорция ( 0 - 1 ) каждой стороны периметра. ( длина стороны / общий периметр )
Чтобы узнать, сколько каждой стороны «заполнено» в момент времени t , переберите стороны, вычитая их пропорции до тех пор, пока t не опустится до отрицательного значения. Это последнее ребро (из-за которого t стало отрицательным) заполняется пропорцией (длина стороны + оставшаяся часть) / длина стороны . Остальные не заполнены.
Чтобы получить точное положение вектора в точке t , умножьте вектор каждой стороны на пропорцию той стороны, которая заполнена, и сложите их.
Это работает для любого многоугольника на самом деле!
источник
Синус и косинус t являются соответственно координатами y и x точки на окружности, образующей угол t с осью x. Нет необходимости в этом в прямоугольнике! Прямоугольник состоит из четырех линий. Если
t
идет от0
к1
, он достигает точки(px,py)
вt==0
и к(qx,qy)
вt==1
с помощью строки, заданной:если вместо
0
и1
вы переходите от времениt0
кt1
, вы можете сначала нормализовать время, а затем применить приведенную выше формулу.Теперь, для вашего прямоугольника, разделите на четыре случая
if
по каждому ребру, которое покрывает один промежуток времени, и примените движение линии.Обратите внимание, что если ваш прямоугольник выровнен по оси, у вас всегда будет либо значение x, либо значение y, которое является постоянным. Например, для t между
0
иa/4
(и предположим (X, Y) внизу слева),Что также равно:
источник
Я не знаю, есть ли реальный алгоритм для этого, но я сделал его сам (Java):
Вы должны преобразовать
x
иy
переменные , чтобы получить анимацию как большой или маленький , как вы хотите (путем умножения) и где вы хотите (добавление к / вычитания из х и у).Я не тестировал этот код, но думаю, что он должен работать. Это также должно работать для любого многоугольника с любым количеством точек (вы также можете использовать немного кода для генерации многоугольника).
источник
Дано :
По заданному времени
T1
как пройтиP
по периметру (при условии прямоугольного положения на 0,0)?Теперь немного простой начальной геометрии школы и математики (надеюсь, вы меня пощадите), чтобы получить
P.x
иP.y
изdistT1
источник