Math 弹跳球通过曲面后如何重新定位
我有一个弹跳球,它可以与任意坡度的直线碰撞。球穿过几条线,我需要把球放回距离线“半径”的地方 球(具有变量x、y和半径)以速度x和速度(从向量directionX和directionY乘以变量得到)移动,我可以知道中心和线之间的距离(dist),因此我可以知道球穿过线的像素数 假设在这个示例中,球在直线后经过10个像素(radius-dist),我需要将球的中心设置为相反向量(directionX directionY)中的10个像素。我的问题是:Math 弹跳球通过曲面后如何重新定位,math,graphics,language-agnostic,collision-detection,trigonometry,Math,Graphics,Language Agnostic,Collision Detection,Trigonometry,我有一个弹跳球,它可以与任意坡度的直线碰撞。球穿过几条线,我需要把球放回距离线“半径”的地方 球(具有变量x、y和半径)以速度x和速度(从向量directionX和directionY乘以变量得到)移动,我可以知道中心和线之间的距离(dist),因此我可以知道球穿过线的像素数 假设在这个示例中,球在直线后经过10个像素(radius-dist),我需要将球的中心设置为相反向量(directionX directionY)中的10个像素。我的问题是: 我如何计算如何在x和y之间分割这n个像素,以
我如何计算如何在x和y之间分割这n个像素,以便从中心坐标中减去它们?我可以想象你拥有4种不同的分辨率,但不清楚你想要哪一种 在这里,黑色箭头是碰撞前的帧和你正在询问如何绘制的帧之间的球中心的移动 A) 你现在的处境
- 赞成:简单
- 控球:球处于身体不可接受的位置
- 赞成:最准确
- 缺点:你没有一个让球接触到表面的框架(但是你在乎吗?)
- pro:在平行于曲面的方向上保持精度
- 缺点:球的中心不在反射线上(即,我们可以随意使用笛卡尔定律)
- 赞成者:只有速度/计时有问题
- 反对:呃。。。。这里没有想法。还是不如B精确
嗯,不考虑所有的图画,只取球的中心就容易多了,并且认为它碰到的是真实表面的半径(和它平行),所以我们只有一个点的力学。因此,从前面的图像中,我们得到以下红色物体的公式:
那么我们需要做些什么呢? 无扰动轨迹从点S
开始,在点E
结束(情况A的终点)。我们将调用C
两条线之间的碰撞点(红色线和轨迹,因此是轨迹D的端点)
我将假设我们总是在碰撞的情况下,因此未受干扰的轨迹和曲面之间的交点总是存在的
您还需要垂直于曲面的向量u
。确保取一个指向球所在侧的单位向量。因此,如果你的斜率有一个等式ax+by+c=0
,从向量(a/sqrt(a*a+b*b),b/sqrt(a*a+b*b))
开始,如果它指向错误的一侧,将两个坐标乘以-1
然后,要将线沿u
方向移动一段距离r
,需要方程a(x-r*u.x)+b(y-r*u.y)+c=0
,因此ax+by+c-r*(a*u.x+b*u.y)=0
因此,如果r
是半径,并且ax+by+c=0
你的曲面,红线的方程是ax+by+c+r*sqrt(a*a+b*b)=0
或-r
如果球在线下
我将写出PQ
从点p
开始到点Q
结束的向量,因此所述向量的坐标将是(Q.x-p.x,Q.y-p.y)
,两个向量之间的
表示标量积
因此,您可以用您命名的变量directionX
、directionY
和dist
来表示SE
- A) 通过
移动中心。耶,完成了李>SE
- B) 获取
。将中心移动C
:因此总移动量,但将超出曲面的SE-2*(CE.u)*u
法向分量移除两倍,有效地通过该曲面镜像CE
向量CE
- C) 获取
。通过C
SE-(CE.u)*u移动中心:相同,但仅移除
的法线分量一次,有效地将CE
向量投影到红线上CE
- D) 获取
。通过C
移动中心SC
- 赞成:简单
- 控球:球处于身体不可接受的位置
- 赞成:最准确
- 缺点:你没有一个让球接触到表面的框架(但是你在乎吗?)
- pro:在平行于曲面的方向上保持精度
- 缺点:球的中心不在反射线上(即,我们可以随意使用笛卡尔定律)
- 赞成者:只有速度/计时有问题
- 反对:呃。。。。这里没有想法。还是不如B精确