矢量绘图应用程序如何执行此操作?

时间:2010-08-11 02:27:45

标签: c++ c algorithm

在Illustrator中,您可以拖动一个矩形,它将选择其中的所有对象。它超越了边界框测试,因为它确保了它接触多边形的实际部分。那么它如何有效地做到这一点? (最好使用C或C ++实现)

由于

2 个答案:

答案 0 :(得分:3)

如果要检查多边形P的任何部分是否在矩形R内,则可以执行以下操作:

  • 如果P的任何顶点在R内,则返回TRUE;
  • 如果R的任何顶点在P内,则返回TRUE;
  • 如果P的任何边(相邻顶点之间的线)与R的边相交,则返回TRUE。
  • 否则,返回FALSE。

答案 1 :(得分:0)

你也可以构造矩形与对象的交集(一个像Illustrator这样的程序已经用于许多其他目的的函数)并检查它是否为非空。可以使用更高效的算法(请参阅caf的答案),但我的优势在于它不需要额外的代码。