2017-11-18 198 views
0

我一直在試圖製作一個程序,其中一個球從一個旋轉的矩形反彈出來,我必須學習一些基本的三角函數,但是我注意到當我跑時這是它是半不準確的。就像每當球擊中矩形只是離開中心一點點時,它就會直接穿過它,或者沿着它沒有想到的方向反彈。爲了更好地理解我的問題,如果您去檢查了my fiddle,我將不勝感激。三角函數的問題:圓角與矩形相交

我認爲這是一個數學問題,(考慮到我的成績直到10或11年級纔會學到),但它可能更多。


這裏的數學funcions:

function getNormal(a) { 
    return { 
     x: Math.sin(a), 
     y: Math.cos(a) 
    } 
} 

function reflect(n, v) { 
    let d = 2 * dot(v, n); 
    v.x -= d * n.x; 
    v.y -= d * n.y; 
    return v; 
} 

function dot(v1, v2) { 
    return v1.x * v2.x + v1.y * v2.y; 
} 

回答

0

看來,一個是切線角度(面線的角度),在這種情況下,正常的計算是錯誤的

x: - Math.sin(a), 
    y: Math.cos(a) 

    (or for opposite normal) 
    x: Math.sin(a), 
    y: - Math.cos(a) 

一個更可能的問題 - 三角函數是否與你的語言中的弧度或度有關?

+0

您錯過了OP代碼的主要問題。第102行讀取'let normal = getNormal(padAngle);''padAngle'爲'undefined'並且行應該讀爲'let normal = getNormal(pad.angle);'並且我看不到deg和rad之間的任何單位轉換所以除了旋轉的規模之外,所使用的單位應該沒有問題。 – Blindman67