gpt4 book ai didi

reflection - XNA 碰撞检测 - Vector2.Reflect - 帮助计算圆形 Sprite 的法线 - C#

转载 作者:行者123 更新时间:2023-12-04 00:45:06 29 4
gpt4 key购买 nike

我无法思考如何计算二维空间中移动圆的法线。我已经达到了我想计算物体速度(方向速度)的法线的程度,但这就是我的大学代数思想过热的地方,我正在处理的任何二维圆圈中心点、半径、速度和位置。

最终我想使用 Vector2.Reflect 方法从这个练习中获得更逼真的物理效果。

提前致谢。

编辑:添加了一些尝试建议的代码(无济于事),可能误解了建议。在这里,我使用的是篮球和棒球,因此是 base 和 basket。我还有 Position 和 Velocity,它们被添加到位置以创建运动。

if ((Vector2.Distance(baseMid, basketMid)) < baseRadius + basketRadius)
{
Vector2 baseNorm = basketMid - baseMid;
baseNorm.Normalize();
Vector2 basketNorm = baseMid - basketMid;
basketNorm.Normalize();
baseVelocity = Vector2.Reflect(baseVelocity, baseNorm);
basketVelocity = Vector2.Reflect(basketVelocity, basketNorm);
}

basePos.Y += baseVelocity.Y;
basePos.X += baseVelocity.X;
basketPos.Y += basketVelocity.Y;
basketPos.X += basketVelocity.X;
basketMid = new Vector2((basketballTex.Width / 2 + basketPos.X), (basketballTex.Height / 2 + basketPos.Y));
baseMid = new Vector2((baseballTex.Width / 2 + basePos.X), (baseballTex.Height / 2 + basePos.Y));

最佳答案

首先是反射。如果我没看错您的代码,Vector2.Reflect 的第二个参数是表面的法线。水平地板的法线为 (0,1),速度为 (4,-3) 的球击中它并以速度 (4,3) 飞走。那正确吗?如果那不对,那么我们将不得不更改 if 语句的主体。 (请注意,您可以通过设置 basketNorm = -baseNorm 来节省一些周期。)

现在是物理学。正如所写,当两个球碰撞时,每个球都会弹开,就好像它撞到了与两个球体相切的玻璃墙,这是不现实的。想象一下打台球:一个快速的红球击中一个静止的蓝球死点。红球是否反弹并离开蓝球?不,蓝球被撞开,红球失去了大部分速度(在完美的情况下)。一个炮弹和一个高尔夫球怎么样,它们都以相同的速度运动但方向相反,迎头相撞。他们会平等地反弹吗?不,炮弹会继续,几乎没有注意到撞击,但高尔夫球会改变方向飞走,比来的更快

要了解这些碰撞,您必须了解动量(如果您想要弹性不完全的碰撞,例如 bean 袋碰撞,您还必须了解能量)。一本基础物理教科书将在前面的章节中介绍这一点。如果您只想模拟这些东西,请使用质心框架:

Vector2 CMVelocity = (basket.Mass*basket.Velocity + base.Mass*base.Velocity)/(basket.Mass + base.Mass);baseVelocity -= CMVelocity;baseVelocity = Vector2.Reflect(baseVelocity, baseNorm);baseVelocity += CMVelocity;basketVelocity -= CMVelocity;basketVelocity = Vector2.Reflect(basketVelocity, basketNorm);basketVelocity += CMVelocity;

关于reflection - XNA 碰撞检测 - Vector2.Reflect - 帮助计算圆形 Sprite 的法线 - C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2212042/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com