gpt4 book ai didi

java - 如何将一组坐标约束到圆形区域?

转载 作者:行者123 更新时间:2023-12-02 08:03:56 25 4
gpt4 key购买 nike

我正在制作一个小游戏,我有一个可以向各个方向(x 和 y)移动的角色,他的速度简单地存储在两个整数中,vxvy 。现在,我想把他限制在一个设定的区域,但这个区域不应该是正方形,而应该是圆形。通过简单应用距离公式,我可以轻松检测到角色何时位于圆外,但这不是问题。我不知道该怎么办。如何计算圆内距离出界坐标最近的点?更重要的是,我如何弄清楚如何修改速度变量以匹配此边界?

到目前为止,我已经确定可以通过一些简单的三角函数找到圆上最近的点:

double angle = Math.atan2(posX, posY);
posX = (int)(Math.cos(angle)/radius);
posY = (int)(Math.sin(angle)/radius);

但这似乎还可以改进。我完全迷失了其他元素。请帮忙?

最佳答案

假设圆心位于(0,0),那么精确值实际上可以很好地计算出来。 .

当角色出界时,我们通过将旧值缩放 r/D 将角色带回边界,其中D=sqrt(x^2+y^2) :

x*=r/D
y*=r/D

注意:这实际上相当于您使用 trig 的方式,因为

r*cos(tan(y/x))=r*x/sqrt(x^2+y^2)

然后,您可以将速度设置为零,或通过设置 vx*=k 来模拟碰撞边界。和vy*=k ,其中k-1和0之间的阻尼常数。

作为额外的接触,您可以使角色在边界附近减速

vx*=k*[(r-D)/r]

需要额外的项,因为比例因子取决于位置:越接近边界,我们希望速度降低得越多。在这里,k介于 0 和正 1 之间,因为我们只是减速,而不是倒车。

关于java - 如何将一组坐标约束到圆形区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8462042/

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