Louis Asked:2024-11-17 01:31:33 +0000 UTC2024-11-17 01:31:33 +0000 UTC 2024-11-17 01:31:33 +0000 UTC 如何找到圆角的中间点? 772 有一个带圆角的矩形轮廓。如何找到其左上角和左下角的平均坐标? 我这样做了: sum = np.sum(cnt, axis=-1) tl = cnt[np.argmin(sum)] diff = np.diff(cnt, axis=-1) bl = cnt[np.argmax(diff)] 上面的代码将找到第二个图所示的角点。但是,即使图形可以旋转,如何找到角的中心呢? python 1 个回答 Voted Best Answer rotabor 2024-11-17T01:45:39Z2024-11-17T01:45:39Z 左侧显示的点与边的距离为r*(1-SQRT(2)/2),其中 r 是曲率半径。 如果只有一个包含轮廓点的数组,那么首先需要遍历该数组并找到边点。如果成对的 dx = dy,则三个点位于同一侧。然后找到边的极值点,然后使用边的极值点,为每对找到数组中它们之间的中间点。 它甚至可以做得更快。当然,数组中的起点与某些东西相关联。让它成为右图中的底部点。并且遍历轮廓的方向也是已知的,令其为顺时针方向。 然后对于第一对点,我们确定正弦 dy1 和余弦 dx1。所需点处的切线将向 45 度 (pi/4) 减(顺时针)方向倾斜。也就是说,我们进一步遍历数组并寻找一对具有 dy2=sin(arcsin(dy1)-pi/4) 和 dx2=cos(arccos(dx1)-pi/4) 的点。可以将这些点之一作为所需的点。我们寻找接下来三对旋转 90 (pi/2) 的点,即 (dx,dy):(-dу2,dх2)、(-dx2,-dy2) 和 (dy2,-dx2)。 由于无法准确找到 dx2 和 dy2,因此有必要考虑点的三元组,以便所需的数量位于相应的数量对之间。并记住极端情况。 如何确定三个点(x1,y1)、(x2,y2)和(x3,y3)位于同一条直线上?表达式必须为真: (x3 >= x2 >= x1 or x3 <= x2 <= x1) and ((x2 - x1) == 0 and (x3 - x2) == 0 or (x2 - x1) != 0 and (x3 - x2) != 0 and (y2 - y1)/(x2 - x1) == (y3 - y2)/(x3 - x2))
左侧显示的点与边的距离为
r*(1-SQRT(2)/2),其中 r 是曲率半径。如果只有一个包含轮廓点的数组,那么首先需要遍历该数组并找到边点。如果成对的 dx = dy,则三个点位于同一侧。然后找到边的极值点,然后使用边的极值点,为每对找到数组中它们之间的中间点。
它甚至可以做得更快。当然,数组中的起点与某些东西相关联。让它成为右图中的底部点。并且遍历轮廓的方向也是已知的,令其为顺时针方向。
然后对于第一对点,我们确定正弦 dy1 和余弦 dx1。所需点处的切线将向 45 度 (pi/4) 减(顺时针)方向倾斜。也就是说,我们进一步遍历数组并寻找一对具有 dy2=sin(arcsin(dy1)-pi/4) 和 dx2=cos(arccos(dx1)-pi/4) 的点。可以将这些点之一作为所需的点。我们寻找接下来三对旋转 90 (pi/2) 的点,即 (dx,dy):(-dу2,dх2)、(-dx2,-dy2) 和 (dy2,-dx2)。
由于无法准确找到 dx2 和 dy2,因此有必要考虑点的三元组,以便所需的数量位于相应的数量对之间。并记住极端情况。
如何确定三个点(x1,y1)、(x2,y2)和(x3,y3)位于同一条直线上?表达式必须为真: