Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Блоги > ZackMercury

Оценить эту запись

Движение по треугольнику, квадрату, пентагону, хексагону, ...

Запись от ZackMercury размещена 05.01.2019 в 23:32

Ясно с движением по окружности, но как же быть, например, с движением по квадрату?
Как двигать объект по треугольнику, пентагону?

Когда-то давно с похожей целью бродя по интернетам, я набрёл на вот эту удивительную формулу, которая поначалу кажется какой-то магией.
https://www.desmos.com/calculator/hghrnwbcdh
То, что нас интересует - это формула вписанного н-угольника в круг с радиусом 1.
Конечно, в полярных координатах.
Название: Снимок.PNG
Просмотров: 4412

Размер: 4.2 Кб,
где n - количество сторон равностороннего многоугольника

Как это работает? Потратив один день на изучение примера, посоветовавшись с людьми, которые хорошо разбираются в теме, я таки разобрал этот пример на части.
Окей, числитель этой дроби нужен для того, чтобы из описанного многоугольника сделать вписанный.
Он есть константа для многоугольника, у которого не меняется число сторон.

Далее, если идти по логическим шагам изобретения этой формулы, нам нужно для начала научиться строить простую линию в полярных координатах.
Простейший случай линии в декартовых координатах - это
X = Radius
Так как мы знаем, чему равен X в полярных координатах, давайте заменим его на rcos(theta)
rcos(theta)=Radius

далее нам нужно получить уравнение в полярных координатах, а значит, с одной из сторон должен быть r.
Разделим обе части уравнения на cos(theta), cos(theta) слева сократится, в итоге останется
r = Radius / cos(theta).

Таким образом, мы получили уравнение прямой X = Radius в полярных координатах.
Далее, немного математики, чтобы научиться вертеть эту прямую
https://www.desmos.com/calculator/tu07tefm4j

Таким образом, можно написать уравнение для одной из сторон многоугольника, используя n.
https://www.desmos.com/calculator/owctc8edtn

Как можно заметить, второй аргумент косинуса здесь - угол в радианах.

Далее, последняя часть, самая загадочная для меня на данный момент - чтобы сделать функцию периодичной, мы заворачиваем её в арксинус синуса.
В итоге получается
Название: Снимок.PNG
Просмотров: 4412

Размер: 4.2 Кб

Код AS3:
import flash.utils.getTimer;
 
var radiusOfRotation:Number = Math.sqrt(Math.pow(blueBall.x - greenBall.x,2) + Math.pow(blueBall.y - greenBall.y,2));
var sides:int = 4;
function update(e:Event = null):void
{
	var t:Number = getTimer() / 200;
	var r:Number = radiusOfRotation*Math.cos(Math.PI/sides)/Math.cos(2/sides*Math.asin(Math.cos(sides/2*t)));
	blueBall.x = greenBall.x + r * Math.cos(t);
	blueBall.y = greenBall.y + r * Math.sin(t);
}
function onSliderChange(e:Event = null):void
{
	sides = slider.value;
}
addEventListener(Event.ENTER_FRAME, update);
slider.addEventListener(Event.CHANGE, onSliderChange);
test.swf   (19.7 Кб)
Вложения
Тип файла: swf test.swf (19.7 Кб, 326 просмотров)
Всего комментариев 2

Комментарии

Старый 07.01.2019 17:58 Bletraut вне форума
Bletraut
 
Аватар для Bletraut
Мне кажется или он на углах ускоряется?
Старый 07.01.2019 18:04 ZackMercury вне форума
ZackMercury
 
Аватар для ZackMercury
Да, он на углах ускоряется. Это происходит по той причине, что аргумент функции - это текущий угол.
Тоесть, угловая скорость здесь константа, но вот скорость перемещения самого объекта будет меняться в зависимости от того, насколько путь объекта параллелен или перпендикулярен прямой, проведённой из центра вращения.
Т.е. чем менее путь перпендикулярен - тем быстрее объект будет двигаться.

И да, можно заменить t на функцию f(t), которая будет учитывать это и корректировать t, чтобы объект перемещался с одинаковой скоростью, но это уже будет чрезвычайно сложно для статьи в блоге.

Однако целью статьи является мой личный интерес к данной формуле, и попытка объяснить, как я бы думал, если бы хотел её изобрести.
 

 


Часовой пояс GMT +4, время: 18:43.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.