2015-10-19 1 views
0

Khan Academy Processing.js использует градусы по умолчанию для значений угла, но вы можете изменить его:Как изменить режим угла в processing.js?

angleMode("radians"); 

Processing.js использует радианы, как по умолчанию, но документация относится к режиму угла (здесь в качестве параметра от вращать функции):

угла поплавок: угол поворота, указанный в радианах или градусах в зависимости от режима

текущего угла Но я не нашел функцию для ее изменения. Код самой функции циклического сдвига позволяет предположить, что нет режима степени:

Drawing2D.prototype.rotate = function(angleInRadians) { 
    modelView.rotateZ(angleInRadians); 
    modelViewInv.invRotateZ(angleInRadians); 
    curContext.rotate(angleInRadians); 
}; 

Есть ли средство для изменения режима угла?

+0

Да. Я перезаписываю функцию Академии Хана до обработки (обработки): var rotateFn = processing.rotate; processing.rotate = function (angle) {rotateFn (processing.radians (angle)); } Вам нравится полный код? – Michael

+0

Мне не нужно видеть полный код, но этот вопрос по-прежнему отмечен как «нужен ответ», поэтому я хотел проверить с вами, чтобы узнать, нужна ли вам помощь. –

+0

Я написал ответ ;-) – Michael

ответ

1

там нет никакого способа, чтобы изменить режим в Processing.js Khan (PJS) код сам по себе.Поэтому вам нужно преобразовать значения, как писал в своем ответе Рави Шарма.

Поскольку я не хочу, чтобы сделать это, чтобы использовать Orginal программы Хана, как они должны работать в нормальных Processing.js/веб-среде, это то, что я сделал:

(Это не только преобразования градусов радианы, но также и вход мыши и клавиатуры)

var canvas = document.getElementById("canvas");                                                                   
var processing = new Processing(canvas, function(processing) { 
    processing.size(400, 400); 
    processing.background(0,0,0,0); 
    processing.sbShow = false; 

    var mouseIsPressed = false; 
    $(".container").on("mousedown touchstart", function(e) { 
     mouseIsPressed = true; 
     processing.mouseX = e.pageX; 
     processing.mouseY = e.pageY; 
     processing.sbShow = false; 
    }).on("mouseup touchend", function(e) { 
     mouseIsPressed = false; 
     processing.mouseX = e.pageX; 
     processing.mouseY = e.pageY; 
    }).on("mousemove touchmove", function(e) { 
     processing.mouseX = e.pageX; 
     processing.mouseY = e.pageY; 
    }); 
    processing.mousePressed = function() { mouseIsPressed = true; }; 
    processing.mouseReleased = function() { mouseIsPressed = false; }; 

    var keyIsPressed = false; 
    processing.keyPressed = function() { keyIsPressed = true; }; 
    processing.keyReleased = function() { keyIsPressed = false; }; 

    function getSound(s) { 
     var url = "sounds/" + s + ".mp3"; 
     return new Audio(url); 
    } 

    function playSound(s) { 
     s.play(); 
    } 

    function getImage(s) { 
     var url = "img/" + s + ".png"; 
     //processing.externals.sketch.imageCache.add(url); 
     return processing.loadImage(url); 
    } 

    var rotateFn = processing.rotate; 
    processing.rotate = function(angle) { 
     rotateFn(processing.radians(angle)); 
    } 
    var cosFn = processing.cos; 
    processing.cos = function(angle) { 
     return cosFn(processing.radians(angle)); 
    } 
    var sinFn = processing.sin; 
    processing.sin = function(angle) { 
     return sinFn(processing.radians(angle)); 
    } 

    with (processing) { 
    /////////////////////////////////////////////////////////////////////////////////////////////////// 
    // Insert original Khan academy pjs code (default is degrees) ... 

    ///////////////////////////////////////////////////////////////////////////////////////////// 
    }; 

    if (typeof draw !== 'undefined') processing.draw = draw; 
}); 

Примечание: Это не полный комплект. Есть недостатки конверсии для tan, atan, atan2 и т. Д.

+0

У вас есть это на github? похожий и не обладают навыками, чтобы заполнить остальные недостающие функции. – thinsoldier

+0

Actuall Я думаю, что код, который я использую, был первоначально скопирован от вас. – thinsoldier

+0

Нет, у меня его нет на github, но я использую его на одном из моих сайтов: c2064.org/spielplatz (просто перейдите в «Galerie», и у вас есть несколько примеров - нажмите один, затем щелкните правой кнопкой мыши, покажите исходный код). Это реализация одной страницы. ange все ссылки, которые ссылаются на zu что-то с c2064.org – Michael

0

Где вы читаете, что вы можете изменить? Это была бы старая документация, которую нам нужно исправить.

Используйте функции radians() и degrees() для преобразования. Например:

Код:

// Get the sine of 90 degrees 
float s = sin(radians(90)); 
+0

Здесь: http://processingjs.org/reference/rotate_/ «Параметры угла float: угол поворота, указанный в радианах или градусах, в зависимости от режима текущего угла * – Michael

+0

Мне понадобится такой так что программы, написанные для живого редактора KA, могут быть легко перенесены на process.js. В противном случае мне пришлось использовать радианы в Khan Academy, которые могут быть менее прозрачными для новичков. – Michael

0

Это хороший вопрос, и у меня царапины моей голове совсем немного. Но из того, что я могу сказать, это просто опечатка в ссылке. Стандартная версия Processing.js не имеет функции angleMode. Это легко подтвердить, выполнив ctrl + f в source code.

Итак, почему это в ссылке? angleMode функция не оказаться в двух местах:

  • p5.js имеет angleMode функцию. Это похоже на Processing.js, но только на стороне JavaScript.
  • Khan Academy имеет переменную angleMode. Похоже, что они добавили его поверх стандартного Processing.js.

Мое предположение было бы то, что Академия Хан и Processing.js имеют некоторые корни развития. Оба они работали на John Resig. Таким образом, некоторые из начального кода (и документации) были, вероятно, копированием. В какой-то момент в документации был включен angleMode, но не в источнике.

Вы можете отправить вопрос на него на сайт Processing.js GitHub.

Processing.js поддерживает только радиан (хотя вы можете легко конвертировать с помощью radians() и degrees() функции, но Khan Academy использует градусы по умолчанию Таким образом, вы могли бы рассмотреть вопрос об изменении любого последующего кода Khan Academy использовать радианы вместо градусов:.

void setup(){ 
    angleMode = "radians"; 
} 

Тогда любой код, который вы берете оттуда будут совместимы со стандартными Processing.js, минус, что angleMode линия.

Смежные вопросы