gpt4 book ai didi

java - 快速圆碰撞检测

转载 作者:太空狗 更新时间:2023-10-29 23:00:20 25 4
gpt4 key购买 nike

我正在尝试编写一种方法来计算两个圆圈是否重叠。我想出了以下内容,我只是想知道是否可以进一步优化它。

private static boolean isCollision(Point2D p1, float r1, Point2D p2, float r2)
{
float a,dx, dy;
a = (r1+r2) * (r1+r2);
dx = (float) (p1.getX() - p2.getX());
dy = (float) (p1.getY() - p2.getY());

if (a > (dx*dx) + (dy*dy))
{
return true;
}
return false;
}

最佳答案

嗯。就数学而言,这看起来相当不错。关于如何使它的 Java 端更快更简洁的一些小要点:

  • 如果您使用 double 而不是 float 作为半径,则不必将 double 向下转换为 float 。
  • 如果您特别要求 Point2D.Double 参数,您可以使用它们的 x 和 y 公共(public)字段而不是使用 getter。
  • 此外,为什么 if (foo) { return true; } else { 返回错误; }? 只需执行 return foo;!

一个改进的版本,那么:

private static boolean isCollision(Point2D.Double p1, double r1, Point2D.Double p2, double r2)
{
final double a = r1 + r2;
final double dx = p1.x - p2.x;
final double dy = p1.y - p2.y;
return a * a > (dx * dx + dy * dy);
}

(请注意,如果您的代码完全基于 float ,您可以使用 Point2D.Floatfloat 做同样的事情。)

关于java - 快速圆碰撞检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/697188/

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