当使用限幅器库偏移多边形时,我得到了相当多的峰值,遗憾的是在我的用例中这是不可接受的,我不知道如何摆脱它。我尝试了所有类型的连接类型设置,但无法实现任何目标。任何帮助将不胜感激。
我的应用程序对模型进行分层并计算轮廓多边形。然后它还必须抵消轮廓。那时候有很多曲线的图层往往会得到一个或多个尖峰,例如:
现在这似乎并不坏但是一旦它发生在很多层中,模型就会变成这样:
重要的是要注意,在没有抵消轮廓的情况下,我得不到这些尖峰。
这是一个包含输入多边形的文件: http://sdrv.ms/H7ysUC
这是一个包含输出多边形的文件: http://sdrv.ms/1fLoZjT
操作的参数是带有默认限制的jtRound JointType的偏移操作。三角洲是-25000。我还尝试了所有其他JoinTypes,其限制范围从0到1000,但它们都创建了完全相同的峰值。其他JoinTypes虽然有一些其他添加的奇怪效果。
答案 0 :(得分:2)
好的,我可以确认有一个错误。当相邻的多边形边几乎共线时,就会发生这种情况。
以下是clipper.cs中关于第4220行的修复(尚未经过严格测试)
void OffsetPoint(JoinType jointype)
{
m_sinA = (normals[m_k].X * normals[m_j].Y - normals[m_j].X * normals[m_k].Y);
if (Math.Abs(m_sinA) < 0.00005) return; //ADD THIS LINE (todo - check this!)
else if (m_sinA > 1.0) m_sinA = 1.0;
else if (m_sinA < -1.0) m_sinA = -1.0;
注意:0.00005只是一个足够接近零的值,用于消除所提供样品中的尖峰,但可能需要通过进一步测试重新调整。