我正在努力寻找一个好的 Sutherland–Hodgman 算法的有效实现,用于通过另一个多边形的边缘裁剪一个多边形。输入多边形始终是由四个点组成的四边形。
我能找到的最好的C 实现是这个看起来完美且速度极快的实现,但不幸的是,它在某些输入上崩溃,而且我不够聪明,无法确定算法中究竟出了什么问题(它适用于一些输入值和中断和其他人)。这是使其崩溃的四边形的一些值的示例:
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 重写它)。在渲染二维四边形时,我需要它来执行数学裁剪。
在上面的例子中,输入四边形都是矩形,但实际上它们可以是任何凸四边形。输出可以是 3 到 8 点之间的任何值(上面的示例应该发出 4 点多边形)。