You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Processing随机线分割画布后提取闭合形状及随机选点问题

1. 检测邻近点闭合最小形状的实现方法

现有代码仅存储了所有点的坐标,未记录点与点之间的连接关系,是无法直接生成闭合分割形状的核心原因,可按以下步骤实现:

  • 为每条随机生成的线单独存储所有关联点:包括自身上下端点、和其他所有线的交点,将这些点沿着线的走向排序后,相邻两点的线段就是构成形状的最小边,中间不存在其他交点。
  • 为每一条最小边存储正反两个方向的有向边,同时记录每条有向边的「下一条逆时针邻边」:逻辑为到达某个端点后,在所有以该点为起点的有向边中,找到和当前边逆时针夹角最小的边,即为下一段路径。
  • 遍历所有未访问的有向边,沿着下一条邻边持续遍历,直到回到起点,即可得到一个闭合的最小形状。将路径上的所有点通过beginShape()、endShape(CLOSE)绘制,就能得到完整的独立分割块。

2. 随机选取3个以上点的简化实现

如果不需要严格的几何分割形状,仅要从px、py数组中随机取点生成多边形,实现非常简单,参考代码如下:

// 可放在draw函数或自定义调用位置
int minPoint = 3;
// 随机决定取点数量,范围为3到数组总长度
int pickNum = minPoint + int(random(px.length - minPoint + 1));
// 生成不重复的随机索引
IntList idxList = new IntList();
for (int i = 0; i < px.length; i++) {
  idxList.append(i);
}
idxList.shuffle(); // 打乱所有索引顺序
// 绘制随机多边形
fill(random(255), random(255), random(255), 150);
noStroke();
beginShape();
for (int i = 0; i < pickNum; i++) {
  int idx = idxList.get(i);
  vertex(px[idx], py[idx]);
}
endShape(CLOSE);

如果需要保证随机生成的是凸多边形,只需将取出的点按极角排序后再连接即可。

内容的提问来源于stack exchange,提问作者user1427468

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 06:00:01