правильная(!) Логика зацикливания анимации "туда - обратно".
Есть задача зациклить движение некоего объекта на странице. Важна именно логика поэтому работать будем с одной переменной - X.
Итак, задача такова: 1)X инициируется со значением 0 2)при каждой итерации он увеличивается на 0.1 и растёт до 1 3)как только он стал равен 1, он начинает уменьшаться до -1 с тем же шагом 4)опустившись до -1 он снова растет до 1 5)и так по кругу до бесконечности Вопрос как правильно составить логику? мой вариант(нерабочий): var back,x,cicle; x = 0; back = !true; cicle = setInterval(function(){ if (!back) { x+=0.1;if (x>=1) {back = true;}} else {x-=0.1;if (x<=-1) {back = !true;}} console.log(x); },100); Вот что выдает этот скрипт: (прошу прощения, я не нашёл как ставить спойлер) 0.1 0.2 0.30000000000000004 0.4 0.5 0.6 0.7 0.7999999999999999 0.8999999999999999 0.9999999999999999 1.0999999999999999 0.9999999999999999 0.8999999999999999 0.7999999999999999 0.7 0.6 0.5 0.4 0.30000000000000004 0.20000000000000004 0.10000000000000003 2.7755575615628914e-17 -0.09999999999999998 -0.19999999999999998 -0.3 -0.4 ... и так далее Итак кто чем может помочь прошу под кат. |
_Walker,
var x = 0, back = true, cicle = setInterval(function(){ x += back ? 0.1 : -0.1; if (x>1||x<0) back = !back; console.log(x); },100); |
Цитата:
|
Цитата:
var x = 0, back = true, cicle = setInterval(function(){ x += back ? 0.1 : -0.1; if (x.toFixed(1)>=1||x.toFixed(1)<=-1) back = !back; console.log(x.toFixed(1)); },100); Я понимаю что этот .tofixed(1) можно вставить в одно место, чтоб код был аккуратнее, но пока не нашёл куда. А ваш код просто красота! Подскажите, что можно почитать чтоб прокачать скилы составления/расчета логики алгоритмов, в идеале в формате игры или курсов с заданиями типа KhanAcademy. У меня нет программерского образования, но я когда-то заканчивал техникум на электронщика. Там мы решали задачи типа: сколько вариантов выходного сигнала будет при определённом количестве входящих сигналов, но уже многое позабыл. Это было очень увлекательно, теперь хочу вспомнить это и применять в программировании. |
Цитата:
x=x.toFixed(1); |
_Walker,
читать учебник, он недавно обновился, качаться можно здесь на форуме - ссылки вверху :) |
Цитата:
UPD: Слышал краем уха, что есть такие штуки как паттерны - может я говорю именно о них? Повторюсь я хочу иметь в голове примерный план действий при обработке задачи, например: 1) проверить какие данные и в каком количестве приходят. 2) просчитать количество возможных комбинаций для проверок 3) построить дерево условий/зависимостей 4) написать код на любимом языке 5) сделать все проверки и быть уверенным, что ни при каких входных данных скрипт на выдаст исключение (Exception) 6) получить профит |
_Walker,
я не думю что у вас получится понять программирование в целом, не изучая при этом конкретного языка. Все приходит с опытом и понимание алгоритмов и их нахождение. Опыт получается в ходе работы с конкретным языком. Да есть паттерны программирования, они часто подходят ко многим языкам программирования. А могут и не подходить (не все, а какие-то конкретные) или быть не нужными в силу особенностей языка. К тому же не думаю что вы осилите паттерны без знания хотябы одного языка опятьже. |
Самый простой способ научиться решать задачи - это решать задачи. На лоу уровне ничего лучше мне неизвестно. Способности формализовывать задачи и оперировать большой цикломатической сложностью можно тренировать и искуственно, но я не знаю как делать это достаточно эффективно.
Паттерны - это уже имхо advanced уровень, когда ты умеешь нормально писать на каком-то языке и озабочен всякими архитектурными задачами и взаимодействием с другими разработчиками. Теперь про алгоритмическую подготовку.Нужно понимать одну вещь: алгоритмическая подготовка - вещь безусловно очень полезная для программирования, но в основном потому что она мозги шевелиться заставляет. Для работы хорошее знание тех или иных алгоритмов пригождается немногим. Если чисто для себя интересно - другое дело. К конкретике: Решение практических задач: basic - любой задачник по информатике/учебник с задачами (в том числе учебник Кантора конечно), студенты набегающие в сессию на множество программистских форумов, работа middle - работа Паттерны: basic - ненене! middle - банда четырех Алгоритмы: Basic: Теория - мне понравилась 1я часть этого курса на курсере от того же автора. Она там где-то есть, просто искать лень). Ну то есть это не basic-для идиотов, но достаточно понятно. Курса для идиотов по алгоримам мне неизвестно) Практика: Идешь на topcoder.com, регишься, смотришь список задач на algorithm competition и пытаешься решить самые легкие из них. Advanced - хз, я еще близко не адвансед, но думаю продолжение тех же алгокурсов и решение более сложных задач могут помочь |
tsigel
Спасибо, за отклик. Я понимаю что учить ЯП необходимо, но меня интересовал вопрос именно по теории программирования. Я, увы, не учился в институте - у нас, к сожалению, нет нормальных ВУЗов, где работают знающие (читай - практикующие) преподы, и где дают знания, а не собирают урожай "зелёных листиков" каждую сессию. Покупать диплом в течении 4-5ти лет мне не улыбается, поэтому изучаю то, что необходимо конкретно мне, и для конкретных задач. |
Часовой пояс GMT +3, время: 06:51. |