微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将直线的起点和终点修剪到它们进入/退出矩形的位置吗?

如何解决将直线的起点和终点修剪到它们进入/退出矩形的位置吗?

我正在做一些画布绘画,出于性能原因,我想获取直线进入和/或离开屏幕的位置的坐标。

为了简单起见,我想在下图中找出坐标A'B'AB是原始的开始和结束坐标。 A'B'是从AB的直线进入或退出屏幕边界的坐标。

这似乎是一种常见的情况,但是我真的找不到一种简单有效的算法。

enter image description here

我正在使用Flutter,但是我想这是一个普遍的问题,无论使用哪种语言(A和B是点,屏幕都是矩形),都采用类似的解决方案。

解决方法

我们得到以下参数和方程式:

  • 点A和B由它们各自的坐标(xA,yA)(xB,yB)给出;
  • 边界框由4个不等式xMin <= x; x <= xMax; yMin <= y; y <= yMax;
  • 线(AB)由其方程(y-yA)*(xB-xA) = (yB-yA)*(x-A)给出。

我们可以使用它们来求解交点:

  • 在前两个示例中,可以通过设置(x,y)并求解A'的线方程来找到y=yMax的坐标x
  • 在第一个示例中,您可以通过设置(x,y)并求解B'的线方程来找到x=xMax的坐标y
  • 在第三个示例中,您可以通过设置(x,y)并求解B'的线方程来找到y=yMin的坐标x

要在所有可能的情况下使用边界框找到所有相交点,可以求解所有4种可能的相交类型的方程式,然后丢弃以下任一种解决方案:

  • 不满足边界框不等式(这些解是与边界框边的“连续”相交);或
  • 不满足线段[AB]周围的隐式边界框的不等式(这些解决方案是线(AB)与边界框的交点,如果只需要线段[[ AB]和边框)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。