在2D平面中,我有一个线段(P0和P1)和一个三角形,由三个点(t0,t1和t2)定义。
我的目标是尽可能有效地(在计算时间方面)测试线是否接触,或切入或重叠三角形的一个边缘。
一切都是二维的!我希望有人可以帮我在python中写这个。
感谢大家的帮助!
答案 0 :(得分:0)
您可以从Cohen-Sutherland线裁剪算法https://en.wikipedia.org/wiki/Cohen%E2%80%93Sutherland_algorithm中获取灵感,该算法基于"区域代码"讨论交叉点。在三角形的情况下,有7个区域需要考虑(因此21个案例,但很多对称),并且每个段端点需要进行三次测试才能进行分类。
对于区域代码的某些组合,结论是立即的,对于其他一些组合,您将需要额外的测试来判断支撑线是否穿过三角形。
你可以(应该)通过改变坐标来简化计算:通过使用由三个三角形顶点定义的仿射帧,边的方程式简化为X = 0,Y = 0,X + Y = 1。
根据三角形和线段的确切分布,边界框测试可能不会有用。
答案 1 :(得分:0)
幸运的是,线段永远不会在三角形内部开始和结束,它总是会相交。下面是我在python中的代码。这是基于凯文的想法,你只需要一次评估每个线段坐标,看看它们是否相交。如果是直线和三角形,请运行代码3次。任何人都有问题?(在python中实现):
{{1}}
`