【发布时间】:2012-08-27 14:30:15
【问题描述】:
我正在努力寻找一个好的 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 重写它)。在渲染二维四边形时,我需要它来执行数学裁剪。
在上面的例子中,输入四边形都是矩形,但实际上它们可以是任何凸四边形。输出可以是 3 到 8 点之间的任何值(上面的示例应该发出 4 点多边形)。
【问题讨论】:
-
崩溃到底是什么意思?我假设这是一个分段错误?您可以使用调试器吗?