1) Calculate the polygon's perimeter (or estimate it if exact time of circling
is not critical)
2) divide the perimieter by the time desired for circling
3) move point around polygon at this speed.
Редактировать после комментариев гнева и проклятия.
Возможно, я читаю вопрос слишком буквально, я не вижу сложности или вопросов, поднятых ire_and_curses.
Следующее описывает более конкретно логику, которую я представляю для шага № 3. Более точное описание потребовало бы знания деталей о системе координат, структуре, используемой для описания многоугольника, и указания относительно желаемой / разрешенной частоты обновления анимации.
«Точка перемещения», которая проходит вокруг многоугольника, будет начинаться с на на любом ребре полигопа (возможно, на вершине, чтобы сделать начальную и конечную точку более очевидной) и останется на край все время .
С этой начальной точки, будь то предопределенной или выбранной случайным образом), точка перемещения будет двигаться в направлении вершины с вычисленной скоростью. Оказавшись там, он должен был идти к другой вершине ребра, к которому он только что прибыл, и продолжаться, пока не вернется к начальной точке.
Уравнения для вычисления точек на заданном ребре те же, что и для трассировки многоугольника: простой триг или даже Пифагор (*) . Визуальный эффект основан на обновлении положения точки движения, по крайней мере, 15 раз в секунду. Частота обновления (или, скорее, ее период) может использоваться для определения расстояния двух последовательных точек анимации.
Единственная менее тривиальная задача - обнаружить конец заданного ребра, т. Е. Когда точка перемещения должна «повернуться», чтобы следовать за следующим ребром. В этих случаях необходимо вычислить дробное расстояние перемещения, чтобы следующая точка в анимации находилась на следующем ребре. Особо отметим также для очень коротких ребер, так как они могут потребовать повторения логики дробного расстояния (или сделать иначе).
Извините за столь подробное объяснение довольно прямолинейного буквально ;-) алгоритма ...
Исправление : как отметил Джефроми в комментарии для другого ответа, все, что необходимо в отношении трассировки, - это просто разложить компоненты x и y движения. Хотя нам нужен Пифагор для вычисления расстояния между каждой вершиной для расчета периметра, и нам нужно экстраполировать, потому что число шагов анимации на ребре не [обязательно] является целым числом.