gpt4 book ai didi

ios - 将多边形拟合在一起

转载 作者:行者123 更新时间:2023-11-29 11:00:53 24 4
gpt4 key购买 nike

如何消除三角形之间的边界?

black triangles with white boundaries

我正在我的 triangle drawing app 中实现导出为 pdf .上图显示了 pdf 输出的样子。到处都是白色的边界,宽度不到 1 像素。

三角形可以有任何颜色。


我画每个三角形,像这样:

CGContextBeginPath(context);
CGContextMoveToPoint(context, x0, y0);
CGContextAddLineToPoint(context, x1, y1);
CGContextAddLineToPoint(context, x2, y2);
CGContextClosePath(context);
CGContextFillPath(context);

重要的是黑色和白色三角形具有相同的大小。


方法

方法 1 - 中风

在所有三角形周围绘制 1 像素粗的描边。

方法 2 - 挤出

将所有三角形拉伸(stretch) 2 个像素,使三角形重叠。

方法 3 - 合并

将相互接触的三角形组合成一个多边形。

方法 4 - PDF 重叠设置

也许PDF有消除边界的设置。不知道。

方法 5 - 后处理

创建一个过滤器来检测边界像素并消除它们。这对我不起作用,它需要保存为 PDF。 AFAIK,iOS 上的 PDF 不支持着色器代码。

方法 X - 更聪明的方法

是否有更好的方法将三角形拼接在一起?

最佳答案

您的坐标(x0y0x1y1 等)是否为整数点值?人们犯这个错误很常见,因为他们习惯于将 View 的框架设置在整点边界上。 CoreGraphics 使用以您提供的坐标为中心绘制的一点线进行绘制。我怀疑在所有情况下您都可以通过将坐标调整 0.5 点来消除伪影:

CGContextBeginPath(context);
CGContextMoveToPoint(context, x0 + 0.5, y0 + 0.5);
CGContextAddLineToPoint(context, x1 + 0.5, y1 + 0.5);
CGContextAddLineToPoint(context, x2 + 0.5, y2 + 0.5);
CGContextClosePath(context);
CGContextFillPath(context);

编辑:实际上我认为这行不通。这是另一个建议:

我将保留我之前的评论,因为我认为我所说的关于 CoreGraphics 坐标的内容是正确的,但我尝试了一些您描述的设置的实验,并且移动所有内容并没有消除那些边界伪影。但是添加这一行确实:

CGContextSetAllowsAntialiasing(context, false);

(我不知道为什么 CGContextSetAllowsAntialiasing 被声明为采用 stdbool 样式的 bool,但确实如此,这就是为什么我使用 false 而不是 NO 在这里,并不是说它有所作为。)

关于ios - 将多边形拟合在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15982521/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com