Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Canvas. Как сделать или вообще нельзя? Вращение рандомизированно изменяемого объекта. (https://javascript.ru/forum/misc/43614-canvas-kak-sdelat-ili-voobshhe-nelzya-vrashhenie-randomizirovanno-izmenyaemogo-obekta.html)

Zemsky 18.12.2013 21:13

Спасибо! Можно попробовать организовать алгоритм так, чтобы за N шагов каждое положение из 4-х повторялось N/4 раз. Сейчас я, правда, попытаюсь привязать клавиши Стрелки клавиатуры к повороту квадрата. Почти игра получается. Если правильно ответил как повернут квадрат, очко плюс, если неправильно, минус. Все интереснее...

рони 18.12.2013 21:23

Цитата:

Сообщение от Zemsky
Можно попробовать организовать алгоритм так, чтобы за N шагов каждое положение из 4-х повторялось N/4 раз.

массив 4 элемента -- перемешиваем -- выбираем -- закончился массив - переходим к 1 шагу

nerv_ 18.12.2013 21:36

http://www.w3.org/html/wg/drafts/2dc...nvas/#examples

Zemsky 18.12.2013 21:41

Цитата:

Сообщение от рони (Сообщение 287687)
массив 4 элемента -- перемешиваем -- выбираем -- закончился массив - переходим к 1 шагу

Именно это и смотрел. Но при переходе на следующий массив надо обеспечить, чтобы 1 элемент второго массива не был бы равен последнему из первого.

Zemsky 18.12.2013 21:45

Цитата:

Сообщение от nerv_ (Сообщение 287695)

Да, я этот ресурс знаю. Спасибо!

рони 18.12.2013 22:15

:write:
генератор цепочек неповторяющий подряд и равномерного распределения для любого количества элементов >=3.
<!DOCTYPE HTML>
<html>
<head>
  <title>Untitled</title>
</head>
<body>
<script>
function rund(e) {
    function d(b) {
        for (var a = b.length - 1; 0 < a; a--) {
            var c = Math.floor(Math.random() * (a + 1)),
            d = b[c];
            b[c] = b[a];
            b[a] = d
        }
        return b
    }
    var a = [],
        c = [];
    for (i = 0; i < e;) a[i] = ++i;
    d(a);
    return function () {
        var b = a.shift();
        c.push(b);
        1 == a.length && (d(c), a = a.concat(c), c = []);
        return b
    }
};

 var N = 40000,
     a = [],
     e = 4,
     z = rund(e),
     i;
 for (i = 0; i < e + 1; i++) {
     a[i] = 0;
 }
 for (i = 0; i < N; i++) {
     a[z()]++;
 }
 alert(a); //проверка равномерности ноль неучитывается
 for (i = 0; i < 40; i++) {
     document.write(z()+' '); //для примера
 }
</script>
</body>
</html>

Zemsky 18.12.2013 22:32

рони,
Вы это сходу написали? Да... :) Мне есть куда стремиться.

рони 18.12.2013 22:36

Zemsky,
:victory: :dance: дорогу осилит идущий

Zemsky 18.12.2013 22:54

Ищущий да обрящет..:write:

Со стрелками через case разбираться?

рони 18.12.2013 23:00

Цитата:

Сообщение от Zemsky
Со стрелками через case разбираться?

как удобнее -- можно и через ключи обьекта


Часовой пояс GMT +3, время: 21:14.