0

Khan Academy processing.js 使用度数作为角度值的默认值,但您可以通过以下方式对其进行修改:

angleMode("radians");

Processing.js 默认使用弧度,但文档中提到了角度模式(这里作为旋转函数的参数):

角度浮点数:根据当前角度模式以弧度或度数指定的旋转角度

但我没有找到改变它的功能。rotate函数本身的代码提示没有度数模式:

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

有没有办法改变角度模式?

4

3 回答 3

1

无法更改 Khan processing.js (pjs) 代码本身的模式。因此,正如 Ravi Sharma 在他的回答中所写的那样,您必须转换这些值。

因为我不想这样做,所以使用 Khan 原始程序在正常的 processing.js / web 环境中运行,这就是我所做的:

(那不仅是把度数转换成弧度,还有鼠标和键盘输入)

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 等缺少转换。

于 2016-09-24T12:01:48.330 回答
0

这是一个很好的问题,让我摸不着头脑。但据我所知,这只是参考文献中的一个错字。标准 Processing.js 没有angleMode功能。这很容易通过在源代码中执行 ctrl+f 来确认。

那么,为什么它会出现在参考文献中?该angleMode功能确实出现在两个地方:

我的猜测是 Khan Academy 和 Processing.js 共享一些开发根源。他们都是由John Resig完成的。因此,一些初始代码(和文档)可能是复制粘贴工作。在某些时候,angleMode被包含在文档中,但不在源代码中。

您可以在 Processing.js 网站的GitHub上提交问题。

radians()Processing.js 仅支持弧度(虽然您可以使用和函数轻松转换degrees(),但可汗学院默认使用度数。因此您可以考虑修改任何后续可汗学院代码以使用弧度而不是度数:

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

然后,您从那里获取的任何代码都将与标准 Processing.js 兼容,减去该angleMode行。

于 2015-10-27T18:53:19.020 回答
0

你在哪里读到你可以改变它?那将是我们需要修复的旧文档。

使用函数 radians() 和 degree() 进行转换。例如:

代码:

// Get the sine of 90 degrees
float s = sin(radians(90));
于 2015-10-19T11:33:36.357 回答