画两个圆,我想把交叉的部分涂上颜色,怎么做?

sdf sdf

这个我问了deepseek,


用到Graphics的那种方法的,需要精确控制或动态变化的复杂重叠区域.
简单的图的话,还是mask试一下吧.

好的,有点难,哈哈

没懂 :upside_down_face:

这种shader最省时间 :slightly_smiling_face:

「可以」 是一个几何问题

问题可以转换一下

两个相交圆,如何获取其重叠区域的多边形

  1. 判断相交情况 :首先需要确定两个圆是否相交,并且相交于两点。如果不相交或只有一个交点(相切),那么重叠多边形就不存在或者退化为一个点。
  2. 计算交点 :如果相交于两点,精确计算出这两个交点的坐标。
  3. 确定圆弧段 :重叠区域的边界由两个圆上各的一段圆弧组成。我们需要确定是哪一段。
  4. 离散化圆弧 :将这两段圆弧分别用一组连续的点(即多边形顶点)来近似。
  5. 连接点集 :将两个圆弧离散化后得到的点集,按照正确的顺序连接起来,形成一个封闭的多边形。

这个确实是个办法,但是没法拓展开来 :joy:我想实现的是填充任意封闭区域那种

一个思路,多边形重叠,重叠区域必定大于1,大于1的区域上色

理论思维是这样,代码中怎么弄呢?计算机又不会判断哪块重叠了几次

  1. 你可以用一个二维数组代表你的画布,2048x2048,如果你是希望操作纹理,可以考虑创建一个 RenderTexture,也是操作像素

  2. 画一个多边形后,将标记数组中对应位置的值+1

  3. 画一个xxx形后,将标记数组中对应位置的值+1

  4. n次后,你就知道哪些地址的值大于1

当然,第2、3步的画,不一定是画,你可以只是标记,具体看你需求吧

好的,像素级操作 :+1:

我记得以前好像有别的引擎可以实现,不知道是Egret还是Laya

实在不行就用canvas画布,这个应该可以

1赞

:+1:收到

用shader模板缓冲感觉可以

好简洁的回答,我研究一下

复杂了吧, 分2个情况, 圆+圆, 圆+方,

圆+圆 2个arc 闭合
圆+方 1个arc+多个线条 闭合

好处是维护简单, 缺点性能自己想办法

两个三阶贝塞尔曲线交叉部分,阁下如何处理 :rofl:

看数量多不多, 如果只有1个, 就把其他的做一个rt, 这个图片1个rt, 2个rt 算 alpha-cut,
rt1.a>0 && rt2.a>0
gl_FragColor.color = xxx