Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何正确地将颜色渐变应用于圆弧?_Javascript_Css_D3.js_Svg - Fatal编程技术网

Javascript 如何正确地将颜色渐变应用于圆弧?

Javascript 如何正确地将颜色渐变应用于圆弧?,javascript,css,d3.js,svg,Javascript,Css,D3.js,Svg,我正在构建一个类似以下内容的视觉效果: 到目前为止,我已成功创建了以下内容: 其思想是将一个值映射到一个角度,以便我知道箭头指向何处,然后我将为箭头上色,使其与它指向的弧上的点的颜色相同 我基本上有两个问题: 首先,我可以做些什么,以使颜色更好地排列。我使用了一个线性渐变,如下所示: let defs = this.gaugeEl .append("defs") .classed("definitions",true);

我正在构建一个类似以下内容的视觉效果:

到目前为止,我已成功创建了以下内容:

其思想是将一个值映射到一个角度,以便我知道箭头指向何处,然后我将为箭头上色,使其与它指向的弧上的点的颜色相同

我基本上有两个问题:

首先,我可以做些什么,以使颜色更好地排列。我使用了一个线性渐变,如下所示:

 let defs = this.gaugeEl
                .append("defs")
                .classed("definitions",true);
        let gradient = defs
            .append("linearGradient")
            .classed("linearGradient",true);

        gradient
            .attr({
                id: 'gradient',
                x1: '0%',
                y1: '0%',
                x2: '100%',
                y2: '100%',
                spreadMethod: "pad"
            });

        gradient
            .append("stop")
            .classed('start',true)
            .attr({
                offset: '0%',
                'stop-color': 'lawngreen',
                'stop-opacity': 1
            });

        gradient.append("stop")
            .classed('end',true)
            .attr({
                offset: '100%',
                'stop-color': 'red',
                'stop-opacity': 1
            });
效果不是我所希望的,能做些什么


关于渐变如何工作的下一个问题,我需要能够将一个角度与一种颜色相关联,这样我才能正确地为箭头和记号着色,而在我当前的设置中,我不知道如何做到这一点。有可能吗?

我不知道这对你有多大用处。但我遵循了下面的实现

将弧拆分为小弧 使用比例线关联颜色和角度,并将圆弧分为四段 忽略糟糕的数学和代码

图表{ 宽度:960px; 高度:350px; } var vis=d3.selectchart.appendg var-pi=Math.pi; var line=d3.line .xfunction d{return d.x;} .yfunction d{返回d.y;}; 变量行=[] var断点=100; var angleArr=[]; var-arcArr=[]; //角度arr[0]=-pi/2; var colorScale=d3.scaleLinear .domain[-pi/2,-pi/3,30*pi/180,pi/2] .范围[‘浅绿色’、‘浅绿色’、‘黄色’、‘红色’]; var angleScale=d3.scaleLinear .范围[-pi/2,pi/2] .domain[0,断点-1]; var prevAngle=-pi/2; forvar i=0;i<断点;i++{ angleArr[i]=angleScalei; var singleArrow=[{x:150*Math.sinangleArr[i],y:-150*Math.cosangleArr[i]},{y:-170*Math.cosangleArr[i],x:170*Math.sinangleArr[i]}; //var subArc={start:prev,end:0}; var subArc={}; 行。单箭头; Subrac[开始]=前角; subrac[end]=anglerar[i]; prevAngle=angleArr[i]; arcArr.pushsubac; } var arc=d3.arc .内半径160 .户外170 .startAngle pi/2//从degs转换为弧度 .endAnglepi/2//仅弧度 vis.attrwidth,400.attrheight,400//增加了高度和宽度,使圆弧可见 .附录 .attransform,translate200200; vis.selectAllline .数据线 进来 .appendpath.attrclass、arrow.attrd、line.attrstroke、functiond、i{ 返回colorScaleangleArr[i]}.attrtransform,translate200200; vis.selectAllarcs .dataarcArr 进来 .appendpath.attrclass、arc.attrd、functiond、i{ 返回d3.5弧 .内半径160 .户外170 .斯塔德 .endAngled.start}.attrfill,函数d,i{ 返回colorScaleangleArr[i]}.attrtransform,translate200200;
现在有一种更简单的方法可以使用css属性(称为圆锥梯度)来实现这一点

它根据给定中心点的角度设置颜色。也许你可以通过点击事件获得点的角度,计算出从中心的角度,然后以此方式设置颜色


这里有一些关于圆锥梯度的更多信息,包括如何计算:

试着一次只问一个问题。关于路径梯度-这很漂亮!最后我做了类似的事情,只使用了paths元素,它的优点是可以很容易地推广到许多形式。你的结果比我的好,我相信我会采用这种方法。谢谢