Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/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_Svg_D3.js_Event Handling_Geometry - Fatal编程技术网

Javascript 选择圆弧上的区域

Javascript 选择圆弧上的区域,javascript,svg,d3.js,event-handling,geometry,Javascript,Svg,D3.js,Event Handling,Geometry,我试图通过单击一个圆弧并四处拖动来进行选择。下面的示例显示了一个非常类似的概念,但选择是从一个随机位置开始的,相反,我希望通过在深蓝色弧上单击鼠标并四处拖动,从该弧上的位置开始。 var数据集={ 苹果:[532284], }; 变量度=数学PI/180; 可变宽度=460, 高度=300, 半径=数学最小值(宽度、高度)/2; var color=d3.scale.category20(); var pie=d3.layout.pie().startAngle(-90度)。endAngle(9

我试图通过单击一个圆弧并四处拖动来进行选择。下面的示例显示了一个非常类似的概念,但选择是从一个随机位置开始的,相反,我希望通过在深蓝色弧上单击鼠标并四处拖动,从该弧上的位置开始。
var数据集={
苹果:[532284],
};
变量度=数学PI/180;
可变宽度=460,
高度=300,
半径=数学最小值(宽度、高度)/2;
var color=d3.scale.category20();
var pie=d3.layout.pie().startAngle(-90度)。endAngle(90度)
.sort(空);
var arc=d3.svg.arc()
.内半径(50)
.外层(100);
var svg=d3.选择(“正文”).追加(“svg”)
.attr(“宽度”,宽度)
.attr(“高度”,高度)
.附加(“g”)
.attr(“变换”、“平移”(+width/2+)、“+height/2+”);
var path=svg.selectAll(“路径”)
.data(pie(dataset.apples))
.enter().append(“路径”)
.attr(“填充”,函数(d,i){
返回颜色(i);
})
.attr(“d”,弧)
.每个功能(d){
这是。_电流=d;
}); // 存储初始值;
设置间隔(dummyData,2000年);
//将显示的角度存储在_current中。
//然后,从_current插值到新角度。
//在转换过程中,_电流通过d3.interpolate就地更新。
函数arcTween(a){
var i=d3.内插(该电流为a);
该电流=i(0);
返回函数(t){
返回弧(i(t));
};
}
函数dummyData(){
var num=Math.floor(Math.random()*100);
var key=Math.floor(Math.random()*dataset.apples.length);
dataset.apples[key]=num;
draw();
};
函数绘图(){
svg.selectAll(“路径”)
.data(pie(dataset.apples))
.transition()
.attrTween(“d”,arcTween);
}
这是一条蓝色的线。可以在圆的内外单击,也可以尝试在两个端点下方单击

绿色圆圈仅用于美学(即:用喜爱的宠物图片替换它:-) 测试在IE9、最新的Chrome和FF中工作(2014年10月)

编辑:添加了拖动功能。下面的代码是原始的小提琴

var s=Snap(400400);
var circleX=100,circleY=100,circleRadius=57;
var stroke_width=20;
var blueCircle=s.circle(circleX、circleY、circleRadius);
var hcp=Math.Pi*circleRadius;//半圆周长=179.0
//弧径
变量d='M 43100 A 57,57 0 0 1 43100';
var arcPath=s.path(d);
arcPath.attr({
填写:“无”,
笔画:“红色”,
“笔划宽度”:笔划宽度
});
//线路路径
变量L1=s.path(“M”+circleX+“”+circleY+“l0”);
blueCircle.attr({
填写:“无”,
笔触:“天蓝色”,
“笔划宽度”:笔划宽度,
“笔划数组”:“0179179”
});
var c1=s.circle(0,0,5).attr({fill:“none”,stroke:“green”});
函数OnMouseDown(evt){
var mouseY=Math.min(evt.clientY,100);//将mouseY限制为100
L1.attr({d:“M”+circleX+“”+circleY+“L”+evt.clientX+“”+mouseY});
var totalLength=L1.getTotalLength();
如果(总长度

你好,阿尔文,下面是我使用arcs.on(“mousedown”,function(d){var div=d3.select(this)。classed(“active”,true);currentSelected=this;console.log(d3.mouse(arcs.node());d3.select(window)。on('mousemove',mousemove)。on('mouseup',mouseup);var point=d3.mouse(arcs.node());startAngle=(Math.atan2(点[1],点[0])+Math.PI/2);console.log(startAngle);};我已经转换了x,y角度,我在mousemove事件上也做了同样的转换,计算了结束角度。非常感谢您的帮助。@user3202499:您是否有此编码的小提琴链接?