Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 31.12.2019, 15:09
Аспирант
Отправить личное сообщение для Biotoxsin Посмотреть профиль Найти все сообщения от Biotoxsin
 
Регистрация: 11.04.2019
Сообщений: 74

Задачка с цифрами
Здравствуйте!

На JS получается периодически меняющееся число (0,1,2,3... т.д.) строго от 0 и до 300(Может быть любое другое) .

Как на основе этого значения сделать переменную которая будет сохранять в себе значение по системе:

Наше число N меняется до 20 и переменная становиться 20 но если N будет 21 то переменная будет иметь значение 19, и так до тех пор пока не дойдёт до значения 0, после чего числовое значение будет опять прибавляться, если N = 41 то переменная вернёт значение 1. И так постоянно пока увеличивается само значение N.

Надеюсь объяснил достаточно понятно.

Есть у кого идеи?

Извиняюсь за название не знаю как назвать то что хочу сделать.
Ответить с цитированием
  #2 (permalink)  
Старый 31.12.2019, 15:27
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

Сообщение от Biotoxsin
не знаю как назвать
возрастающая синусоида
Ответить с цитированием
  #3 (permalink)  
Старый 31.12.2019, 16:28
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

возрастающая синусоида
Biotoxsin,
<!DOCTYPE html>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  body{
     display: flex;
     position: relative;
  }

  circle {
            width: 35px;
            height: 35px;
            background-color: red;
            border-radius: 50%;
            position: absolute;
            font: 900 1.3em / 4px "Alfa Slab One", sans-serif;
            text-align: center;
            line-height: 35px;
  }

  </style>

</head>
<body>
<script>
 let limit = 20;
 let k = 0;
 let b = 1;
 const html = Array.from({length : 300}, (v, n) => {
 const circle = document.createElement("circle");
 circle.textContent = k;
 Object.assign(circle.style, {left : `${n * 15}px`, top : `${k * 30}px`});
 k += b;
 if(k == limit|| !k) b *= -1;
 if(!k && b == 1) limit += 20;
 return circle
 });
 document.body.append(...html)
</script>
</body>
</html>
Ответить с цитированием
  #4 (permalink)  
Старый 31.12.2019, 16:43
Аспирант
Отправить личное сообщение для Biotoxsin Посмотреть профиль Найти все сообщения от Biotoxsin
 
Регистрация: 11.04.2019
Сообщений: 74

Спасибо
Ответить с цитированием
  #5 (permalink)  
Старый 31.12.2019, 22:01
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от рони
возрастающая синусоида
И где она? Ты даже её не использовал для вычислении!

ЕЩЁ То, что хочет сделать автор темы, определённо имеет отношение к параболе... https://www.desmos.com/calculator/7jowhxgmmi

Вот вычисление по формуле...
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<style>
		circle {
			width: 35px;
			height: 35px;
			background-color: red;
			border-radius: 50%;
			position: absolute;
			font: 900 1.3em / 4px sans-serif;
			text-align: center;
			line-height: 35px;
		}
	</style>
</head>
<body>
	<script>
		function fn(x) {
			return Math.abs(Math.floor(Math.sqrt(x)) - Math.abs(x - Math.floor(Math.sqrt(x)) ** 2));
		}
		for(let from = 0, to = 300, x = from; x < to; x++) {
			const circle = document.createElement("circle");
			const y = 20 * fn(x / 20);
			circle.textContent = Math.round(y);
			Object.assign(circle.style, {
				left: `${x * 15}px`,
				top: `${y * 30}px`
			});
			document.body.append(circle);
		}
	</script>
</body>
</html>

Последний раз редактировалось Malleys, 31.12.2019 в 22:28.
Ответить с цитированием
  #6 (permalink)  
Старый 31.12.2019, 22:33
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

Malleys,
Ответить с цитированием
  #7 (permalink)  
Старый 03.01.2020, 16:01
Аспирант
Отправить личное сообщение для Biotoxsin Посмотреть профиль Найти все сообщения от Biotoxsin
 
Регистрация: 11.04.2019
Сообщений: 74

Сообщение от Malleys Посмотреть сообщение
И где она? Ты даже её не использовал для вычислении!

ЕЩЁ То, что хочет сделать автор темы, определённо имеет отношение к параболе... https://www.desmos.com/calculator/7jowhxgmmi

Вот вычисление по формуле...
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<style>
		circle {
			width: 35px;
			height: 35px;
			background-color: red;
			border-radius: 50%;
			position: absolute;
			font: 900 1.3em / 4px sans-serif;
			text-align: center;
			line-height: 35px;
		}
	</style>
</head>
<body>
	<script>
		function fn(x) {
			return Math.abs(Math.floor(Math.sqrt(x)) - Math.abs(x - Math.floor(Math.sqrt(x)) ** 2));
		}
		for(let from = 0, to = 300, x = from; x < to; x++) {
			const circle = document.createElement("circle");
			const y = 20 * fn(x / 20);
			circle.textContent = Math.round(y);
			Object.assign(circle.style, {
				left: `${x * 15}px`,
				top: `${y * 30}px`
			});
			document.body.append(circle);
		}
	</script>
</body>
</html>
Сообщение от рони Посмотреть сообщение
Malleys,
Это решение определённо выглядит лучше, но как сделать эту синусоиду без возрастания, чтоб переменная возвращала значение не больше 20 и возвращалась к 0 после чего опять увеличивалась. У вас же она после каждого "цикла" увеличивается на своё значение (20 > 40 > 60 а нужно 20 > 20 > 20) .
Ответить с цитированием
  #8 (permalink)  
Старый 03.01.2020, 16:16
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

Сообщение от рони
if(!k && b == 1) limit += 20;
убрать строку 37 пост #3
Ответить с цитированием
  #9 (permalink)  
Старый 03.01.2020, 16:51
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от Biotoxsin
как сделать эту синусоиду без возрастания, чтоб переменная возвращала значение не больше 20 и возвращалась к 0 после чего опять увеличивалась. У вас же она после каждого "цикла" увеличивается на своё значение (20 > 40 > 60 а нужно 20 > 20 > 20) .
Тогда определённо имеет отношение к синусу!
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<style>
		circle {
			width: 35px;
			height: 35px;
			background-color: red;
			border-radius: 50%;
			position: absolute;
			font: 900 1.3em / 4px sans-serif;
			text-align: center;
			line-height: 35px;
		}
	</style>
</head>
<body>
	<script>
		function fn(x) {
			return 0.5 + Math.asin(Math.sin(Math.PI * (x - 0.5))) / Math.PI;
		}
		for(let from = 0, to = 300, x = from; x < to; x++) {
			const circle = document.createElement("circle");
			const y = 20 * fn(x / 20);
			circle.textContent = Math.round(y);
			Object.assign(circle.style, {
				left: `${x * 15}px`,
				top: `${y * 30}px`
			});
			document.body.append(circle);
		}
	</script>
</body>
</html>


Сообщение от Biotoxsin
Здравствуйте!

Скажите, Вы не против если я буду задавать Вам вопросы напрямую в личные сообщения?
Лучше задавайте их тут, вы получите более разносторонние ответы от разных участников!
Ответить с цитированием
  #10 (permalink)  
Старый 03.01.2020, 18:15
Аспирант
Отправить личное сообщение для Biotoxsin Посмотреть профиль Найти все сообщения от Biotoxsin
 
Регистрация: 11.04.2019
Сообщений: 74

Malleys, А что делать если нужно получить такую же структуру только с отрицательным значением от -10 до 10? (именно по Вашему методу, у Рони всё ясно)

Последний раз редактировалось Biotoxsin, 03.01.2020 в 18:30.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Легкая задачка igoryan812 Работа 2 30.03.2018 09:09
Замена разделителя между цифрами chatt Общие вопросы Javascript 7 08.04.2016 17:07
Задачка: Хром / Мозилла? eirnvn Opera, Safari и др. 0 09.07.2013 13:18
задачка по геометрии js lammeR Общие вопросы Javascript 16 02.02.2011 16:01
Небольшая задачка Maksim jQuery 4 30.09.2009 19:43