2015-10-19 21 views
0

汗學院processing.js使用度爲默認角度值,但是你可以通過修改:如何更改processing.js中的角度模式?

angleMode("radians"); 

Processing.js採用弧度爲默認值,但文檔是指角度模式(這裏作爲一個參數的旋轉功能):

角度浮動:弧度或度 根據當前的角度模式

指定的旋轉角度,但是我沒有找到一個功能來改變它。旋轉函數本身的代碼表明沒有度數模式:

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

是否有更改角度模式的方法?

+0

是的。我在with(處理)之前覆蓋了可汗學院函數:var rotateFn = processing.rotate; processing.rotate = function(angle){rotateFn(processing.radians(angle)); }你喜歡完整的代碼? – Michael

+0

我不需要看完整的代碼,但這個問題仍然被標記爲「需要答案」,所以我想與您覈對一下,看看您是否仍然需要幫助。 –

+0

我寫了答案;-) – Michael

回答

1

有沒有辦法改變的汗processing.js模式(PJS)代碼本身。所以你必須轉換價值,正如Ravi Sharma在他的回答中所寫的那樣。

因爲我不想這樣做,用汗原單的程序,因爲他們是在正常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」,你有一些例子 - 點擊一個,然後右鍵點擊,顯示源代碼),這是一個頁面實現。憤怒的所有鏈接引用z20東西與c2064.org – Michael

0

你在哪裏閱讀,你可以改變它?那將是我們需要修復的舊文檔。

使用函數radians()和degrees()進行轉換。例如:

代碼:

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

這裏:http://processingjs.org/reference/rotate_/「參數angle float:以弧度或度數指定的旋轉角度,取決於*當前角度模式* – Michael

+0

我需要這樣一個函數,以便爲KA實時編輯器編寫的程序可以輕鬆傳輸到processing.js中,否則我必須在Khan Academy中使用弧度,這對初學者來說可能不那麼透明 – Michael

0

這是一個很好的問題,讓我抓我的頭還真不少。但從我所知道的情況來看,這只是參考文獻中的一個錯字。標準Processing.js沒有angleMode函數。這很容易通過在source code中按Ctrl + f進行確認。

那麼,它爲什麼在參考?該angleMode功能並在兩個地方轉了起來:

  • p5.jsangleMode功能。這就像Processing.js,只在JavaScript方面更重要。
  • Khan Academy有一個angleMode變量。它們似乎已經在標準Processing.js之上添加了它。

我的猜測是可汗學院和Processing.js有一些發展根源。他們的工作都是John Resig。所以一些最初的代碼(和文檔)可能是複製粘貼的工作。在某些時候,文檔中包含angleMode,但不包含在源文件中。

您可以在Processing.js網站的GitHub上提交問題。

Processing.js只支持弧度(儘管你可以很容易地轉換使用radians()degrees()功能,但汗學院默認使用度,你可能會考慮修改任何後續汗學院的代碼,改爲使用度弧度:

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

然後你從那裏將與標準兼容Processing.js任何代碼,減去angleMode線。

相關問題