我正在努力寻找Sutherland-Hodgman算法的良好工作实现,用于通过另一个多边形的边缘剪切一个多边形。输入多边形总是由四个点组成的四边形。
我能找到的最佳 C实现this one看起来很完美且速度非常快,但不幸的是,它在某些输入上崩溃了,而且我不够聪明,无法确定究竟是什么算法出错(它适用于某些输入值并与其他输入值断开)。这是使它崩溃的四边形的一些值的示例:
vec_t c[] = {{400,400}, {200,200}, {400,200}, {200,400}};
vec_t s[] = {{300,300}, {100,100}, {300,100}, {100,300}};
poly_t clipper = {4, 0, c};
poly_t subject = {4, 0, s};
poly res = poly_clip(&subject, &clipper);
任何人都可以提出该算法的问题或建议更好地实现它可以使用相同类型的输入(轮廓点)? C是首选但我可以使用任何实现,只要所有步骤都已实现(我将不得不在C中重写它)。我需要这个来渲染2D四边形的数学剪辑。
在上面的例子中,输入四边形都是rects,但实际上它们可以是任何凸四边形。输出可以是3到8个点(上面的例子应该发出4点多边形)。
答案 0 :(得分:4)
限幅点必须定义凸多边形。你似乎按照他们定义图8的顺序得到你的分数。试试: vec_t c [] = {{400,400},{400,200},{200,200},{200,400}};
请参阅算法说明:http://en.wikipedia.org/wiki/Sutherland%E2%80%93Hodgman
答案 1 :(得分:0)
你的观点必须按逆时针顺序......