javascript数学函数:现在它形成一个圆,我需要做一个半圆
这些是使用的代码,现在它形成了一个完整的圆,但我需要一个半圆。必须对JS函数进行更改,但我添加了html和CSS以供参考 有人能告诉我怎样把它做成椭圆吗? JS: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
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;
}
开始:
完:
<