P5.js curveVertex 函数在某个点闭合

2023-12-27

我创建了一个噪声函数,它与一个圆函数配对,创建一个看起来很酷的随机噪声圆。我的问题是curveVertex除了第一个和最后一个顶点的连接之外,P5.js 中的函数工作正常。我的代码是:

let start = Array(50).fill(0); // dont change
let amount = 1; // amount of shapes
let gap = 30; // between shapes
let amplify = 50; // 0 -->
let colorSpeed = 1; // 1 - 9
let colorSeparation = 3; // 0 - 80 recomended 0 - 10

function setup() {

  createCanvas(windowWidth, windowHeight);
  
  for(let  i = 0 ; i < start.length; i++){
    start[i] = random(i);
  }
  
}

function draw() {
  
  background(0);
  
  for(let dnc = (amount + 1) * gap; dnc > gap; dnc -= gap){
    drawNoiseCircle(dnc, getNoise(start.length));
  }
    
  start = start.map( c => c + 0.01 );
  
}

function getNoise(amount){
  
  let lengths = [];
  
  for(let i = 1; i < amount + 1; i++){
    
    let n1 = noise(start[i - 1]);
    let noise1 = map(n1, 0, 1, -amplify, amplify);

    lengths.push(abs(-noise1));
    
  }
  
  return lengths;
  
}

function drawNoiseCircle(radius, lengths){
  
  colorMode(HSB);
  fill(((frameCount + radius) * colorSeparation)/-map(colorSpeed, 1, 10, -10, -1) % 360, 100, 50);
  noStroke()

  let x;
  let y;
  
  beginShape();
  
  for(let l = 0; l < lengths.length; l++){
    
    x = Math.cos(radians(l * 360 / lengths.length)) * (radius + lengths[l]) + width/2;
    y = Math.sin(radians(l * 360 / lengths.length)) * (radius + lengths[l]) + height/2;
    
    curveVertex(x, y);
    
  }
  
  endShape(CLOSE);
  
  stroke("black");
  line(width/2, height/2, width, height/2);
  
  line(width/2, height/2 + 9, width, height/2 + 9);

}
<script src="https://cdn.jsdelivr.net/npm/[email protected] /cdn-cgi/l/email-protection/lib/p5.js"></script>

我明白了endShape(CLOSED)用直线闭合形状,但我不确定是否有其他方法来闭合形状。

您可以看到右侧的尖边,就在形状的中间。

!EDIT!

我已向形状添加了线条以显示不受曲线顶点影响的线段。另外,我知道这可能不是一个非常重要的问题,但如果顶点数量缩小,它就会变成一个更大的问题(例如正方形或三角形)。


不幸的是,我当时没有时间深入研究并调试 curveVertex (或数学)的实际问题,但似乎有一些有趣的东西curveVertex()尤其。

@Ouoborus 的观点是有道理的,函数“应该”以这种方式运行(并且它是与vertex(), 但不是curveVertex())。因为某些原因curveVertex()不仅需要再次循环第一个点,还需要循环第二个和第三个点。

这是基本示例:

function setup() {
  createCanvas(300, 300);
  
  background(220);
  
  let numPoints = 6;
  let angleIncrement = TWO_PI / numPoints;
  let radius = 120;
  
  beginShape();
  for(let i = 0 ; i < numPoints + 3; i++){
    let angle = angleIncrement * i;
    let x = 150 + cos(angle) * radius;
    let y = 150 + sin(angle) * radius;
    curveVertex(x, y);
  }
  endShape();
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.1/p5.min.js"></script>

尝试减少numPoints + 3 to numPoints + 2或注意您所描述的行为。 (我推测这可能与如何curveVertex()(Catmull-Rom样条)在p5中实现以及它需要多少个坐标/点,但是如果不阅读源代码并稍微调试一下,这是不准确的)

这是使用上述注释的代码版本:

let start = Array(30).fill(0);

let colorSpeed = 1; // 1 - 9
let colorSeparation = 3; // 0 - 80 recomended 0 - 10

function setup() {
  createCanvas(600, 600);
  colorMode(HSB);
  noStroke();
  // init noise seeds
  for(let  i = 0 ; i < start.length; i++){
    start[i] = random(i);
  }
}

function getNoise(seeds, amplify = 50){
  let amount = seeds.length;
  let lengths = [];
  
  for(let i = 1; i < amount + 1; i++){
    
    let n1 = noise(seeds[i - 1]);
    let noise1 = map(n1, 0, 1, -amplify, amplify);

    lengths.push(abs(-noise1));
    
  }
  
  return lengths;
  
}

function drawNoiseCircle(radius, lengths){
  let sides = lengths.length;
  let ai = TWO_PI / sides;
  let cx = width * 0.5;
  let cy = height * 0.5;
  
  fill(((frameCount + radius) * colorSeparation)/-map(colorSpeed, 1, 10, -10, -1) % 360, 100, 50);
  
  beginShape();
  for(let i = 0 ; i < sides + 3; i++){
    let noiseRadius = radius + lengths[i % sides];
    let a = ai * i;
    let x = cx + cos(a) * noiseRadius;
    let y = cy + sin(a) * noiseRadius;
    curveVertex(x, y);
  }
  endShape();
}

function draw() {
  background(0);
  // draw with updated perlin noise values
  drawNoiseCircle(120, getNoise(start));
  // increment noise seed
  start = start.map( c => c + 0.01 );
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.1/p5.min.js"></script>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

P5.js curveVertex 函数在某个点闭合 的相关文章

随机推荐

  • 更新函数内的全局 js 变量并将更新后的内容发送到 HTML 文档

    我在更新全局变量并将更新后的内容发送到 HTML 时遇到了很大的困难 我在 HTML 中有以下内容 We found places for you 在 JavaScript 中 var mainCount 3 Global variable
  • 如何在 PyMuPDF 中获取文本的背景颜色

    我试图看看是否可以使用文本的背景和前景色识别 PDF 内表格中可能的表格标题 通过 PyMuPDF 文本提取 我能够获得前景色 想知道是否有办法也获得背景颜色 我使用 pymupdf 1 16 2 和 python 3 7 我已检查过文档
  • NSPointerArray 奇怪的压缩

    我有一个弱者NSPointerArray和一些NSObject已被释放 致电之前compact我看到的是 lldb po currentArray count 1 lldb po currentArray pointerAtIndex 0
  • Next.js - router.push 无需滚动到顶部

    我正在通过导入使用下一个路由器useRouter from next router 我正在尝试找到一种解决方案 当我更改 URL 的查询时 该解决方案不会滚动到页面顶部 有什么解决办法吗 我知道 Next 的 Link 组件有这个选项 但我
  • 创建 CSS 网格布局

    我需要使用 CSS 网格创建一个布局 如下图所示 分辨率高于 900px For resolutions below 900px I need the layout to look like this 到目前为止 我已经尝试过 contai
  • 如何在Java中获取当前日期/时间[重复]

    这个问题在这里已经有答案了 在 Java 中获取当前日期 时间的最佳方法是什么 在 Java 中获取当前日期 时间的最佳方法是什么 没有 最好 的方法 这取决于您想要什么形式的日期 时间 If you want the date time
  • 如何使用 ANTLR4 创建 AST?

    我对此进行了很多搜索 但找不到任何有用的东西可以真正帮助我构建 AST 我已经知道 ANTLR4 不像 ANTLR3 那样构建 AST 每个人都说 嘿 使用访问者 但我找不到任何示例或更详细的解释如何做到这一点 我有一个必须像 C 语言一样
  • LINQ 内部如何工作?

    我喜欢在 NET 中使用 LINQ 但我想知道它的内部工作原理是什么 询问 LINQ 的某个特定方面更有意义 这有点像问 Windows 是如何工作的 从 C 的角度来看 LINQ 的关键部分对我来说是 表达式树 这些是代码作为数据的表示
  • 带有选项字段的 F# 记录在 Asp.Net WebApi 2.x 应用程序中无法正确反序列化

    我有一个 C Asp Net MVC 5 2 7 应用程序 支持面向 Net 4 5 1 的 WebApi 2 x 我正在尝试使用 F 并向解决方案中添加了一个 F 库项目 Web 应用程序引用 F 库 现在 我希望能够让 C WebApi
  • System.Data.Entity.Infrastruct.CommitFailedException:C# 多线程和 SQL Server 2012

    我们有一个 C 多线程 100 个线程 程序 它从数据库读取记录 每个线程获取一条记录 每个线程一个实体框架连接 并更新单个数据库表 在最初的几分钟 5 分钟 内 程序运行良好 没有异常 然后突然所有线程开始抛出以下错误消息 大约 1 分钟
  • 参数化 SQL、ORACLE 与带有正则表达式的 SQL Server

    Oracle 和 Sql 服务器在参数化字符串中使用不同的参数前缀 sql使用 p1 ORA使用 p1 我想在我的 SQL 中使用 如果使用 ORA 数据库 字符应替换为 你能帮我创建正则表达式吗 下面是一些 SQL 示例 update t
  • c# 仍然返回错误的核心数

    好的 所以我发布了在 C 中 GetEnvironmentVariable NUMBER OF PROCESSORS 返回错误的数字 https stackoverflow com questions 11571994 in c sharp
  • R、SOM、Kohonen 包、异常值检测

    我用 SOM 做了一些实验 首先 我在 Python 中使用 MiniSOM 但没有留下深刻的印象 于是改用 R 中的 kohonen 包 它比以前提供了更多功能 基本上 我将 SOM 应用到三个用例 1 使用生成的数据进行二维聚类 2 使
  • iOS、Cocoa、AppiRater - 如何本地化 SKStoreProductViewController 的取消按钮

    如何本地化弹出的 AppiRater 视图控制器中的 取消 按钮 我正在查看 AppiRater 代码 它使我们SKStoreProductViewController像这样 SKStoreProductViewController sto
  • 如何知道Linux中特定引脚的中断/GPIO编号

    我正在做一个项目 需要在 Linux 中处理中断 我正在使用的板是基于三星的s3c6410 MCU arm 11处理器 它具有以下I O接口 如图所示 我有用于外部中断的 EINTx 引脚和用作 GPIO 引脚的 GPxx 引脚 我不介意使
  • 从内部存储读取 JSON 文件的内容

    如何从内部存储输出 JSON 文件的内容 以下是目前正在开展的工作 String filename names json final File file new File Environment getDataDirectory filen
  • Go 中的多个response.WriteHeader 调用

    我的 Go 服务器正在处理我首先调用的请求response WriteHeader 为了设置我的响应的状态代码 之后 我开始将字节写入响应正文 如果浏览器在我复制字节时取消请求 则会收到错误消息 write tcp 1 52319 brok
  • 如果定义了父 pom,则不会发生存储库 url 的 Maven 属性替换

    我遇到一个问题 当且仅当定义了父 pom 时 maven 才无法正确地将属性替换到我的存储库 URL 中 这尤其是一个问题 因为父 pom 位于远程存储库中 所以我需要定义父 pom 最小可重现示例
  • 将 NSNumber 与固定值进行比较?

    有没有更好的方法来比较 NSNumber 与固定值 只是感觉有点笨拙 if myNumber isEqualToNumber NSNumber numberWithInt 0 NSLog Zero 我确实知道我可以使用 compare 但它
  • P5.js curveVertex 函数在某个点闭合

    我创建了一个噪声函数 它与一个圆函数配对 创建一个看起来很酷的随机噪声圆 我的问题是curveVertex除了第一个和最后一个顶点的连接之外 P5 js 中的函数工作正常 我的代码是 let start Array 50 fill 0 do