问题
所以我试图制作一个程序,通过计算球与线的角度 - 如果它是一条相交线 - 并旋转该线,使球从一条线上反弹找到新斜率的交点。我拥有所有算法和公式,除了我将斜率移回球动量的部分。所有计算的最终产品(我已确定工作)是线的斜率和交点或反弹点。如果我只有一个斜坡,我怎么能在弹跳后知道球在斜坡上的方向?
旁注 : 我正在使用的语言是带有一些任意外部图形库的Java 1.8,但是我没有找到代码只是插入我原先存在的代码,我正在寻找你认为我的想法的一般概念也许能做到。此外,对问题至关重要的是,整个项目都是基于坐标的。
非常感谢任何输入或可能的答案,并问我是否想要解决问题的规格!
答案 0 :(得分:3)
www.cwynn.com/bounce是几年前我制作的一个小小的html5画布,它说明了op是如何处理“反弹”的
你有你的球B,它将在碰撞点C上击中L线.B-> C形成一条线。在C之外的那条线上取一个点并将其反射到L以获得反射点R.当球击中C时,你可以删除它的方向向量,并给它C-> R的向量。你需要重置他们的速度。因此,抓住方向向量的大小,并缩放新的方向向量以匹配。
编辑:决定添加代码(这让我意识到我忘了缩放速度)
//closestCollPt[0] is the line the 'player' will hit next
var dist = player.position.dist(closestCollPt[0]);
//the 'player' in my case is a circle, so this indicates collision
if(dist < player.radius*2)
{
//the collision point to the reflection like I mentioned
//in the text above
var newDir = closestCollPt[0].vecTo(reflection);
//I break out their parts, b/c I want to scale the vector
//doable in one line, but hard to debug
var newDirX = newDir.x;
var newDirY = newDir.y;
var newDirDist = newDir.dist(new Vector(0,0));
//for whatever reason I was calling the size of a vector
//'dist' when I wrote this
var currDirDist = player.direction.dist(new Vector(0,0));
//give the player the direction we got from Coll->Ref
//scale it so their speed doesn't change
player.direction = newDir.scale(currDirDist).scale(1/newDirDist);
}
决定添加图片......
唯一的“真正”的东西是球和棕色线
'球'是粉红色的, 前往射线'路径'中心的“接触”点,
投影是球在接触点上的反射,反射是投影点在线上的反射。
一旦球接触到棕色线,它的方向向量应该从“路径”变为“新路径”(位于接触和反射的线)