三角学问题:圆与矩形碰撞
Problems with trigonometry: Circles coliding with rectangles
我一直在尝试制作一个球从旋转矩形反弹的程序,为此我必须学习一些基本的三角学,但是当我 运行 时我注意到的是这是半不准确的。就像每当球稍微偏离中心一点点击中矩形时,它要么直接穿过,要么朝它不应该的方向弹开。为了更好地了解我的问题,如果您去查看 my fiddle.
,我将不胜感激
我认为这是数学问题,(考虑到我的年级要到 10 年级或 11 年级才能学会),但可能更多。
这是数学函数:
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;
}
好像a是切线角(面线的角度),这种情况下你的正常计算是错误的
x: - Math.sin(a),
y: Math.cos(a)
(or for opposite normal)
x: Math.sin(a),
y: - Math.cos(a)
另一个可能的问题 - 三角函数在您的语言中使用弧度还是度数?
我一直在尝试制作一个球从旋转矩形反弹的程序,为此我必须学习一些基本的三角学,但是当我 运行 时我注意到的是这是半不准确的。就像每当球稍微偏离中心一点点击中矩形时,它要么直接穿过,要么朝它不应该的方向弹开。为了更好地了解我的问题,如果您去查看 my fiddle.
,我将不胜感激我认为这是数学问题,(考虑到我的年级要到 10 年级或 11 年级才能学会),但可能更多。
这是数学函数:
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;
}
好像a是切线角(面线的角度),这种情况下你的正常计算是错误的
x: - Math.sin(a),
y: Math.cos(a)
(or for opposite normal)
x: Math.sin(a),
y: - Math.cos(a)
另一个可能的问题 - 三角函数在您的语言中使用弧度还是度数?