Javascript 计算绳子的长度和一个奇怪的结果

Javascript 计算绳子的长度和一个奇怪的结果,javascript,p5.js,Javascript,P5.js,我试图在p5.js中计算圆形/椭圆形范围内的绳索长度。 给出的参数是值和大小值是一个由3个值组成的简单数组:色调、饱和度和亮度。更重要的参数是size,它是形状(圆)的宽度和高度。 当for循环在size长度上迭代时,通过毕达哥拉斯定理计算出一半的跳线长度r是size大小或半径的一半y是循环的的当前值r^2-| y-r^2=x^2其中x是跳线长度的一半(不需要绝对值,但它或多或少只是为了确保和调试)。 然而,每当我在等式中求平方时,我就会得到下面的奇数形状。当我不在方程中求平方时,我得到旋转的平

我试图在p5.js中计算圆形/椭圆形范围内的绳索长度。
给出的参数是
大小
<代码>值是一个由3个值组成的简单数组:色调、饱和度和亮度。更重要的参数是
size
,它是形状(圆)的宽度和高度。
for
循环在
size
长度上迭代时,通过毕达哥拉斯定理计算出一半的跳线长度
r
size
大小或半径的一半
y
是循环的
的当前值
r^2-| y-r^2=x^2
其中
x
是跳线长度的一半(不需要绝对值,但它或多或少只是为了确保和调试)。
然而,每当我在等式中求平方时,我就会得到下面的奇数形状。当我不在方程中求平方时,我得到旋转的平方。背景中的圆圈表示我试图显示的当前HSL

当我没有平方
r

当I平方
r

这是我当前的代码:

this.draw = function(values, size) {
  //angleMode(DEGREES);
  this.gap = values[2];
  this.r = size / 2;
  this.lCol = map(values[1], 0, 100, 10, 70)

  strokeUniform(this.lCol);
  fillUniform(map(values[2], 0, 100, this.lCol + 20, 240));
  strokeWeight(map(values[0], 0, 360, 0, 10));
  translate(this.r, this.r, 0);

  for (y = 0; y < size; y++) {
    if (y % Math.floor(this.gap / 2) == 0) {
      if (this.r > y) {
        this.len = ((this.r ^ 2 - (Math.abs(this.r - y) ^ 2))) ^ 0.5;
        line(0 - this.len, 0 - (this.r - y), 0 + this.len, 0 - (this.r - y));
      } else {
        this.len = ((this.r ^ 2 - ((y - this.r) ^ 2))) ^ 0.5;
        line(0 - this.len, y - this.r, 0 + this.len, y - this.r);
      }
    }
  }
}
this.draw=函数(值、大小){
//角度模式(度);
此.gap=值[2];
这个。r=尺寸/2;
this.lCol=map(值[1],0,100,10,70)
冲程制服(this.lCol);
fillUniform(map(值[2],0100,this.lCol+20240));
冲程权重(map(值[0,0,360,0,10));
翻译(this.r,this.r,0);
对于(y=0;yy){
this.len=((this.r^2-(Math.abs(this.r-y)^2))^0.5;
行(0-this.len,0-(this.r-y),0+this.len,0-(this.r-y));
}否则{
this.len=((this.r^2-((y-this.r)^2))^0.5;
行(0-this.len,y-this.r,0+this.len,y-this.r);
}
}
}
}

这并没有达到您预期的效果:

r^2
^
符号是二进制数,它适用于二进制数。例如:

var x = 5; // 0101
var y = 1; // 0001
var z = x ^ y; // 0100
console.log(z); // 4
换句话说,XOR运算符查看数字二进制表示形式中的每个数字,如果只有一个参数为1,则结果数字为1

更多信息请点击此处:

您可能需要
Math.pow()
函数。可以找到更多信息

更好的是,P5.js提供了
sq()
函数。更多信息可在中找到


类似地,寻找
Math.sqrt()
或P5.js
sqrt()
函数,而不是使用
^0.5

阅读Java中
^
操作符的功能以及为什么它与
Math.sqrt
不同。