Android 矩形与圆(或圆弧)的交点

Android 矩形与圆(或圆弧)的交点,android,Android,我读了很多关于这方面的帖子,要么是我的大脑不工作,要么就是找不到正确的答案 我淹没了一个分段的圆(即使用圆弧的圆),我有一个正在移动的图像视图(矩形)。我如何知道矩形和圆何时相交,以及哪个弧或交点 我能够获得imageview的矩形和圆的矩形/中心/半径 非常感谢你的帮助 谢谢检测矩形-圆形交点并找到交点 您可以将问题分解为两个较小的问题。在下列情况下,矩形和圆之间将有一个交点: 圆完全位于矩形内,或 矩形的四条边中的任意一条与圆相交 第一种情况很简单,只需检查圆的中心点是否在矩形内,并且是

我读了很多关于这方面的帖子,要么是我的大脑不工作,要么就是找不到正确的答案

我淹没了一个分段的圆(即使用圆弧的圆),我有一个正在移动的图像视图(矩形)。我如何知道矩形和圆何时相交,以及哪个弧或交点

我能够获得imageview的矩形和圆的矩形/中心/半径

非常感谢你的帮助
谢谢

检测矩形-圆形交点并找到交点

您可以将问题分解为两个较小的问题。在下列情况下,矩形和圆之间将有一个交点:

  • 圆完全位于矩形内,或
  • 矩形的四条边中的任意一条与圆相交
第一种情况很简单,只需检查圆的中心点是否在矩形内,并且是否大于或等于距每侧的半径距离。在这种情况下,有一个交点,交点弧就是整个圆。在0到4个交点之间:如果该边距离中心点的半径正好,则每条边各有一个交点;如果大于半径,则为零:完成

对于第二种情况,使用四个相交测试,矩形的每一侧一个,这将告诉您是否存在相交以及相交点是什么。可以是零,每侧一个或两个

查找相交圆弧

这仅适用于第二种情况。一旦有了交点,就可以通过查看成对的点来计算交点弧(根据起点和终点角度),一个是矩形边进入圆,另一个是边(可能不是同一条边)离开圆,根据围绕矩形边的任意缠绕方向。然后,对于每对中的每个点,取交点和圆心点之间的x和y差,并使用atan2()计算出角度。这些是相交弧的起始角和结束角,总共可能有四个这样的弧

但是,首先必须排除特殊情况。如果只有一个交点,那么圆就是在“亲吻”矩形:其中一条边距离圆的中心点正好半径,它们刚刚接触,并且没有交点弧

根据圆弧而不是圆测试矩形


如果在执行测试之前圆已分割为预定义圆弧,则可以通过比较每个交点的角度(使用atan2()计算)与每个预定义圆弧的起点和终点角度来检查每个交点所属的圆弧。类似地,如果您只想针对单个圆弧而不是整个圆测试矩形,检查给定交点的角度是否在圆弧的起点-终点范围内,如果不在,则忽略它。

我使用另一种方法:按圆半径增大矩形,并检查矩形是否包含圆心:

PointF center;
float radius;
RectF rect;

// Copy rect in another RectF instance if you need it later
rect.inset (-radius, -radius);

if (rect.contains (center.x, center.y)) {
     // Intersection
}
我希望它有助于

复制