Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在正方形中找到最近的边界点_Java_Geometry - Fatal编程技术网

Java 在正方形中找到最近的边界点

Java 在正方形中找到最近的边界点,java,geometry,Java,Geometry,我正在创造一个游戏。游戏玩家必须留在广场内。我想通知他们到广场周边最近点的距离,如果距离变为0,我会阻止他们离开 我需要找到一个给定点从最近点到边界的距离 我有一个正方形。这个正方形的中心在(0,0)。这意味着右上角位于(侧边的1/2,侧边的1/2),左下角位于(-侧边的1/2,-侧边的1/2)。随着地图在整个游戏中缩小,我必须保持这个值的抽象性 给定一个点,X和Y,我如何找到最近的坐标点,以便测量与它的距离 Psuedocode或Java答案将不胜感激 谢谢 假设正方形与坐标轴对齐。(如果不是

我正在创造一个游戏。游戏玩家必须留在广场内。我想通知他们到广场周边最近点的距离,如果距离变为0,我会阻止他们离开

我需要找到一个给定点从最近点到边界的距离

我有一个正方形。这个正方形的中心在(0,0)。这意味着右上角位于(侧边的1/2,侧边的1/2),左下角位于(-侧边的1/2,-侧边的1/2)。随着地图在整个游戏中缩小,我必须保持这个值的抽象性

给定一个点,X和Y,我如何找到最近的坐标点,以便测量与它的距离

Psuedocode或Java答案将不胜感激


谢谢

假设正方形与坐标轴对齐。(如果不是,首先旋转整个问题)。然后将平面分为九个部分:广场内部、广场上方和左侧、正上方等:

        .      .
        .      .
        .      .
        |      |
     1  |   2  |  3
...-----+------+-----...
        |      |
     4  |   5  |  6
        |      |
...-----+------+-----...
     7  |   8  |  9
        |      |
        .      .
        .      .
        .      .
然后将坐标与构成正方形的直线进行比较,对点进行分类。如果该点位于区域1、3、7或9中,则正方形上最近的点就是相应的顶点。如果落在区域2、4、6或8中,则最近的点是对应侧上的投影。(只需将点中的适当坐标替换为边的坐标。)在区域5中,您必须确定哪一侧最近。这可以通过简单地减去适当的坐标来实现。一旦确定了最近的边,替换坐标,就完成了

由于区域5是最复杂的(并且与您的问题最相关),以下是我的做法:

让点有坐标(X,Y),正方形的边在坐标Y=Ytop,Y=Ybottom处,对于X也是如此。然后比较| X-Xleft |,| X-Xright |,| Y-Ytop |和| Y-Ybottom |以决定哪个更接近。说它是最上面的。那么正方形上最近的点是(X,Ytop),点和边之间的距离就是| Y-Ytop|


在我的叙述性描述中,我只对区域5使用了绝对值,但您可以通过反转适当的减法来避免使用绝对值。(哪些要反转取决于坐标轴的运行方式。)我也忽略了对点进行分类的问题。你只需要对任何地方的标志保持一致。

上述解决方案似乎过于复杂

首先要注意的是,从任何边到该点的最短距离始终是从该边到该点的相邻直线。因此,我会一直计算距离每条边的距离,然后选择最短的一条来显示。这应该是一个简单的计算

距上边缘的最小距离:(w*1/2)-Y位置

距离左边缘的最小距离:X位置-(-w*1/2)

距右边缘的最小距离:(w*1/2)-X位置

距底边的最小距离:Y位置-(-w*1/2)

w是正方形的总宽度


这看起来对吗?你明白了。您希望所有距离都是正数,我认为上述方法可以实现,但可能是错误的。

欢迎使用堆栈溢出!看起来你在请求家庭作业帮助。虽然我们对此本身没有任何问题,但请注意这些,并相应地编辑您的问题。@JoeC实际上,这是为我正在创建的一个游戏。玩家必须呆在这个广场内,我想通知他们到边界的距离,如果距离太低,阻止他们离开。好的。如果(X,Y)是任何坐标,那么“最近的坐标点”是什么意思?广场最近的角落?@RobertC-事实上,它永远不会是广场内点的角落。这比其他地方的答案要简单得多!谢谢你的回答,谢谢:)你的意思是(1/2)等于边长的一半,还是实际上是边长的1/2?1/2。既然你的正方形在缩小,你会做1/2*w,w是正方形的宽度。所以你的左上角实际上是1/2,1/2,而不是-1/2,1/2?是的,它实际上是-1/2,1/2,我在原来的帖子里写错了。我试过你说的,用Math.min()我得到了负距离。