2017-11-18 156 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