javascript数学函数:现在它形成一个圆,我需要做一个半圆

javascript数学函数:现在它形成一个圆,我需要做一个半圆,javascript,math,geometry,trigonometry,Javascript,Math,Geometry,Trigonometry,这些是使用的代码,现在它形成了一个完整的圆,但我需要一个半圆。必须对JS函数进行更改,但我添加了html和CSS以供参考 有人能告诉我怎样把它做成椭圆吗? JS: var items=document.querySelectorAll('.circle a'); 对于(变量i=0,l=items.length;i

这些是使用的代码,现在它形成了一个完整的圆,但我需要一个半圆。必须对JS函数进行更改,但我添加了html和CSS以供参考

有人能告诉我怎样把它做成椭圆吗? JS:

var items=document.querySelectorAll('.circle a');
对于(变量i=0,l=items.length;i
.circle{
宽度:250px;
高度:250px;
不透明度:100%;
-webkit转换:规模(1);
-moz变换:比例(1);
变换:比例(1);
-webkit过渡:所有0.4s都轻松推出;
-moz过渡:所有0.4都会变缓;
过渡:所有0.4s缓解;
}
.开放式圆圈{
不透明度:1;
-webkit转换:规模(1);
-moz变换:比例(1);
变换:比例(1);
}
.圈出a{
文字装饰:无;
颜色:黑色;
显示:块;
最小宽度:1米;
位置:绝对位置;
文本对齐:居中;
}
.圆圈a:悬停{
颜色:#eef;
}

从两个赋值中的2*(1/l)iMath.PI中删除2。 现在,您的代码依赖于I递增以满足L,因此导致2*(1/L)iMath.PI的值增加2Pi,从而形成一个圆

如果我们把它的增长能力减少一半,它只会绕半圈。 也许我错了,没有尝试过:P

在两个赋值中从2*(1/l)iMath.PI中删除2。 现在,您的代码依赖于I递增以满足L,因此导致2*(1/L)iMath.PI的值增加2Pi,从而形成一个圆

如果我们把它的增长能力减少一半,它只会绕半圈。
也许我错了,我还没有试过:如果你把数学讲出来,会更容易理解

const centerX = 50;
const centerY = 50;
const radius = 35;

var items = document.querySelectorAll('.circle a');
for(var i = 0, l = items.length; i < l; i++) {

  const angle = -0.5 * Math.PI - 2 * (1 / l) * i * Math.PI;

  items[i].style.left = (centerX - radius * Math.cos(angle)).toFixed(4) + "%";

  items[i].style.top = (centerY + radius * Math.sin(angle)).toFixed(4) + "%";
}
那么让我们把这个数学问题讲一下 让我们重新调整角度,使其更清晰

  const zeroToOne = i / len;  // goes from zero to one
  const angleOffset = -0.5 * Math.PI;
  const angle = angleOffset - 2 * zeroToOne * Math.PI;
对于从0到1的值,lerping更容易。一旦我们得到一个从零到一的值,我们就可以很容易地生成一个函数,将其转换为任何范围

  function lerp(start, end, zeroToOne) {
     return start + (end - start) * zeroToOne;
  }
所以

现在您可以自由地将
startAngle
endAngle
更改为您喜欢的任何内容

const items=document.querySelectorAll('.circle a');
常数centerX=50;
常数中心Y=50;
常数半径=35;
设startAngle=0;
设endAngle=2*Math.PI;
函数render(){
对于(变量i=0,len=items.length;i
.circle{
宽度:250px;
高度:250px;
不透明度:100%;
-webkit转换:规模(1);
-moz变换:比例(1);
变换:比例(1);
-webkit过渡:所有0.4s都轻松推出;
-moz过渡:所有0.4都会变缓;
过渡:所有0.4s缓解;
}
.开放式圆圈{
不透明度:1;
-webkit转换:规模(1);
-moz变换:比例(1);
变换:比例(1);
}
.圈出a{
文字装饰:无;
颜色:黑色;
显示:块;
最小宽度:1米;
位置:绝对位置;
文本对齐:居中;
}
.圆圈a:悬停{
颜色:#eef;
}
开始:
完:

如果你把数学讲清楚,就会更容易理解

const centerX = 50;
const centerY = 50;
const radius = 35;

var items = document.querySelectorAll('.circle a');
for(var i = 0, l = items.length; i < l; i++) {

  const angle = -0.5 * Math.PI - 2 * (1 / l) * i * Math.PI;

  items[i].style.left = (centerX - radius * Math.cos(angle)).toFixed(4) + "%";

  items[i].style.top = (centerY + radius * Math.sin(angle)).toFixed(4) + "%";
}
那么让我们把这个数学问题讲一下 让我们重新调整角度,使其更清晰

  const zeroToOne = i / len;  // goes from zero to one
  const angleOffset = -0.5 * Math.PI;
  const angle = angleOffset - 2 * zeroToOne * Math.PI;
对于从0到1的值,lerping更容易。一旦我们得到一个从零到一的值,我们就可以很容易地生成一个函数,将其转换为任何范围

  function lerp(start, end, zeroToOne) {
     return start + (end - start) * zeroToOne;
  }
所以

现在您可以自由地将
startAngle
endAngle
更改为您喜欢的任何内容

const items=document.querySelectorAll('.circle a');
常数centerX=50;
常数中心Y=50;
常数半径=35;
设startAngle=0;
设endAngle=2*Math.PI;
函数render(){
对于(变量i=0,len=items.length;i
.circle{
宽度:250px;
高度:250px;
不透明度:100%;
-webkit转换:规模(1);
-moz变换:比例(1);
变换:比例(1);
-webkit过渡:所有0.4s都轻松推出;
-moz过渡:所有0.4都会变缓;
过渡:所有0.4s缓解;
}
.开放式圆圈{
不透明度:1;
-webkit转换:规模(1);
-moz变换:比例(1);
变换:比例(1);
}
.圈出a{
文字装饰:无;
颜色:黑色;
显示:块;
最小宽度:1米;
位置:绝对位置;
文本对齐:居中;
}
.圆圈a:悬停{
颜色:#eef;
}
开始:
完:
<