Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 04.02.2020, 11:54
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,127

Сообщение от potatosboxon
На 0:Y обьект должен перемещаться со скоростью 1.
На 5:Y обьект должен перемещаться со скоростью 5.
При движении от 0 к 5, от 5 к 0 - должна меняться скорость.
При перемещении по X скорость должна сохраняться заданная при перемещении по Y.
не осилил.
Ответить с цитированием
  #12 (permalink)  
Старый 05.02.2020, 10:50
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от potatosboxon
У меня сетка 5x5.
На 0:Y обьект должен перемещаться со скоростью 1.
На 5:Y обьект должен перемещаться со скоростью 5.
При движении от 0 к 5, от 5 к 0 - должна меняться скорость.
Т. е. вам нужно такое перемещение объекта, чтобы находясь в верхней части его скорость была 1 ячейка сетки / сек., а находясь в нижней части — 5 ячеек сетки / сек. Объект проходит 5 ячеек. Притом должно быть поступательное движение.

Давайте разбираться. Получается, что начальная скорость v₀ = 1, конечная скорость v₁ = 5. Объект начинает двигаться от точки s₀ = 0 и завершает своё движение в точке s₁ = 5. Движение начинается в момент времени t₀ = 0 и завершается в t₁, которое мы можем вычислить основываясь на том, что объект движется равноускоренно, т. е. ускорение a₀ постоянно.

Время окончания движения можно вычислить по формуле равноускоренного движения. Вычислив время завершения t₁, можно узнать ускорение a₀. Теперь у нас есть все константы, чтобы вычислить пройденный путь s и скорость v (для проверки) объекта в любой момент времени t.

Поскольку вас интересует только движение на отрезке времени [t₀; t₁], то можно через каждые t₁ - t₀ секунд оборачивать время вспять. Например при помощи обратных тригонометрических функции.

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>Document</title>
	<style>

#grid {
	position: relative;
	width: 500px;
	height: 500px;
	background:
		repeating-linear-gradient(  0deg, var(--r)),
		repeating-linear-gradient(-90deg, var(--r));
	--c: 5;
	--w: 1px;
	--r: transparent 0 var(--w), rgba(0, 0, 0, 0.05) 0 calc(100% / var(--c));
}

#grid > .circle {
	width: 20px;
	height: 20px;
	background: yellowgreen;
	border-radius: 50%;
	margin: -10px 0 0 -10px;
	position: absolute;
	left: 50%;
}

#grid > .info::after {
	position: absolute;
	content: "v = " var(--v);
	white-space: nowrap;
	background: black;
	color: white;
	font: 1em monospace;
	border-radius: 0.25em;
	margin: 0.5em;
	padding: 0.2em 0.5em;
	right: 0;
	top: 0;
}

	</style>
</head>
<body>
	<div id="grid">
		<div class="info"></div>
		<div class="circle"></div>
	</div>

	<script>

const v0 = 1;
const v1 = 5;

const s0 = 0;
const s1 = 5;

const t0 = 0;
const t1 = 2 * s1 / (v0 + v1);

const a0 = (v1 - v0) / (t1 - t0);

function s(t) {
	return 0.5 * a0 * t ** 2 + v0 * t + s0;
}

function v(t) {
	return a0 * t + v0;
}

function F(x) {
	return t1 * (Math.acos(Math.cos(Math.PI * x / t1))) / Math.PI;
}

const circle = document.querySelector("#grid > .circle");
const info = document.querySelector("#grid > .info");
(function loop(time) {
	circle.style.transform = `translateY(${100 * s(F(time / 1000))}px)`;
	info.style.setProperty("--v", `"${v(F(time / 1000)).toFixed(2)}"`);

	requestAnimationFrame(loop);
})(performance.now());

	</script>
</body>
</html>


ЕЩЁ Упомянутые графики — https://www.desmos.com/calculator/dejdiypcao

Последний раз редактировалось Malleys, 05.02.2020 в 10:58.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу получить доступ к свойству обьекта SANIOK_AV Общие вопросы Javascript 2 22.11.2019 21:45
использование prototype для создания конструктора обьекта greenrow Общие вопросы Javascript 4 02.06.2016 20:03
правильное создание обьекта веб сокет oxxy AJAX и COMET 0 11.12.2015 15:22
Назначить на обработчик события метод обьекта Logo Общие вопросы Javascript 11 20.06.2009 23:40
AJAX, вызов из метода обьекта Logo Общие вопросы Javascript 4 20.06.2009 23:35