Algorithm 萨瑟兰–;C语言中的霍奇曼算法?

Algorithm 萨瑟兰–;C语言中的霍奇曼算法?,algorithm,geometry,2d,Algorithm,Geometry,2d,我正在努力寻找一个好的、有效的萨瑟兰-霍奇曼算法的实现,用另一个多边形的边剪裁一个多边形。输入多边形始终是由四个点组成的四边形 我能找到的最好的C实现是,它看起来很完美,速度非常快,但不幸的是,它在某些输入上崩溃了,我没有足够的智慧来确定算法中到底出了什么问题(它与一些输入值一起工作,与其他输入值一起中断)。这是使其崩溃的四边形的一些值的示例: vec_t c[] = {{400,400}, {200,200}, {400,200}, {200,400}}; vec_t s[] = {{300,

我正在努力寻找一个好的、有效的萨瑟兰-霍奇曼算法的实现,用另一个多边形的边剪裁一个多边形。输入多边形始终是由四个点组成的四边形

我能找到的最好的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点多边形)

裁剪器点必须定义凸多边形。你的观点似乎是按这样的顺序排列的,以至于它们定义了一个图8。尝试: 向量c[]={400400}、{400200}、{200200}、{200400}


请参见算法说明:

裁剪器点必须定义凸多边形。你的观点似乎是按这样的顺序排列的,以至于它们定义了一个图8。尝试: 向量c[]={400400}、{400200}、{200200}、{200400}


请参阅算法说明:

您的点必须按逆时针顺序排列…

您的点必须按逆时针顺序排列…

崩溃到底是什么意思?我假设这是一个分割错误?你有调试器的权限吗?你说的崩溃到底是什么意思?我假设这是一个分割错误?你有调试器的访问权限吗?